Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.046 c
15-1161964546
Palladin
2006-10-27 19:55
2006.11.19
юридический вопрос


2-1162407757
despo
2006-11-01 22:02
2006.11.19
Есть ли ограничение на длину sql скрипта в TQuery?


2-1162679756
Soulface
2006-11-05 01:35
2006.11.19
Простое клиент-сервер приложение на TTcpServer/TTcpClient


1-1160396740
IMHO
2006-10-09 16:25
2006.11.19
Быстрый поиск в двоичном файле


15-1161954526
GRAND25
2006-10-27 17:08
2006.11.19
1С:Несуразности





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский