Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

Сумасшедший цикл   Найти похожие ветки 

 
Creative   (2006-11-01 15:54) [0]

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

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 - входит в него.

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


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

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


 
Desdechado ©   (2006-11-01 16:12) [2]

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


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

>в п.2 не верю

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


 
novill ©   (2006-11-01 16:29) [4]

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

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;


 
DrPass ©   (2006-11-01 16:37) [5]


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

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


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

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

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


 
Jeer ©   (2006-11-01 17:02) [7]

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


 
DrPass ©   (2006-11-01 17:08) [8]


> Creative   (01.11.06 16:39) [6]

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


 
Schamane   (2006-11-01 19:07) [9]


> Creative   (01.11.06 16:39) [6]

{$O-}


 
Чапаев ©   (2006-11-01 19:54) [10]

> если  MyArray[i].Value = 9 - программа условие пропускает.
Если я ещё не задолбал форум этим советом... Удали *.dsk из папки с исходниками при незапущенной оболочке, а тогда переоткрывай проект...


 
Германн ©   (2006-11-02 01:26) [11]


> Jeer ©   (01.11.06 17:02) [7]
>
> Если как-либо использовать индекс цикла (по чтению) внутри
> цикла, то наступает минута просветления.

Иногда наступают "часы ужасов" :-)
Вот например код -
unit Unit12;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}
const
 MyArr : array[0..5] of Integer = (1234,1,2,3,4,-123);

procedure TForm1.Button1Click(Sender: TObject);
var
 i, N : Integer;
begin
 N:=0;
 for i:=0 to 5 do begin
   N:=N+MyArr[i];                         //тут ставишь брейпойнт
   if N < 0 then N:=0;
 end;
 ShowMessage(IntToStr(N));
end;

end.


В WatchList смотришь i, N и MyArray[i].
Проверено в Д4 и Д6.
Результат правильный, но в окошко WatchList лучше не вглядываться :-)


 
MikePetrichenko ©   (2006-11-02 02:26) [12]


> Сумасшедший цикл

Чаше бывают сумасшедшие "программеры".


 
Ketmar ©   (2006-11-02 02:29) [13]

угу. я тут txtSQL раскопал. это нечто. я всегда думал, что я псих. ошибался... %-)


 
Германн ©   (2006-11-02 02:45) [14]

В добавок к Германн ©   (02.11.06 01:26) [11]
Нашел время проверить и на BDS2006. Тот же результат. Работает всё на OK, но в WatchList лучше не смотреть! :-) Т.е. Лучше не смотреть в WatchList на i и на MyArr[i] :-)


 
Ketmar ©   (2006-11-02 02:46) [15]

нормальное поведение.


 
Германн ©   (2006-11-02 02:56) [16]


> Ketmar ©   (02.11.06 02:46) [15]
>
> нормальное поведение.
>

Ну да. Для Dark, может быть и нормальное, но не для меня!


 
Ketmar ©   (2006-11-02 03:15) [17]

>[16] Германн(c) 2-Nov-2006, 02:56
>Ну да. Для Dark, может быть и нормальное, но не для меня!
оптимизатор-с... %-)


 
Германн ©   (2006-11-02 03:23) [18]


> Ketmar ©   (02.11.06 03:15) [17]
>
> >[16] Германн(c) 2-Nov-2006, 02:56
> >Ну да. Для Dark, может быть и нормальное, но не для меня!
>
> оптимизатор-с... %-)
>


Дык, кто-бы сомневался! Омптимизатор работает на все 100! Но отладчик ,
имхо, за ним не успевает! :-)


 
Ketmar ©   (2006-11-02 03:32) [19]

>[18] Германн(c) 2-Nov-2006, 03:23
>Дык, кто-бы сомневался! Омптимизатор работает на все 100!
>Но отладчик ,
>имхо, за ним не успевает! :-)
ну, забыли подружить. подумаешь... %-)


 
Германн ©   (2006-11-02 03:41) [20]


> ну, забыли подружить. подумаешь... %-)
>

Ну да, для тебя "ерунда". Ты то отладчиком не пользуешься, совсем про это забыл. :-(


 
Ketmar ©   (2006-11-02 03:50) [21]

>[20] Германн(c) 2-Nov-2006, 03:41
>Ну да, для тебя "ерунда". Ты то отладчиком не пользуешься,
>совсем про это забыл. :-(
отчего же? я просто оптимизатор отключаю. хотя да -- логи удобней. %-) зря я, что ли, консоль обычно в сложные программы встраиваю? %-)


 
Anatoly Podgoretsky ©   (2006-11-02 09:37) [22]

> Германн  (02.11.2006 01:26:11)  [11]

> Результат правильный

Правильный, тогда какие претензии


 
novill ©   (2006-11-02 10:14) [23]

> [11] Германн ©   (02.11.06 01:26)

Ужасы нашего городка :)

Watch"ами можно не пользоваться...


 
Anatoly Podgoretsky ©   (2006-11-02 10:37) [24]

> novill  (02.11.2006 10:14:23)  [23]

можно не пользоваться, а можно пользоваться
Понимать нужно


 
novill ©   (2006-11-02 11:12) [25]

> Понимать нужно

Понимать - это хорошо. Вопрос остается один - как, когда и что оптимизатор решит "соптимизировать"....


 
han_malign ©   (2006-11-02 11:37) [26]


> Watch"ами можно не пользоваться...

- помогает Build и Local symbols + Reference info...
А так же периодическое удаление всех "своих" *.dcu(build иногда "запутывается").


 
Плохиш ©   (2006-11-02 11:43) [27]

Интересно, вопрос про циклы с оптимизатором ещё не занял первое место среди самых популярных вопросов?


 
Creative   (2006-11-02 15:23) [28]

Сасибо вам огромное. Все в порядке, все работает. В общем можно уже так и не спорить :-)



Страницы: 1 вся ветка

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.057 c
15-1162021108
Alex Konshin
2006-10-28 11:38
2006.11.19
Динамическое выделение памяти на стеке


15-1162202026
IMHO
2006-10-30 12:53
2006.11.19
Как нужно есть?


15-1162217711
Lexer
2006-10-30 17:15
2006.11.19
Проблема с сетью WIFI


15-1160849771
Chort
2006-10-14 22:16
2006.11.19
какие фильмы посоветуете с ниженаписанного списка?


2-1162188477
kyn66
2006-10-30 09:07
2006.11.19
Просмотр файла MMF