FOR I=1 TO N STEP 2 не работает =(

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Vadim » 05.08.2008 06:29:53

B4rr4cuda писал(а):Вилкой

Особенно когда подали суп... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Attid » 05.08.2008 10:12:48

B4rr4cuda писал(а):Вилкой =)

+1

SAK писал(а):А что мешает умножить переменную цикла на требуемый шаг?

то что пришлось бы высчитывать эту самую N, а у меня N это размер виджета.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение B4rr4cuda » 05.08.2008 11:35:48

Vadim писал(а):Особенно когда подали суп...

Суп я ложкой чифаню.
Но вилка используется чаще... :D
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Vadim » 05.08.2008 15:40:58

B4rr4cuda
А я чаще пользуюсь ложкой. Видать до интеллегентности мне как пешком до луны. :)
А если говорить о циклах, то мне попадаются чаще циклы, где одно выполнение тела цикла есть обязательно, поэтому Until .. Repeat пользуюсь чаще, потому как букавок, по сравнению с While меньше. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение B4rr4cuda » 05.08.2008 17:07:58

Vadim
Ясно. Благодарю за ответ. :)
ЗЫ: А насчет ложки, уж не армейская ли привычка? :wink:
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Vadim » 05.08.2008 18:51:42

B4rr4cuda писал(а):А насчет ложки, уж не армейская ли привычка?

А Эркюль Пуаро - не Ваше второе имя? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение B4rr4cuda » 06.08.2008 03:00:36

Неужто угадал? :D Нет, не Пуаро. А вот Шерлоком в детстве зачитывался. :)
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Alek_Aaz » 07.08.2008 08:35:16

Ну вообще то, я тоже чаще пользую ложку ( у меня правда не армейская а скорее всего студенческая привычка :) ) и repeat (по тому что логику While как-то не асиливал :) )
Alek_Aaz
новенький
 
Сообщения: 40
Зарегистрирован: 26.11.2007 04:13:06

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение GAMER » 07.08.2008 12:10:45

Attid писал(а):
SAK писал(а):А что мешает умножить переменную цикла на требуемый шаг?

то что пришлось бы высчитывать эту самую N, а у меня N это размер виджета.


В конструкции FOR I=1 TO N STEP 2 разве не нужно N высчитывать?

Хотя вопрос интересен. Что оптимальние: в цикле типа while, repeat until делать i := i+step,
или в цикле типа for ... to ... do делать i*step? Умножение все таки дороже.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Attid » 07.08.2008 13:56:57

GAMER писал(а):Хотя вопрос интересен.

проверить можно за 15 минут.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Brainenjii » 07.08.2008 20:34:54

быстрее ^_^ В цикле For i := 1 To 10 i := i * 3 делать нелья ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение GAMER » 07.08.2008 20:44:42

Brainenjii писал(а):В цикле For i := 1 To 10 i := i * 3 делать нелья ^_^

Так никто и не принуждает так делать.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Timid » 08.08.2008 13:20:55

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

Сейчас, в любом случае, для int64 все указанные операции выполняются одновременно, поскольку выполняются сопроцессором.

Проблема в другом. For быстрее потому, что устроен иначе: При первом проходе вычисляется количество повторений и устанавливается внутренний счетчик. Затем он просто декрементируется. Для while условие вычисляется каждый раз.
Именно по этому в "каноническом" Паскале нельзя изменять внутри цикла счетчик и вершину.

FPC может быть и разрешает, но тогда он делает простой переход по условию, а не проверку на ноль. Т.е. - тот же while
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение emerald » 09.08.2008 11:56:06

Timid писал(а):For быстрее потому, что устроен иначе: При первом проходе вычисляется количество повторений и устанавливается внутренний счетчик. Затем он просто декрементируется. Для while условие вычисляется каждый раз.
Именно по этому в "каноническом" Паскале нельзя изменять внутри цикла счетчик и вершину.

Поскольку For работает не по "каноническому" принципу уже довольно давно, вопрос отпадает сам собой что использовать For с корректеровкий счетчика или While. А вот использвание Until как мне кажеться не совсем уместно потому как у него несколько иная логика поведения, поскольку тело циклы выполняется в любом случае. А вот если посматреть на аналог из Си то там если значение счетчика выполняет граничные условия то в тело не попадем, но это как говоритсо ИМХО
emerald
незнакомец
 
Сообщения: 8
Зарегистрирован: 28.07.2008 01:14:50

Re: FOR I=1 TO N STEP 2 не работает =(

Сообщение Timid » 09.08.2008 19:38:13

Поскольку For работает не по "каноническому" принципу уже довольно давно

Уверен, а почему тогда компиляция после оптимизации "простого" цикла выглядит как счетчик плюс условный и безусловный переход. По крайней мере в Delphi. Хотя ведь и Сишный while транслируется также...
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru