3.2.2. Условный и составной операторы

 

        Для реализации ветвления можно использовать условный оператор:

          if условие then оператор1

                   else оператор2;

 

где условие – это выражение логического типа (например, а>0, (d<0) and (c=5) и другие). Например, в операторе if x < y then z:=x else z:=y; мы указываем программе, что если значение переменной x меньше y, то переменной z мы присваиваем значение x, в противном случае z равно y.

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

При выполнении такого оператора, компьютер проверяет, выполняется ли условие. Если условие верно, то выполняется ветвь then, т.е. оператор1; если условие не выполняется – то ветвь else - оператор2.

Если в какой-либо ветви нужно выполнить не один, а несколько операторов, необходимо поместить эти операторы внутри составного оператора begin ... end, как в приведенной ниже программе. В этом случае последовательность операторов, объединенная в группу внутри begin ... end рассматривается как один оператор или блок. Т.о. составной оператор используется в тех случаях, когда по правилам языка допускается использовать только один оператор, а требуется выполнить несколько действий. Такой случай часто возникает при написании условных операторов, операторов выбора и цикла.

 

Общий вид составного оператора

   begin

      Оператор 1;

      Оператор 2;

       ………

      Оператор n;

   end;

 

Вся совокупность из n операторов внутри операторной скобки beginend рассматривается как один оператор или блок.

         Описанную выше задачу 1.2.1 реализует следующая программа.

 

program vetv1;

   var   x, f, A: real;

begin

   write(‘Введите x ’);

   read(x);

   A:=sqr(x) – 3*x – 15;

   if A>0 then

           begin

              f:=1/sqrt(A);

              writeln(‘f(‘,x:4:1,’)=’,f:7:3);

           end                                       {точка с запятой не ставится}

        else writeln (‘при x=’,x:4:1,’ функция не определена’);

end.

 

Обратите внимание на то, что, так как составной оператор begin ... end стоит в ветви then и после него условный оператор не заканчивается (далее есть ветвь else), то точка с запятой (знак конца оператора) не поставлена.

Если бы по логике задачи нужно было бы выполнить несколько действий в ветви else, то составной оператор нужно было бы использовать и там. Например, так:

 

   if A>0 then

           begin

             f:=1/sqrt(A);

             writeln(‘f(‘,x:4:1,’)=’,f:7:3);

           end

        else

          begin

            writeln (‘при x=’,x:4:1,’ функция не определена’);

            writeln (‘A=’,A:6:2);

          end;  {точка с запятой стоит, т.к. это конец оператора IF}

 

Еще один пример - вычисление значения функции .

program vetv1_2;

   var x,f:real;

begin

   write(‘введите х’);

   readln(x);

   if  x>=1 then begin

                           f:=sqrt(sqr(x)-1);

                           writeln(‘f(x)=sqrt(sqr(x)-1)=’,f:6:3);

                        end

                  else begin

                             f:=1-sqr(x);

                               writeln(‘f(x)=1-sqr(x)=’,f:6:3);

                           end;

end.