Другие языки программирования и технологии

Как использовать (begin end;) в Паскале? Надо чтобы группа операторов рассматривалась как один

Рассмотрим программу, которая должна семь раз «отмерить и отрезать».
 var i: integer;
begin
for i := 1 to 7 do
WriteLn('Отмерил');
WriteLn('Отрезал');
end.
Запустив эту программу, вы обнаружите, что она семь раз отмерила, а потом один раз отрезала. Хотя это соответствует пословице, это не то, что мы хотели.

В чём проблема? Дело в том, что цикл for повторяет лишь тот один шаг, который идет сразу после него, — вывод «Отмерил». Второй шаг, вывод «Отрезал», идет отдельно.

А сдвиг строчки «Отрезал» вправо, на один уровень с «Отмерил», вводит нас в заблуждение. Подобный прием сработал бы в языке Python, в котором границы блоков задаются отступами. Но в Паскале это не работает.

Если мы хотим зациклить обе строчки, нам следует объединить их, превратив в составной оператор. Это делается при помощи ключевых слов begin и end (начать, закончить).
 var i: integer; 
begin
for i := 1 to 7 do
begin
WriteLn('Отмерил');
WriteLn('Отрезал');
end;
end.
Теперь после for весь код от begin до end; рассматривается как один составной оператор, и именно он зацикливается. Такой код семь раз повторит единую процедуру — отмерить и отрезать.
Анатолий Лыповой
Анатолий Лыповой
86 170
Лучший ответ
Андрей Кисуленко Программа всё правильно сделала: семь раз отмерила и 1 раз отрезала. Значит, бегин и энд точно не нужны.
Руслан Яковлев Зачем точка с запятой перед end в первом варианте кода и две точки с запятой перед двумя end во втором?
Сколько есть вариантов?
Для этого и использовать: обернуть группу операторов в begin - end

Например:
 while sqr(i) < n do begin
inc(sum, i + n div v);
inc(i)
end
Руслан Яковлев
Руслан Яковлев
67 921