Операторы и команды в Pascal: виды, синтаксис и примеры

Операторы и команды в Pascal: виды, синтаксис и примеры Полезное

Оператор в Pascal — это команда, которая описывает одно законченное действие программы: присвоить значение, вызвать процедуру, выполнить ветвление или цикл. Операторы записывают между begin и end и разделяют точкой с запятой.

Ниже разберем все виды операторов Паскаля — простые (присваивание, вызов процедуры, goto) и структурные (составной, if, case, for, while, repeat) — с синтаксисом, короткими рабочими программами и их выводом. Пометка про среду: примеры рассчитаны на компилятор Free Pascal (диалект, совместимый с Turbo Pascal); вывод приведен по этому диалекту.

Оператор и операция: не путать

В русскоязычных текстах слово «оператор» используют в двух разных смыслах, и это главная путаница темы.

Оператор (statement) — это команда-действие: x := 5, writeln(x), if, for. Из операторов состоит тело программы.

Операция (в английских источниках — operator) — это знак действия внутри выражения: +, -, *, div, mod, and, =, <. Операции не выполняются сами по себе, они вычисляют значение внутри оператора.

Проще говоря: s := a + b — это один оператор присваивания, внутри которого работает операция сложения +. Дальше под «операторами» понимаем именно команды-действия.

Виды операторов: сводка

Все операторы Паскаля делятся на простые (не содержат других операторов) и структурные (содержат внутри другие операторы).

Оператор Тип Назначение Синтаксис
Присваивание простой записать значение в переменную x := выражение
Вызов процедуры простой выполнить подпрограмму или команду writeln('текст')
goto простой безусловный переход к метке goto 10
Составной структурный объединить операторы в один блок begin ... end
if структурный ветвление по логическому условию if усл then ... else ...
case структурный выбор ветки по значению case выр of ... end
for структурный цикл с известным числом повторов for i := a to b do ...
while структурный цикл с предусловием while усл do ...
repeat структурный цикл с постусловием repeat ... until усл

Точку с запятой между операторами можно не ставить перед end, else и until — там оператор и так закрыт ключевым словом.

Присваивание

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

Тип переменной слева должен быть совместим с типом выражения справа: целочисленной переменной нельзя присвоить строку, но вещественной (real) можно присвоить целое.

Внутри выражения операции выполняются по приоритету (от высшего к низшему):

Приоритет Операции
1 (высший) not, унарный минус, @
2 *, /, div, mod, and, shl, shr
3 +, -, or, xor
4 (низший) =, <>, <, >, <=, >=, in

Круглые скобки меняют порядок: то, что в них, считается первым. Например, 2 + 3 * 4 даст 14, а (2 + 3) * 4 — 20.

Вызов процедуры: «команды» Паскаля

То, что новички называют «командами» Паскаля, — это вызовы встроенных процедур и функций. Оператор вызова состоит из имени процедуры и списка аргументов в скобках; для процедур без аргументов скобки не нужны.

Самые частые команды ввода-вывода:

  • write и writeln — вывод на экран; writeln дополнительно переводит строку.
  • read и readln — ввод с клавиатуры.
  • clrscr — очистка экрана; работает только при подключенном модуле crt (строка uses crt;).

Условные операторы: if и case

Условные операторы выбирают действие в зависимости от значения логического выражения (true или false).

Оператор if имеет полную форму (if ... then ... else ...) и краткую (if ... then ...). Перед else точка с запятой не ставится. Оператор case удобнее, когда веток много и выбор идет по конкретным значениям одной переменной порядкового типа.

Соберем небольшую программу, где работают присваивание, for, if и вывод:

program SumDemo;
var
  i, n, sum: integer;
begin
  n := 5;
  sum := 0;
  for i := 1 to n do    { перебор i от 1 до 5 }
    sum := sum + i;     { накапливаем сумму }
  if sum > 10 then      { ветвление по условию }
    writeln('sum = ', sum, ' (больше 10)')
  else
    writeln('sum = ', sum);
end.

Вывод программы:

sum = 15 (больше 10)

Теперь case — выбор ветки по значению. Он проверяет селектор (score div 10) и выполняет первую ветку, чья константа совпала:

program CaseDemo;
var
  score: integer;
begin
  score := 84;
  case score div 10 of
    9, 10: writeln('отлично');
    7, 8:  writeln('хорошо');
    5, 6:  writeln('удовлетворительно');
  else
    writeln('неудовлетворительно');
  end;
end.

Здесь 84 div 10 равно 8, значит сработает ветка 7, 8. Вывод программы:

хорошо

Несколько значений для одной ветки перечисляют через запятую (9, 10), допустимы и диапазоны (0..4). Ветка else необязательна — она срабатывает, если ни одна константа не совпала.

Циклы: for, while, repeat

Цикл повторяет один и тот же набор операторов несколько раз. В Паскале три вида циклов, и выбирают их по тому, известно ли число повторов заранее.

  • for — число повторов известно заранее (счетный цикл).
  • while — число повторов заранее неизвестно, условие проверяется до тела (предусловие).
  • repeat — условие проверяется после тела, поэтому тело выполнится хотя бы один раз (постусловие).

В цикле for i := a to b параметр i при каждом шаге увеличивается на единицу, пока не превысит b. Если нужен обратный отсчет, используют форму for i := b downto a — там параметр уменьшается на единицу. Менять параметр цикла вручную внутри тела нельзя.

Цикл while проверяет условие перед каждым проходом и работает, пока оно истинно. Посчитаем факториал числа 5:

program WhileDemo;
var
  n, factorial: integer;
begin
  n := 5;
  factorial := 1;
  while n > 1 do        { пока n > 1 }
  begin
    factorial := factorial * n;
    n := n - 1;         { параметр обязательно меняется в теле }
  end;
  writeln('5! = ', factorial);
end.

Вывод программы:

5! = 120

Важная граница: если забыть менять n в теле, условие n > 1 останется истинным всегда и цикл зациклится. У while тело может не выполниться ни разу — если условие ложно с самого начала.

Цикл repeat наоборот: сначала выполняет тело, а потом проверяет условие выхода после until. Он завершается, когда условие становится истинным:

program RepeatDemo;
var
  x: integer;
begin
  x := 1;
  repeat
    writeln('x = ', x);
    x := x + 1;
  until x > 3;          { выходим, когда x станет больше 3 }
end.

Вывод программы:

x = 1
x = 2
x = 3

Разница while и repeat в двух вещах: момент проверки (до тела или после) и смысл условия. У while условие — это условие продолжения, у repeat — условие завершения.

goto и составной оператор

Составной оператор — это несколько операторов, заключенных в begin ... end и воспринимаемых как один. Он нужен там, где по синтаксису допустим только один оператор, а выполнить надо несколько: например, в теле while выше begin ... end объединяет умножение и уменьшение n.

Оператор goto передает управление на метку, описанную в разделе label. Метка ставится перед оператором через двоеточие. goto считается устаревшим приемом: он ломает структуру программы и мешает ее читать, поэтому почти всегда его заменяют циклом или условием. В современном коде на Паскале goto практически не используют.

Выводы

  • Оператор в Pascal — это команда-действие; операция (+, mod, and) — лишь знак внутри выражения, это разные вещи.
  • Операторы делятся на простые (присваивание, вызов процедуры, goto) и структурные (составной, if, case, циклы).
  • Присваивание — это :=, а = в Паскале означает сравнение; путать их — типичная ошибка новичка.
  • Циклов три: for при известном числе повторов, while с проверкой до тела, repeat с проверкой после тела и гарантией хотя бы одного прохода.
  • «Команды» Паскаля вроде writeln или clrscr — это вызовы встроенных процедур.

Где применяется и что учить дальше

Операторы и команды — это азбука любого структурного языка, и Паскаль дает их в самой наглядной форме: присваивание, ветвление и три цикла без синтаксического шума. Именно поэтому его берут в школе и на первых курсах, чтобы объяснить логику программы до перехода к «взрослому» языку.

Те же конструкции почти один в один переносятся в Python, только запись короче: присваивание = вместо :=, отступы вместо begin/end, for i in range(1, n + 1) вместо for i := 1 to n. Вот та же сумма от 1 до 5, что и в первом примере на Паскале, но на Python:

n = 5
total = 0
for i in range(1, n + 1):   # аналог for i := 1 to n
    total += i              # присваивание и накопление
if total > 10:
    print(f"sum = {total} (больше 10)")
else:
    print(f"sum = {total}")

Вывод программы:

sum = 15 (больше 10)

Освойте тему на практике

Если хочется пройти путь от школьного Паскаля к современному востребованному языку и научиться писать реальный код, посмотрите курс Python Basic. Оценить формат и уровень до старта помогают бесплатные открытые уроки Otus — живые занятия с преподавателями.

Смежные темы: Алгоритмы в Pascal, Python и его операторы, Условные операторы в C.

FAQ

Чем := отличается от = в Паскале? := — это присваивание (записать значение в переменную), а = — сравнение на равенство внутри логического выражения. В условии if x = 5 стоит именно =.

Когда выбрать repeat, а не while? Когда тело цикла должно выполниться хотя бы один раз независимо от условия (например, показать меню и ждать ввод). while может не выполниться ни разу, если условие ложно сразу.

Нужно ли ставить точку с запятой перед end? Не обязательно: перед end, else и until разделитель можно опустить, потому что оператор там уже закрыт ключевым словом. Лишняя точка с запятой в большинстве случаев не ошибка, но перед else в if она приведет к ошибке компиляции.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)