Страница 3 из 4

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

СообщениеДобавлено: 24.01.2024 07:00:44
Снег Север
Что-то тут сплошные олдфаги... Никто не вспомнил про самый современный вариант: For ... in ... do Это у несчастных сишников нет выбора, кроме архаики с целой переменной.

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

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

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

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


В Паскале тоже нет никаких проблем, просто нужно его знать, чтобы писать на нем программы, как нужно знать и любой ЯП если пишешь на нем программу.

Если Вы еще не поняли, то for в Паскале и for в Си это два разных цикла.

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

СообщениеДобавлено: 24.01.2024 18:28:21
Sharfik
ZWolol писал(а):Меня интересовало лишь: почему for на паскале работает не как на других языках?
Но если в описании сказано, что так и должно быть, то у меня вопросов больше нет.

Сильно много не программировал на других, был небольшой опыт работы с VB, PHP, Java. И не помню чтобы там чем то цикл принципиально отличался.

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

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

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

У меня нет желания устанавливать и проверять другие программы.
Я просто принял во внимание, что у Lazarus это не работает.
И не надо мне доказывать, что это правильно а у всех других не правильно.

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

СообщениеДобавлено: 24.01.2024 20:28:47
Mikhail
ZWolol писал(а):Совершенно верно, там нет разницы, как в прочем и на Фортране и на С кроме Паскаля !!!

На Фортране тоже самое что и на Паскале.

ZWolol писал(а):Я полагаю, что и на Delphi она работает так же. А ведь это Паскаль.

Именно, и на Delphi и на FreePascal это работает одинаково.

ZWolol писал(а):Мне ответили что это у Паскаля, хотя похоже что это не для каждого Паскаля.

Для каждого.

ZWolol писал(а):И не надо мне доказывать, что это правильно а у всех других не правильно.

Это правила языка, они не могут быть правильными или не правильными.

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

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

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

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

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

СообщениеДобавлено: 24.01.2024 22:15:53
Mikhail
ZWolol писал(а):Кроме Free Pascal был Turbo Pascal.

И там было точно также.

ZWolol писал(а):Я давно работал на Delphi, но не помню этого ограничения для цикла.

А я помню. :)

ZWolol писал(а):Изменение переменной цикла внутри цикла, как и выход из цикла по Go To является логической ошибкой, которая не рекомендуется, но не запрещается.

Изменение переменной цикла внутри for всегда было невозможным.

ZWolol писал(а):Все зависит от компилятора. В описании Free Pascal это запрещено, а на других компиляторах это может работать.

Не может и не работает.

ZWolol писал(а):Если компилятор будет давать на выходе из цикла значение: final value + 1 то это будет по твоему уже не Паскаль?

Я уже написал, что это UB, если это не выход по Break.

ZWolol писал(а):То есть давать неопределенную переменную в конце цикла это ПРАВИЛА языка?

Да. :wink:

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

СообщениеДобавлено: 24.01.2024 22:19:12
Seenkao
ZWolol писал(а):Изменение переменной цикла внутри цикла, как и выход из цикла по Go To является логической ошибкой, которая не рекомендуется, но не запрещается.

не является ошибкой!
Но да, не рекомендуется к использованию. И надо понимать почему. Причина проста, большинство ошибок происходит от того что люди не контролируют код, который они делают. А GoTo отслеживание такой ошибки усложняет (потому что люди именно в таких местах ошибки и делают).

ZWolol писал(а):Изменение переменной цикла внутри цикла

Я всё-таки порекомендовал бы правильно формулировать фразы. Потому что это тоже не ошибка!

ZWolol писал(а):Если компилятор будет давать на выходе из цикла значение: final value + 1 то это будет по твоему уже не Паскаль?

уже писали, что есть разные реализации Паскаля. Если взглянуть в сторону Си/Си++ то там столько компиляторов, и которые могут очень сильно не совпадать друг с другом в конечной реализации кода.

ZWolol писал(а):То есть давать неопределенную переменную в конце цикла это ПРАВИЛА языка?

Уточнить надо про что вообще речь? Про какую переменную?


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

Добавлено спустя 2 минуты 44 секунды:
Mikhail писал(а):И там было точно также.

была какая-то реализация Паскаля, где по выходу из цикла счётчик увеличивался.
А я(в то время) пользовался только Delphi 7, TP и возможно FP.

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

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

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

Если хотите предложить решение, то я его уже сделал и мне другого не нужно.
Если хотите что-то доказать, то оставьте их себе. Мне они не нужны.
Доказывай лучше другим, которые утверждают обратное.

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

СообщениеДобавлено: 25.01.2024 11:10:14
Mikhail
ZWolol писал(а):С каждым программным продуктом идет свое описание.
Приведи пожалуйста выдержку из этих описаний про for.

Вообще-то я привел цитату из "Language reference guide FreePascal", если Вы не в курсе, он обратно совместим с TurboPascal и ObjectPascal (Delphi).

Тоже самое написано в ISO 7185:1990, и в стандарте на модулу-2.

ZWolol писал(а):Занимаетесь словоблудием однако...

Так что словоблудием занимаетесь Вы, а не я.

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

СообщениеДобавлено: 25.01.2024 11:31:57
stikriz11
ZWolol писал(а):Я задал вопрос и давно получил ответ.

Вас тролят.

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

СообщениеДобавлено: 25.01.2024 14:10:30
svk12
Кажется, я понял что вызвало недоумение ТС. В Си цикл for управляется условием продолжения (входа). В Паскале - условием завершения (выхода). Что-то вроде:
Код: Выделить всё
i:=0;
repeat
....
i:=i+1;
until i=8;

Подобная логика отсутствует в Си, а потому непривычна для ТС.

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

СообщениеДобавлено: 25.01.2024 14:24:02
sts
Mikhail писал(а):Изменение переменной цикла внутри for всегда было невозможным.

смутно припоминаю что в 90х в борланд (или турбо) паскале я таким регулярно пользовался и это не считалось неправильным

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

СообщениеДобавлено: 25.01.2024 17:53:33
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 для выполнения действий