Другие языки программирования и технологии
Вопрос про цикл For
Почему переменную цикла i категорически нельзя изменять какими-либо операторами внутри цикла: for i := 1 to 10 do begin . . i := i+1; . . end; Что она сама автоматически меняется - знаю, и что можно выйти за пределы цикла, или зациклиться. Почему еще????Есть еще что-то важное.
> Есть еще что-то важное
Причем весьма.
Оптимизатор генерируемого исполн. кода в составе компилятора волен распоряжаться размещением и фактическим значением переменной for-цикла так как он считает необходимым.
Попытка пользовательского изменения переменной цикла в теле for-цикла повлечет за собой искажение логики оптимизации, поэтому это запрещено.
На то существуют while и repeat.
Причем весьма.
Оптимизатор генерируемого исполн. кода в составе компилятора волен распоряжаться размещением и фактическим значением переменной for-цикла так как он считает необходимым.
Попытка пользовательского изменения переменной цикла в теле for-цикла повлечет за собой искажение логики оптимизации, поэтому это запрещено.
На то существуют while и repeat.
Андрей Ужва
Вы знаете, похоже на правду)))) Проверю на паре)
Специальная защита в некоторых языках программирования. Но легко обойти и самому сделать такой цикл с изменением переменной
i=1
:xxx
....
i=i+1
if i = 11 goto yyy
goto xxx
:yyy
i=1
:xxx
....
i=i+1
if i = 11 goto yyy
goto xxx
:yyy
Важно то, что в зависимости от языка, версии компилятора и еще неизвестно чего. Вы не можете с достаточной уверенностю сказать что вам выдаст первый же цикл.
Если i увеличится до вашего выражения "i := i+1; то вы получите i =3, а если после выражения то i=2.
Если i увеличится до вашего выражения "i := i+1; то вы получите i =3, а если после выражения то i=2.
Сергей Ромась
Извините у вас i было равно 1 следовательно бужет либо 4 либо 3 соответственно.
Сергей Проданцов
Всё там известно, проверки человек не хочет писать и не понятно с какого перепугу ему изменения в основном счётчике понадобились...по-моему просто студент, и отчёта программе не отдаёт(сужу по тому, как основной задачи нет, значит и понимания нет)
Если счётчик цикла используется только для индексации, то компилятор может помещать её не на стеке, а в регистры процессора, что существенно ускоряет обращение к этой переменной.
можно, используя не for, а к примеру while. можно и For просто задаём парамертр STEP или Undo(как удобнее)
почему же? можно и так делать но это моветон в программировании
Верно все что сказано выше. попросту говоря чтобы не было шото типо этого
for i := 0 to 100 do // бесконечный цикл
begin
i:= 1;
end;
for i := 0 to 100 do // бесконечный цикл
begin
i:= 1;
end;
Евгений Щербаков
Дело даже не в этом.
По спецификации Паскаля граничные условия FOR-цикла вычисляются ОДНОКРАТНО, в отличие от WHILE- и REPEAT-циклов.
По спецификации Паскаля граничные условия FOR-цикла вычисляются ОДНОКРАТНО, в отличие от WHILE- и REPEAT-циклов.
Похожие вопросы
- Цикл for в Дельфи или Паскале
- *.bat - Не работает set /a внутри цикла for!
- По-человечески объясните цикл "for"
- Хорошо ли использовать бесконечный цикл for в C++?
- Вопрос по стилю в Си. Читаю C Elements of Style (Steve Qualline), встретила такой стиль записи цикла for
- цикл for не может обрабатывать массивы? (паскаль)
- C++. В операторе switch нельзя разве использовать case x? а x пробежать в цикле for?
- Вопрос по циклу и switch'у в С++
- С++, Чем отличаеться цикл for, от while?
- в языке СИ (просто СИ!!!!) чем отличаются два цикла. for(t=0; t