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



04.11.2017
Новые видео и статья Функция Odd.

29.10.2017
Новые видео и статья Функция Low.

23.10.2017
Новая задача Даны натуральные числа от 1 до 33.

22.10.2017
Добавлен раздел Статьи по С/С++.

03.10.2017
Новая книга 1001 вопрос начинающего программиста.

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

Основы программирования Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

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

Например, в нашем калькуляторе в случае выбора операции деления и в случае, если пользователь ввёл в качестве второго числа 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

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