4. ОРГАНИЗАЦИЯ ПРОГРАММ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ

 

 Логические выражения

Логическое выражение вырабатывает результат логического типа: true и false. Эти выражения записываются с помощью операций отношений и логических операций.

Логические операции (L1 и L2 – логические выражения)

L1

L2

L1 and L2

L1 or L2

L1 xor L2

not L1

true

true

true

true

false

false

true

false

false

true

true

 

false

true

false

true

true

true

false

false

false

false

false

 

 

Операции в порядке убывания их приоритета располагаются следующим образом:                                                   

Операция

Приоритет

not

and

or, xor

=, < >, <, >, < =, > =

первый (высший)

второй

третий

четвертый (низший)

 

Пример логического выражения:

not (ln(x) > 5) and ((a <= 5) or (y = 0.2))

 

Оператор условия if

Оператор if имеет вид:

if p then a1 else a2;

 

При выполнении этого оператора сначала вычисляется логическое выражение p (условие), в случае истинности которого выполняется оператор а1, а в случае ложности – оператор а2. Ключевые слова if, then и else имеют смысл если, то и иначе, соответственно.

Возможен сокращенный вариант оператора if:

                  if p then a1;

 

Здесь, если условие p истинно, выполняется оператор а1. Если условие p ложно, управление передается следующему (за оператором if) оператору в программе. Можно сказать, что первый вариант оператора if осуществляет выбор между двумя действиями, а второй – между действием и отсутствием действия.

Пример использования оператора if:

program sqroot; {Вычисление действительных  корней квадратного уравнения}

var

   a, b, c: real; {коэффициенты уравнения}

   x1, x2: real; {корни уравнения}

   d: real; {дискриминант}

begin

   writeln (’Введите коэффициенты уравнения:’);

   write (’a =’); readln (a);

   write (’b =’); readln (b);

   write (’c =’); readln (c);

   d: = b * b – 4 * a * c; {вычисление дискриминанта}

   if d > = 0

     then

       begin

           x1: = (-b + sqrt(d)) / (2 * a);

           x2: = (-b – sqrt(d)) / (2 * a);

           writeln (’Корни уравнения:’);

           writeln (’ x1= ’, x1 : 9 : 3, ’ x2= ’, x2 : 9 : 3);

       end

     else

       writeln (’Действительных корней нет.’);

end.

 

Оператор выбора case

Оператор case используется для выбора одного из нескольких направлений дальнейшего хода программы. Этот оператор имеет вид:

         case p of

             a: s1;

             b: s2;

             . .

             n: sn;

             else sn+1; 

         end;

 

При выполнении оператора case сначала вычисляется выражение p, называемое селектором выбора. Выражение p должно принадлежать типу данных, имеющему конечное число значений (например: integer). Затем, в зависимости от полученного значения (если оно равно одной из констант a, b, …, n, которые называются константами выбора), выполняется один из операторов s1, s2, …, sn, помеченный соответствующей константой. Каждый из этих операторов может быть составным. Затем управление передается следующему (после case) оператору в программе.

Если значение выражения p не совпадает ни с одной из констант выбора,  выполняется оператор sn+1, содержащийся после ключевого слова else, причем ветвь else в операторе case необязательна.

Зарезервированные слова case, of, else и end имеют смысл вариант, из, иначе и конец.

Кроме одиночных констант в вариантах оператора case могут использоваться диапазоны значений и списки (представленные через запятую).

Пример использования оператора case:

program number; { Определение времени года по номеру месяца}

var

   month: integer; {номер месяца}

begin

    write (’Введите номер месяца:’);

    readln (month);

   writeln (‘Время года:’);

    case month of

        1, 2, 12: writeln (’зима’);

        3..5: writeln (’весна’);

        6..8: writeln (’лето’);

        9..11: writeln (’осень’);

        else writeln (’число должно быть от 1 до 12’);

    end;

end.

 

Оператор перехода goto

Оператор перехода предназначен для передачи управления в другое место программы, т.е. для нарушения естественного порядка выполнения операторов.

Этот оператор имеет вид:

         goto p;

 

Здесь p – метка, которой помечен некоторый другой оператор в программе. Зарезервированное слово goto имеет смысл перейти. Переход осуществляется к оператору, помеченному меткой p. Так, оператор перехода

         goto 11;

передаст управление оператору с меткой 11, например, оператору

               11: writeln;

 

В качестве меток допускается использовать числа (от 1 до 9999) и идентификаторы. Все метки, используемые в программе, должны быть объявлены в разделе описания меток, начинающемся со слова label. Каждой меткой должен быть помечен один и только один из операторов в программе.

Пример использования оператора goto:

program jump;

label 1;

var n: integer;

begin

    read (n);

    if n > 1000 then goto 1 else n: = n + 100;

    write (n);

1: end.

 

Программа jump работает так. Вводится с клавиатуры значение переменной n типа integer. Если это значение превышает 1000, программа сразу завершается. В противном случае к значению n прибавляется 100 и оно выводится на экран.