Условный оператор и оператор выбора. Возможные ошибки

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Неверная расстановка begin end

var 
  x,y: integer;
  v: integer;
begin
  write('Введите x,y: ');
  readln(x,y);
  begin // ошибка: операторные скобки должны использоваться по ветке then оператора if
    if x>y then
      v := x;
      x := y;
      y := v
  end;
  writeln('Результат упорядочения по возрастанию: ',x,' ',y);
end.

Операторные скобки должны находиться внутри другого оператора (например, оператора if), а не окаймлять его.

Отсутствие begin end

var 
  x,y: integer;
  v: integer;
begin
  write('Введите x,y: ');
  readln(x,y);
  if x>y then
    v := x; // ошибка: операторные скобки отсутствуют, поэтому по ветке then выполняется только этот оператор
    x := y; // эти операторы выполняются ПОСЛЕ оператора if в любом случае
    y := v  //
  writeln('Результат упорядочения по возрастанию: ',x,' ',y);
end.

Операторные скобки begin-end служат для объединения нескольких операторов в один. В данном случае ими следует окружить 3 оператора по ветке then. Если этого не сделать, то по ветке then будет выполняться только один оператор - v := x; последующие операторы будут выполняться после оператора if всегда, что неверно.

Неверная расстановка скобок в сложном логическом выражении

var x: integer;
begin
  readln(x);
  if x>1 and x<10 then // ошибка: отсутствуют скобки 
    write(x);
end.

В языке Паскаль операция and имеет более высокий приоритет, чем операции > и <, поэтому будет сделана попытка выполнить ее в первую очередь, что неверно.

Ссылки