Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Господи, да что ж делается-то?! [D5, Win95/98]


Страницы:   1 2 3

Baz ©   (2001-12-26 10:21:00) 

Здравствуйте, мэтры!
ПОЧЕМУ после выполнения строки
for M:=-1000 to 1000 do
переменная М становится равна 2001, а, если изменить на
for M:=-100 to 1000 do
то 1101. М описана как integer. Я чего-то не знаю, или пора из компа бесов изгонять?!
Заранее спасибо за любые подсказки
Baz.


Андрей Сенченко   (2001-12-26 11:42:00) [41]

НЕ ВЕРЮ
При прогоне примера значение M внутри цикла равно собственно тому, что насчиталось в for ... do, а на выходе из цикла - Верхняя граница + 1
Желающие могут запустить :


unit Unit1;

interface

uses
Windows, SysUtils, Controls, Forms, Buttons, StdCtrls, Classes;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do
Label1.Caption := IntToStr(i);
Label2.Caption := IntToStr(i);
end;

end.


Alx2   (2001-12-26 11:00:00) [42]

for M:=-100 to 1000 do;
У меня выглядит как
@start:
mov ebx,$ffffff9c
inc ebx
cmp ebx,$3e9
jnz @start:
После цикла, в этом случае естественно, m = 1001.
Но предупреждение: в зависимости от оптимизации значение m не обязано быть равным 1001 полсе такого цикла. Есть множество причин этому.


Lusha   (2001-12-26 10:57:00) [43]

А точка с запятой после DO не стоит случаем?


Гриф   (2001-12-26 10:56:00) [44]

Это работа оптимизатора кода.
Если переменная цикла не используется в теле цикла, то тебе все равно, как она отсчитывается.

В примере gek (26.12.01 10:48) счетчик цикла используется в условии,
поэтому "безобразия" не проиходит.

Бесов можешь не изгонять. Удачи.


Nemeiss   (2001-12-26 10:54:00) [45]

Как саму М в цикле используеш?


gek   (2001-12-26 10:48:00) [46]

Во блин, специально у себя посмотрел ничего такого не происходит
for M:=-1000 to 1000 do
if m = 2001 then
showmessage("kuku")
после цикла м будет 1001
если у тебя изменяется, то значит в цикле ее меняшь


panov   (2001-12-26 10:46:00) [47]

А M у тебя какого типа?


Baz   (2001-12-26 10:43:00) [48]

Все происходит ВНУТРИ цикла, СРАЗУ после begin.


panov   (2001-12-26 10:28:00) [49]

После выполнения цикла переменная цикла имеет неопределенное значение.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо