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

Вниз

Проблема с циклами for   Найти похожие ветки 

 
vladnt   (2002-11-22 11:01) [0]

Добрый день. Проблемка такая:
procedure
...
for i:=0 to 2 do
begin
....
end;
for i:=0 to 2 do
begin
.....
end;

Во втором цикле i принимает значение 3 и убывает до 1.
Первый раз со мной такое,но если сделать так :
procedure
...
for i:=0 to 2 do
begin
....
end;
k:=0;
for i:=k to 2 do
begin
.....
end;

все работает. Неужели так бывает?


 
KoluChi ©   (2002-11-22 11:05) [1]

не бывает


 
Anatoly Podgoretsky ©   (2002-11-22 11:09) [2]

Все правильно работает, или у тебя неверный результат, тогда код в студию


 
F1 ©   (2002-11-22 11:11) [3]

Шаман, однако!!!
Давай полный текст заклинания!!!


 
Calm ©   (2002-11-22 11:16) [4]

Я слышал, что есть какой-то очень хитрый ход с оптимизацией. Компилятор считает, что выполнять цикл всегда удобнее от большего к меньшему. При этом прога работает правильно, но отладчик может показать значения счетчика в обратном порядке.


 
Song ©   (2002-11-22 11:19) [5]

Отключи оптимизацию.


 
vladnt   (2002-11-22 12:06) [6]

Оптимизацию отключил.Работает.Большое спасибо.
Как быть в других проектах? Всегда ее отключать?


 
Calm ©   (2002-11-22 12:11) [7]

2 vladnt (22.11.02 12:06)
А если скопмилиться при включенной оптимизации, а затем запустить EXE. Прога будет работать неправильно?

Дело в том, что насколько я понял, глюки со счетчиком цикла (хотя на самом деле они не глюки) должны иметь место только в режиме отладки при просмотре значения счетчика.


 
Свифт   (2002-11-22 12:12) [8]

2 vladnt
это только в отладчике
отладил - верни оптимизацию


 
Opuhshii ©   (2002-11-22 12:29) [9]

2Calm © (22.11.02 12:11)
да с чего вы взяли что это глюки???,... это оптимизация,. буквально на несколько инструкций, но все же,.. вы навероное не используете счетчик цикла в теле цикла, либо как-то очень не тривиально его используете,.. имхо,...


 
Calm ©   (2002-11-22 12:35) [10]

2 Opuhshii © (22.11.02 12:29)
Да я не считаю это глюками. Я же так и написал.
Это явление может показаться глюком тем, кто не был знаком с данным вопросом.


 
DarkGreen ©   (2002-11-22 12:47) [11]

2 Calm ©
Быстрее выполняются не от большого к меньшему, а циклы с постусловием, т.е. repeat until работает быстрее чем while. Многие оптимизирующие компиляторы сами производят замену циклов с предусловием на циклы с постусловием.
2 vladnt
А зачем вообще использовать такие маленькие циклы? Вполне возможно, что при включеной оптимизации компилятор их развернет. (C++ так точно поступит, а вот на счет делфей не знаю)
2 Opuhshii ©
Скорее на одну: mov I, 0 :-)


 
vladnt   (2002-11-22 13:07) [12]

DarkGreen
Циклы не маленькие,то что описано выше это для примера.
Всем
Самое страшное , что это уже похоже на глюки.Сейчас работает правильно и при включенной оптимизации.Не знаю, что будет к вечеру.


 
SottNick ©   (2002-11-22 13:11) [13]

не глюки это
не глюки...


 
Andre V.   (2002-11-22 13:12) [14]

Бывало!!!!
Заменил на while do; и забыл о проблеме


 
IKiller   (2002-11-25 11:42) [15]

Это работа оптимизатора. Если ты в цикле не используешь явно значение счетчика, то компилятор заменяет цикл на убывающий, т.к. он отрабатывает немного быстрее.


 
han_malign ©   (2002-11-25 11:58) [16]

push ECX
mov CX, Count
@1:
..........
loop @1
pop ECX



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

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

Наверх




Память: 0.5 MB
Время: 0.011 c
1-14592
kloksus
2002-11-22 22:24
2002.12.05
e-mail


1-14506
MMMaaaxxx
2002-11-26 00:11
2002.12.05
Вопрос по Ini-файлам


3-14471
Свой
2002-11-15 16:37
2002.12.05
Поиск или типа того


3-14436
kombat
2002-11-13 18:20
2002.12.05
Какой то непонятный этот Jet


1-14503
Kurt
2002-11-26 10:55
2002.12.05
не подскажите как в Grid-e выделять нужное количество строк по In