Условная проверка if

Используйте конструкции if .. then или if .. then .. else для выполнения кода при истинном условии. В отличие от языков семейства C: условное выражение в Pascal не требует оборачивания скобками.

var
  A: Integer;
  B: boolean;
begin
  // При истинном условии только одна инструкция, begin end не нужны
  if A > 0 then
    DoSomething;

  // Несколько инструкций при истинном условии, обязательно оборачиваем begin end
  if A > 0 then
  begin
    DoSomething;
    AndDoSomethingMore;
  end;

  // Однострочная структура if-else
  if A > 10 then
    DoSomething
  else
    DoSomethingElse;

  // Полностью эквивалентная логика предыдущему примеру: сохраняем результат сравнения в булеву переменную
  B := A > 10;
  if B then
    DoSomething
  else
    DoSomethingElse;
end;Code language: JavaScript (javascript)

Правило привязки else

Конструкция else привязывается к ближайшему необвязанному if. Код ниже работает согласно ожиданиям:

if A <> 0 then
  if B <> 0 then
    AIsNonzeroAndBToo
  else
    AIsNonzeroButBIsZero;Code language: HTML, XML (xml)

Данный else относится к внутреннему блоку if B <> 0.

Вложенные конструкции if без оборачивания блоком синтаксически допустимы, но плохо читаются. Рекомендуется оборачивать всю внутреннюю вложенную логику конструкциями begin … end для четкого разграничения логических блоков; даже при хаотичном отступе легко определить границы области видимости и избежать ошибок при добавлении или удалении ветвей.

Оптимизированный стандартный вариант записи:

if A <> 0 then
begin
  if B <> 0 then
    AIsNonzeroAndBToo
  else
    AIsNonzeroButBIsZero;
end;Code language: HTML, XML (xml)
  • Условие после if не оборачивается скобками (в C/C++/Java скобки обязательны, в Pascal всё наоборот);
  • Если после then только одна строка кода – блоки begin end можно опустить; при нескольких строках они обязательны;
  • else привязывается к ближайшему внутреннему if; при вложенных конструкциях всегда используйте блоки для исключения неоднозначности;
  • Выражения сравнения (например A>10) можно напрямую присваивать булевым переменным.

Ниже полный запускаемый пример: определение оценки по баллам

Логические правила:

  • ≥90 → A
  • ≥80 и <90 → B
  • ≥60 и <80 → C
  • <60 → D
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ScoreLevel;

var
  score: Integer;
begin
  Write('Введите балл за экзамен: ');
  ReadLn(score);

  if score >= 90 then
    Writeln('Оценка: A')
  else if score >= 80 then
    Writeln('Оценка: B')
  else if score >= 60 then
    Writeln('Оценка: C')
  else
    Writeln('Оценка: D');

  ReadLn;
end.Code language: PHP (php)

Скомпилируйте и запустите программу

Введите балл за экзамен: 96
Оценка: A

Программа предложит ввести балл, после чего выведет соответствующую оценку.

Нелатинские символы могут отображаться искаженно, добавьте строку: {$codepage utf8}

Логику получения оценки также можно вынести в отдельную функцию.

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ScoreLevelFunc;

function GetLevel(s: Integer): string;
begin
  if s >= 90 then
    Result := 'A'
  else if s >= 80 then
    Result := 'B'
  else if s >= 60 then
    Result := 'C'
  else
    Result := 'D';
end;

var
  score: Integer;
begin
  Write('Ваш балл: ');
  ReadLn(score);
  Writeln('Ваша оценка: ', GetLevel(score));
  ReadLn;
end.Code language: PHP (php)

Условная проверка if

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *