![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Господи, да что ж делается-то?! [D5, Win95/98]
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]После выполнения цикла переменная цикла имеет неопределенное значение.