Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Циклы [D5]


Страницы:   1 2

SergeN ©   (2003-02-03 09:45:00) 

Добрый день! У меня такая прблема:
есть цикл
for i:=0 to strtoint(num_move.Text) do
begin
///////
end;
num_move-это combobox.
Если num_move.Text:=1, то выполняется один раз, если 10 то 15, а если 100 то (ужас!) 1000 раз. Что это за глюк такой, или я считать не умею? Первый раз в цикле использую combobox и на тебе...


DarkGreen   (2003-02-04 05:26:00) [1]

2 Романов Р.В. ©
Хм... Ты прав, действительно один раз вычисляется, странно...
Проверял на Delphi 6.


Anatoly Podgoretsky   (2003-02-03 20:37:00) [2]

На палочке


gsu   (2003-02-03 20:31:00) [3]

ААааааааааааааааа, а я то думал, что мне медальку дадут (-:|~


Anatoly Podgoretsky   (2003-02-03 20:28:00) [4]

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


gsu   (2003-02-03 20:15:00) [5]

>> Anatoly Podgoretsky © (03.02.03 20:01)
>> gsu © (03.02.03 11:53)
>> Что хотят то и творят
1. Не понял юмора, может это типа генофонда ? Там, я сек 30 въезжал, тут ...
2. Что хотют, то и делаютъ, если бы ...


Sha   (2003-02-03 20:11:00) [6]

> Романов Р.В. © (03.02.03 20:03)
> ... а реализация для некоторых оказывается неожиданной

Тогда лучше так:
... а реализация оказывается неожиданной, для тех кто не имеет обычая нажимать Alt-F2 :)



Романов Р.В.   (2003-02-03 20:03:00) [7]

Хорошо тогда так:
Так что результат будет тот который задуман, а реализация для некоторых оказывается неожиданной


Anatoly Podgoretsky   (2003-02-03 20:01:00) [8]

gsu © (03.02.03 11:53)
Что хотят то и творят


Sha   (2003-02-03 19:51:00) [9]

> Smithson © (03.02.03 18:02)
> То есть ежели оптимизатор сочтет, что ему удобнее вместо i := 0 to 100 do
> сделать i := 100 downto 0 do, то он так и сгенерит.

А вот вы о чем...
Оптимизатор для оптимизации цикла имеет право использовать ВРЕМЕННЫЕ переменные, точно также, как и для вычисления выражений. Эти переменыые никакого отношения к ПЕРЕМЕННЫМ ЦИКЛА не имеют. Как он работает с ними и чему они равны программиста интересовать не должно. Ведь нам же неинтересно, как он работает с временными переменными при вычислении выражений. Главное, чтобы внутри цикла оптимизатор из ВРЕМЕННОЙ ПЕРЕМЕННОЙ правильно конструировал значение ПЕРЕМЕННОЙ ЦИКЛА, когда оно нам будет необходимо. Обычно оптимизатор поддерживает эти значения равными, если ПЕРЕМЕННАЯ ЦИКЛА явно используется внутри цикла. В противном случае цикл
for i:=i1 to i2 do... end; преобразуется в
i:=i2-i1; while i>0 do ... dec(i) end;
Вот и все. Так что просто приведенная выше формулировка была неточна.


gsu   (2003-02-03 18:12:00) [10]

>> Так что результат будет тот который задуман, а решение для некоторых
>> оказывается неожиданным
1. фраза некорректна
2. оптимизатор ни должен делать ничего противоречащего основным конструкциям


Романов Р.В.   (2003-02-03 18:08:00) [11]


> Т.е. ...............?

Оптимизируется весь цикл, в том числе и те строки в которых применяется переменная цикла. Так что результат будет тот который задуман, а решение для некоторых оказывается неожиданным.


Smithson   (2003-02-03 18:02:00) [12]

То есть ежели оптимизатор сочтет, что ему удобнее вместо i := 0 to 100 do сделать i := 100 downto 0 do, то он так и сгенерит.


Sha   (2003-02-03 17:52:00) [13]

2 Романов Р.В. © (03.02.03 17:47)
Т.е. ...............?


Романов Р.В.   (2003-02-03 17:47:00) [14]


> Или я неправильно понял?

Ага неправильно.


Sha   (2003-02-03 17:28:00) [15]

> Smithson © (03.02.03 16:55)
> Оптимизатор оставляет за собой право изменить порядок выполнения цикла.

Нельзя ли разъяснить, что это значит?
Получается, что я теперь никогда не смогу написать цикл, работающий в нужном мне направлении? Как же тогда сдвинуть элементы массива влево или вправо? Или я неправильно понял?


gsu   (2003-02-03 17:07:00) [16]

Уря (-:|~


Sha   (2003-02-03 17:06:00) [17]

> gsu © (03.02.03 16:58)
>> Sha ©
> И в чем же я не прав ? см. gsu © (03.02.03 11:29)

Ты прав, как никогда :)


Романов Р.В.   (2003-02-03 17:05:00) [18]

У меня даже с отключенной оптимизацией strtoint(edit1.Text) в строке
for i:=1 to strtoint(edit1.Text) do

выполняется 1 раз.

DarkGreen, вы на чем проверяли?


gsu   (2003-02-03 16:58:00) [19]

>> Sha ©

И в чем же я не прав ? см. gsu © (03.02.03 11:29)


gsu   (2003-02-03 16:57:00) [20]

>> Smithson ©

И в чем же я не прав ? см. gsu © (03.02.03 11:29)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо