Вопрос про цикл for

Общие вопросы программирования, алгоритмы и т.п.

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

Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Что-то тут сплошные олдфаги... Никто не вспомнил про самый современный вариант: For ... in ... do Это у несчастных сишников нет выбора, кроме архаики с целой переменной.
ZWolol
новенький
Сообщения: 21
Зарегистрирован: 06.01.2023 05:49:21

Сообщение ZWolol »

Все очень просто, жмешь в Lazarus F1 на for и получаешь подробную справку (только на английском).
Несчастным сишникам не нужно вспоминать и выбирать, все и так прекрасно работает без всяких лишних переменных.
Как работало со времен DOS так и продолжает пахать без всяких влияний погоды.
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

ZWolol писал(а):Все очень просто, жмешь в Lazarus F1 на for и получаешь подробную справку (только на английском).
Несчастным сишникам не нужно вспоминать и выбирать, все и так прекрасно работает без всяких лишних переменных.
Как работало со времен DOS так и продолжает пахать без всяких влияний погоды.
В Паскале тоже нет никаких проблем, просто нужно его знать, чтобы писать на нем программы, как нужно знать и любой ЯП если пишешь на нем программу.

Если Вы еще не поняли, то for в Паскале и for в Си это два разных цикла.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

ZWolol писал(а):Меня интересовало лишь: почему for на паскале работает не как на других языках?
Но если в описании сказано, что так и должно быть, то у меня вопросов больше нет.
Сильно много не программировал на других, был небольшой опыт работы с VB, PHP, Java. И не помню чтобы там чем то цикл принципиально отличался.
ZWolol
новенький
Сообщения: 21
Зарегистрирован: 06.01.2023 05:49:21

Сообщение ZWolol »

@Sharfik
Совершенно верно, там нет разницы, как в прочем и на Фортране и на С кроме Паскаля !!!
Borland C++ Builder использует библиотеки Delphi и там нет танца с бубном.
Я полагаю, что и на Delphi она работает так же. А ведь это Паскаль.

Потому и задал вопрос: чья это особенность?
Мне ответили что это у Паскаля, хотя похоже что это не для каждого Паскаля.

У меня нет желания устанавливать и проверять другие программы.
Я просто принял во внимание, что у Lazarus это не работает.
И не надо мне доказывать, что это правильно а у всех других не правильно.
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

ZWolol писал(а):Совершенно верно, там нет разницы, как в прочем и на Фортране и на С кроме Паскаля !!!
На Фортране тоже самое что и на Паскале.
ZWolol писал(а):Я полагаю, что и на Delphi она работает так же. А ведь это Паскаль.
Именно, и на Delphi и на FreePascal это работает одинаково.
ZWolol писал(а):Мне ответили что это у Паскаля, хотя похоже что это не для каждого Паскаля.
Для каждого.
ZWolol писал(а):И не надо мне доказывать, что это правильно а у всех других не правильно.
Это правила языка, они не могут быть правильными или не правильными.
ZWolol
новенький
Сообщения: 21
Зарегистрирован: 06.01.2023 05:49:21

Сообщение ZWolol »

Кроме Free Pascal был Turbo Pascal.
У Delphi и Lazarus то же используется язык Паскаль.
Я давно работал на Delphi, но не помню этого ограничения для цикла.
Приведи пожалуйста выдержку из его описания.

Изменение переменной цикла внутри цикла, как и выход из цикла по Go To является логической ошибкой, которая не рекомендуется, но не запрещается.
Все зависит от компилятора. В описании Free Pascal это запрещено, а на других компиляторах это может работать.

Если компилятор будет давать на выходе из цикла значение: final value + 1 то это будет по твоему уже не Паскаль?
То есть давать неопределенную переменную в конце цикла это ПРАВИЛА языка?
Есть язык программирования и требования компилятора (это разные вещи).
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

ZWolol писал(а):Кроме Free Pascal был Turbo Pascal.
И там было точно также.
ZWolol писал(а):Я давно работал на Delphi, но не помню этого ограничения для цикла.
А я помню. :)
ZWolol писал(а):Изменение переменной цикла внутри цикла, как и выход из цикла по Go To является логической ошибкой, которая не рекомендуется, но не запрещается.
Изменение переменной цикла внутри for всегда было невозможным.
ZWolol писал(а):Все зависит от компилятора. В описании Free Pascal это запрещено, а на других компиляторах это может работать.
Не может и не работает.
ZWolol писал(а):Если компилятор будет давать на выходе из цикла значение: final value + 1 то это будет по твоему уже не Паскаль?
Я уже написал, что это UB, если это не выход по Break.
ZWolol писал(а):То есть давать неопределенную переменную в конце цикла это ПРАВИЛА языка?
Да. :wink:
Seenkao
энтузиаст
Сообщения: 569
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

ZWolol писал(а):Изменение переменной цикла внутри цикла, как и выход из цикла по Go To является логической ошибкой, которая не рекомендуется, но не запрещается.
не является ошибкой!
Но да, не рекомендуется к использованию. И надо понимать почему. Причина проста, большинство ошибок происходит от того что люди не контролируют код, который они делают. А GoTo отслеживание такой ошибки усложняет (потому что люди именно в таких местах ошибки и делают).
ZWolol писал(а):Изменение переменной цикла внутри цикла
Я всё-таки порекомендовал бы правильно формулировать фразы. Потому что это тоже не ошибка!
ZWolol писал(а):Если компилятор будет давать на выходе из цикла значение: final value + 1 то это будет по твоему уже не Паскаль?
уже писали, что есть разные реализации Паскаля. Если взглянуть в сторону Си/Си++ то там столько компиляторов, и которые могут очень сильно не совпадать друг с другом в конечной реализации кода.
ZWolol писал(а):То есть давать неопределенную переменную в конце цикла это ПРАВИЛА языка?
Уточнить надо про что вообще речь? Про какую переменную?


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

Добавлено спустя 2 минуты 44 секунды:
Mikhail писал(а):И там было точно также.
была какая-то реализация Паскаля, где по выходу из цикла счётчик увеличивался.
А я(в то время) пользовался только Delphi 7, TP и возможно FP.
ZWolol
новенький
Сообщения: 21
Зарегистрирован: 06.01.2023 05:49:21

Сообщение ZWolol »

@Mikhail
С каждым программным продуктом идет свое описание.
Приведи пожалуйста выдержку из этих описаний про for.
Это осталось без ответа...
Занимаетесь словоблудием однако...

Я задал вопрос и давно получил ответ.
О чем тогда идет речь и что вы хотите?

Если хотите предложить решение, то я его уже сделал и мне другого не нужно.
Если хотите что-то доказать, то оставьте их себе. Мне они не нужны.
Доказывай лучше другим, которые утверждают обратное.
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

ZWolol писал(а):С каждым программным продуктом идет свое описание.
Приведи пожалуйста выдержку из этих описаний про for.
Вообще-то я привел цитату из "Language reference guide FreePascal", если Вы не в курсе, он обратно совместим с TurboPascal и ObjectPascal (Delphi).

Тоже самое написано в ISO 7185:1990, и в стандарте на модулу-2.
ZWolol писал(а):Занимаетесь словоблудием однако...
Так что словоблудием занимаетесь Вы, а не я.
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

ZWolol писал(а):Я задал вопрос и давно получил ответ.
Вас тролят.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Кажется, я понял что вызвало недоумение ТС. В Си цикл for управляется условием продолжения (входа). В Паскале - условием завершения (выхода). Что-то вроде:

Код: Выделить всё

i:=0;
repeat
....
i:=i+1;
until i=8;
Подобная логика отсутствует в Си, а потому непривычна для ТС.
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

Mikhail писал(а):Изменение переменной цикла внутри for всегда было невозможным.
смутно припоминаю что в 90х в борланд (или турбо) паскале я таким регулярно пользовался и это не считалось неправильным
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

sts писал(а):смутно припоминаю что в 90х в борланд (или турбо) паскале я таким регулярно пользовался и это не считалось неправильным
С тех пор for оптимизировали.
mov eax, 0

jmp for_condition ; переходим к проверке условия

for_start:
add eax, 1
for_condition:
cmp eax, 10
jl for_start ; если условие соблюдено переходим к метке for_start для выполнения действий
Ответить