Операторные скобки

Lazarus IDE: Основы программирования в Windows Lazarus IDE: Основы программирования в Windows

Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее...

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

Например, в нашем калькуляторе в случае выбора операции деления и в случае, если пользователь ввёл в качестве второго числа 0, мы выдаём сообщение об ошибке и завершаем программу. Это очень плохо, потому что мы не предоставили пользователю шанса исправить ошибку. Пользователь может на нас обидеться.

Как быть? Ведь после оператора if можно записать только одно выражение. То есть, если мы напишем

if y = 0 then
  WriteLn('!!! Error: Division by ZERO !!!');
  Write('y = ');
  ReadLn(y);

То мы предоставим пользователю возможность повторно ввести значение y. Но есть одна проблема.

Строка кода

Write('y = ');

будет выполняться в любом случае, независимо от того, был ли y равен нулю или нет. То есть мы заставим пользователя повторно вводить значение, даже если он с первого раза ввёл его правильно.

Но и это ещё не всё. Нам придётся снова проверять значение y, так как пользователь может и второй раз ошибиться.

В общем у нас появился вопрос: как можно “впихнуть” в оператор if несколько выражений.

Ответ есть: надо поместить все выражения между словами begin и end. То есть в нашем примере это будет выглядеть так:

if y = 0 then
  begin
    WriteLn('!!! Error: Y must not be ZERO !!!');
    WriteLn('!!! Re-type Y !!!');
    Write('y = ');
    ReadLn(y);
  end;

Итак, полный вариант синтаксиса конструкции if...then...else:

if Условие then
  begin
    Оператор_1;
    Оператор_2;
    …
    Оператор_N;
  end
else
  begin
    Оператор_1;
    Оператор_2;
    …
    Оператор_N;
  end;

Если используется только один оператор, то слова begin и end можно не использовать. Если более одного оператора, то использование этих слов ОБЯЗАТЕЛЬНО.

ВАЖНО!
Обратите внимание, что перед словом else нет точки с запятой. А в конце конструкции if...then...else всегда должна быть точка с запятой.

Надеюсь, вы уже догадались, что слова begin и end используются не только для обозначения начала и конца программы. Эти слова ещё называют операторными скобками. Операторные скобки объединяют какой-либо блок кода. И в таком случае этот блок кода используется в программе как один оператор.

Слова begin и end - это не единственные операторные скобки в Паскале. Например, рассмотренная нами ранее конструкция с оператором case сама по себе также является операторными скобками, то есть между словами case и end не нужно вставлять слова begin и end.

Однако, если после константы следует несколько операторов, то слова begin и end также необходимы. Полный вариант конструкции case выглядит так:

Case ПорядковаяПеременная of
Значение_1 : Begin
               Операторы;     
             End;
Значение_2 : Begin
               Операторы;     
             End;
 
…
 
Значение_N : Begin
               Операторы;     
             End;
Else
  Begin
    Операторы;     
  End;
End;

О других операторных скобках мы будем говорить далее.

А сейчас ещё немного усовершенствуем наш многострадальный калькулятор.

Листинг 19.3. Использование операторных скобок.
program mycalc;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var x, y  : integer;
    op    : char;

begin
  Write('x = ');
  ReadLn(x);
  Write('y = ');
  ReadLn(y);
  Write('Operation (+, -, *, /): ');
  ReadLn(op);
  case op of
  '+' : WriteLn('x + y = ', x + y);
  '-' : WriteLn('x - y = ', x - y);
  '*' : WriteLn('x * y = ', x * y);
  '/' : if y = 0 then
          begin
            WriteLn('!!! Error: Y must not be ZERO !!!');
            WriteLn('!!! Re-type Y !!!');
            Write('y = ');
            ReadLn(y);
            if y = 0 then
              WriteLn('!!! Error: Y must not be ZERO !!!')
            else
              WriteLn('x div y = ', x div y);
            end
        else
          WriteLn('x div y = ', x div y);
  else WriteLn('!!! Error: Unsupported operation !!!');
  end;
  ReadLn;
end.

Итак, здесь мы даём возможность пользователю исправить свою ошибку. Однако он может совершить её ещё раз. Как решить эту проблему, мы будем думать дальше.

А пока разберитесь и усвойте сегодняшний материал.


Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика