Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];

Вниз

Проблема с циклами 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.015 c
1-14640
Roma111
2002-11-25 13:07
2002.12.05
Кодировка в read


3-14478
ShooRoop
2002-11-15 15:20
2002.12.05
ADOStoredProc


14-14774
Anar
2002-11-13 17:12
2002.12.05
У меня вопрос по Flash


6-14702
DenKop
2002-09-29 04:28
2002.12.05
CGI


1-14596
aterm
2002-11-27 14:55
2002.12.05
Help!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский