![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сумасшедший цикл [D7, WinXP]
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 - входит в него.
Скажите, кто из нас идиот? Я не против если я, вы только объясните, что происходит!!!
Creative (2006-11-02 15:23:00) [1]Сасибо вам огромное. Все в порядке, все работает. В общем можно уже так и не спорить :-)
Плохиш (2006-11-02 11:43:00) [2]Интересно, вопрос про циклы с оптимизатором ещё не занял первое место среди самых популярных вопросов?
han_malign (2006-11-02 11:37:00) [3]
> Watch'ами можно не пользоваться...
- помогает Build и Local symbols + Reference info...
А так же периодическое удаление всех "своих" *.dcu(build иногда "запутывается").
novill (2006-11-02 11:12:00) [4]> Понимать нужно
Понимать - это хорошо. Вопрос остается один - как, когда и что оптимизатор решит "соптимизировать"....
Anatoly Podgoretsky (2006-11-02 10:37:00) [5]> novill (02.11.2006 10:14:23) [23]
можно не пользоваться, а можно пользоваться
Понимать нужно
novill (2006-11-02 10:14:00) [6]> [11] Германн © (02.11.06 01:26)
Ужасы нашего городка :)
Watch'ами можно не пользоваться...
Anatoly Podgoretsky (2006-11-02 09:37:00) [7]> Германн (02.11.2006 01:26:11) [11]
> Результат правильный
Правильный, тогда какие претензии
Ketmar (2006-11-02 03:50:00) [8]>[20] Германн(c) 2-Nov-2006, 03:41
>Ну да, для тебя "ерунда". Ты то отладчиком не пользуешься,
>совсем про это забыл. :-(
отчего же? я просто оптимизатор отключаю. хотя да -- логи удобней. %-) зря я, что ли, консоль обычно в сложные программы встраиваю? %-)
Германн (2006-11-02 03:41:00) [9]
> ну, забыли подружить. подумаешь... %-)
>
Ну да, для тебя "ерунда". Ты то отладчиком не пользуешься, совсем про это забыл. :-(
Ketmar (2006-11-02 03:32:00) [10]>[18] Германн(c) 2-Nov-2006, 03:23
>Дык, кто-бы сомневался! Омптимизатор работает на все 100!
>Но отладчик ,
>имхо, за ним не успевает! :-)
ну, забыли подружить. подумаешь... %-)
Германн (2006-11-02 03:23:00) [11]
> Ketmar © (02.11.06 03:15) [17]
>
> >[16] Германн(c) 2-Nov-2006, 02:56
> >Ну да. Для Dark, может быть и нормальное, но не для меня!
>
> оптимизатор-с... %-)
>
Дык, кто-бы сомневался! Омптимизатор работает на все 100! Но отладчик ,
имхо, за ним не успевает! :-)
Ketmar (2006-11-02 03:15:00) [12]>[16] Германн(c) 2-Nov-2006, 02:56
>Ну да. Для Dark, может быть и нормальное, но не для меня!
оптимизатор-с... %-)
Германн (2006-11-02 02:56:00) [13]
> Ketmar © (02.11.06 02:46) [15]
>
> нормальное поведение.
>
Ну да. Для Dark, может быть и нормальное, но не для меня!
Ketmar (2006-11-02 02:46:00) [14]нормальное поведение.
Германн (2006-11-02 02:45:00) [15]В добавок к Германн © (02.11.06 01:26) [11]
Нашел время проверить и на BDS2006. Тот же результат. Работает всё на OK, но в WatchList лучше не смотреть! :-) Т.е. Лучше не смотреть в WatchList на i и на MyArr[i] :-)
Ketmar (2006-11-02 02:29:00) [16]угу. я тут txtSQL раскопал. это нечто. я всегда думал, что я псих. ошибался... %-)
MikePetrichenko (2006-11-02 02:26:00) [17]
> Сумасшедший цикл
Чаше бывают сумасшедшие "программеры".
Германн (2006-11-02 01:26:00) [18]
> 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 лучше не вглядываться :-)
Чапаев (2006-11-01 19:54:00) [19]> если MyArray[i].Value = 9 - программа условие пропускает.
Если я ещё не задолбал форум этим советом... Удали *.dsk из папки с исходниками при незапущенной оболочке, а тогда переоткрывай проект...
Schamane (2006-11-01 19:07:00) [20]
> Creative (01.11.06 16:39) [6]
{$O-}