Содержание     IF FOR...TO...DO WHILE...DO REPEAT... UNTIL CASE GOTO  
 

 

Операторы языка Pascal

 

1. Составной и пустой операторы

Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки.

Турбо-Паскаль допускает произвольную глубину вложенности:
Begin
...
  Begin
  ...
    Begin
    ...
    End;
  End;
End;
Наличие ; перед End - пустой оператор.

2. Операторы ветвлений

 

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

IF <условие> THEN <оператор1> [ELSE <оператор2>]
 

Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.

 

Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.


Пример:
Var
A, B, C, D: Integer;
begin
A:=1;
B:=2;
C:=3;
D:=4;
If A > B Then
 If C < D Then
  If C < 0 Then
  C:=0
{обратите внимание, что перед Else}
{пустой оператор ";"не ставится}
  Else
  A:=B;
end.
а могло быть и так:
If A > B Then
 If C < D Then
  If C < 0 Then
  C:=0
  Else
 Else
Else A:=B
 

Рассмотрим программу, которая вводит произвольное целое число от 0 до 15 и выводит его в шестнадцатеричной системе:


Program Hex;
Var
  Ch: Char;
  N: Integer;
Begin
  Write ('N = ');
  Readln(N);
  If (N >= 0) And (N <= 15) Then
    Begin
    If N < 10 Then
      Ch:= Chr(Ord('0')+N)
    Else
      Ch:=Chr(Ord('A')+N-10);
    End
   Else
     Writeln('Ошибка');
End.

3. Операторы повторений

Цикл с предопределенным числом повторений.

For <переменная цикла>:=<начальное значение> To(DownTo) <конечное значение> Do <блок операторов>

Переменная должна быть целого или перечислимого типа. При исполнении цикла переменная цикла изменяется от начального до конечного значения с шагом 1. Если стоит to, то переменная увеличивается, если downto – уменьшается.

Условия выполнения цикла проверяются перед выполнением блока операторов. Если условие не выполнено, цикл For не выполняется. Следующая программа подсчитывает сумму чисел от 1 до введенного:

Program Summa;
Var
  I, N, S: Integer;
Begin
  Write('N = ');
  Readln(N);
  S:=0;
  For I:=1 To N Do
    S:=S + I;
  Writeln ('Cумма = ', S)
End.

Условный цикл с проверкой условия перед исполнением блока операторов.

While <условие> Do <блок операторов>

Блок операторов будет исполняться, пока условие имеет значение true. Необходимо, чтобы значение условия имело возможность изменения при исполнении блока операторов, иначе исполнение цикла не закончится никогда (в DOS это приведет к зависанию компыютера). Если условие зарание ложно, блок операторов не исполнится ни разу.

Найдем машинное "эпсилон" для переменной типа Real:
Program Epsilondetect;
Var
  Epsilon: Real;
Begin
  Epsilon:=1;
  While Epsilon + 1 > 1 Do
    Epsilon: = Epsilon/2;
  Writeln ('Эпсилон = ', Epsilon);
End.

Условный цикл с проверкой после выполнения блока операторов.

Repeat <тело цикла> Until <условие>

Блок операторов независимо от значения условия будет выполнен хотябы один раз. Цикл заканчивается, если после очередного исполнения блока операторов условие имеет значение true.

Пример: программа запрашивает ввод одного символа и выводит его ASCII - код, пока не будет введен пустой символ:

Program Code;
Const
  Cr = 13;
Var
  Ch:Char;
Begin
  Repeat
    Readln (Ch);
    Writeln (Ch,' = ', Ord (Ch));
  Until Ord (Ch) = Cr
End.

Оператор выбора одного из вариантов.

Case <ключ выбора> Of <список выбора> Else <оператор> End;

<ключ выбора> - выражение любого перечислимого типа,
<список выбора> - одна или более конструкций вида <значение ключа>:<блок операторов>.

Составим программу, имитирующую калькулятор. Программа вводит две строки: первая содержит два числа, разделенные пробелом или запятой, вторая - символ арифметического действия.

2 2
*
Признаком конца работы служит ввод любого символа, отличного от +, -, /, *.

Программа:
Program Calc;
Var
  Operation: Char; {Знак Операции}
  X, Y, Z: Real;
  Stop: Boolean;
Begin
  Stop:= False;
  repeat
    Writeln; {Пустая Строка - Разделитель}
    Write ('X, Y = ');
    Readln (X,Y);
    Write ('Операция: ');
    Readln (Operation);
    Case Operation Of
       '+': Z: = X+Y;
       '-': Z: = X-Y;
       '*': Z: = X*Y;
       '/': Z: = X/Y;
    Else
       Stop:= True;
    End;
    If Not Stop Then
      Writeln('Z = ',Z);
  Until Stop;
End.

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

Оператор безуслов ного перехода на строку с меткой.

Goto <метка>

Метка, должна быть описана в разделе описаний. Метка, описанная в процедуре (функции) локализуется в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.