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

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

Сумасшедший цикл [D7, WinXP]


Страницы:   1 2

Creative ©   (2006-11-01 15:54:00) 

Люди добрые помогите, такое вижу впервые.
Есть цикл:

var
MyArray: array [0..3] of TMyClass;
(Value: integer - свойство TMyClass)

implementation

for i:= 0 to 3 do
if MyArray[i].Value = 9 then
begin
...
end;

1. цикл начинается не с 0, а с 4
2. если  MyArray[i].Value = 9 - программа условие пропускает. а если  MyArray[i].Value = 8 - входит в него.

Скажите, кто из нас идиот? Я не против если я, вы только объясните, что происходит!!!


DrPass   (2006-11-01 17:08:00) [21]


> Creative   (01.11.06 16:39) [6]

Ну как... в настройках компилятора, пункт Optimization


Jeer   (2006-11-01 17:02:00) [22]

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


Creative   (2006-11-01 16:39:00) [23]

>Если отключить оптимизатор, все станет на свои места?

а как его отключить?


DrPass   (2006-11-01 16:37:00) [24]


> Creative   (01.11.06 16:25) [3]
> >в п.2 не верю
>
> честно говоря я не знаю, как предъявить мнение отладчика

На конечный результат это поведение как-то влияет?
Если отключить оптимизатор, все станет на свои места?


novill   (2006-11-01 16:29:00) [25]

Ну очень странно, только что проверил - всё срабатывает как надо.

type
 Myclass=Class
  public
  value:integer;
 end;

procedure TForm1.Button6Click(Sender: TObject);
var
MyArray: array [0..3] of Myclass;
i:integer;
begin
MyArray[0]:=Myclass.Create;
MyArray[1]:=Myclass.Create;
MyArray[2]:=Myclass.Create;
MyArray[3]:=Myclass.Create;

MyArray[0].value:=7;
MyArray[1].value:=9;
MyArray[2].value:=8;
MyArray[3].value:=9;

for i:= 0 to 3 do
if MyArray[i].value = 9 then
begin
ShowMessage(IntToStr(i)+' '+IntToStr(MyArray[i].value));
end;
end;


Creative   (2006-11-01 16:25:00) [26]

>в п.2 не верю

честно говоря я не знаю, как предъявить мнение отладчика


Desdechado   (2006-11-01 16:12:00) [27]

п.1 на результат не влияет, потому компилятор сам выбирает, как крутить цикл
в п.2 не верю


Dmitrij_K   (2006-11-01 15:56:00) [28]

Оптимизация
Вниз быстрее считает.


Страницы:   1 2

Наверх

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