Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизСумасшедший цикл Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.047 c