
- •1.0. Обработка данных на компьютере
- •1.0.1. Программирование
- •1.0.2. Систематическое программирование
- •1.1. Программа PrintHello
- •1.2 Последовательное выполнение
- •1.3. Символьные данные
- •1.3.1. Программа CopyChar
- •1.3.2. Оператор присвоения.
- •1.3.3. Аннотированный вывод и эхо ввода.
- •1.4. Условное выполнение
- •1.4.1. Условия
- •1.4.2. Оператор if
- •1.4.3. Оператор begin
- •1.5. Циклическое выполнение
- •1.5.1 Оператор while
- •1.5.2. Бесконечное выполнение
1.4.2. Оператор if
Условное выполнение задается с помощью оператора IF – выражения со стандартными словами IF, THEN, ELSE в следующей форме:
IF условие
THEN
оператор THEN
ELSE
оператор ELSE
Где оператор THEN и оператор ELSE – операторы языка Паскаль, например, оператор присваивания. Если условие выполняется, тогда Паскаль-машина выполняет оператор THEN, в противном случае - оператор ELSE.
Как правило, оператор IF записывается в вышеприведенной форме, IF, THEN и ELSE на отдельных строках, оператор THEN и оператор ELSE сдвинуты на два символа для лучшей читаемости программы.
PROGRAM MaxChar (INPUT, OUTPUT);
{Копирует наибольший из первых двух символов из INPUT в OUTPUT}
VAR
Ch1, Ch2, Max: CHAR;
BEGIN
READ(Ch1, Ch2);
IF Ch1 > Ch2
THEN
Max := Ch1;
ELSE
Max := Ch2;
WRITELN(‘MAX OF ’, Ch1, ‘, ‘, Ch2, ‘ IS ‘, Max, ‘.’);
END.
INPUT : AZURE
OUTPUT : MAX OF A, Z IS Z.
INPUT : 1234
OUTPUT : MAX OF 1, 2 IS 2.
INPUT : 77
OUTPUT : MAX OF 7, 7 IS 7.
Вышеприведенная программа также демонстрирует нам эхо ввода и аннотированный вывод.
Частичная таблица выполнения для программы MaxChar
|
Условие |
INPUT |
Ch1 |
Ch2 |
Max |
BEGIN READ(Ch1, Ch2) IF Ch1 > Ch2 ELSE Max := Ch2 WRITELN(Max) END |
No |
AZURE AZURE
AZURE AZURE AZURE |
? A
A A |
? Z
Z Z |
? ?
Z Z
|
Оператор IF в этой таблице отсутствует потому, что он ее выполнялся. Значения не показаны в тех строках таблицы, где они не могут быть изменены.
Оператор ELSE может быть пропущено в операторе IF, в таком случае он будет записываться в следующей форме:
IF условие
THEN
оператор THEN
В данном случае, если условие в выражении IF не выполняется, Паскаль-машина ничего не делает. Программа MaxTwo выполняет ту же работу что и программа MaxChar, но с использованием оператора IF без выражения ELSE.
PROGRAM MaxTwo (INPUT, OUTPUT);
{Копирует наибольший из первых двух символов из INPUT в OUTPUT}
VAR
Ch1, Ch2: CHAR;
BEGIN
READ(Ch1, Ch2);
WRITE(‘MAX OF ’, Ch1, ‘, ‘, Ch2, ‘ IS ‘);
IF Ch1 < Ch2
THEN
Ch1 := Ch2;
WRITELN(Ch1, ‘.’);
END.
INPUT : AZURE
OUTPUT : MAX OF A, Z IS Z.
1.4.3. Оператор begin
В операторе IF выражение THEN и выражение ELSE могут быть расширены при использовании оператора BEGIN, который задает последовательность операторов заключенных между стандартными словами BEGIN и END и разделенными точкой с запятой. Внутри стандартных слов BEGIN и END могут встречаться любые операторы, в том числе – операторы BEGIN.
В условном операторе оператор BEGIN либо выполняется полностью, либо не выполняется вообще, в зависимости от результатов проверки условия.
PROGRAM MaxMin (INPUT, OUTPUT);
{Копирует из INPUT в OUTPUT наибольший из
первых двух символов, затем - наименьший}
VAR
Ch1, Ch2: CHAR;
BEGIN
READ(Ch1, Ch2);
WRITELN(‘MAX OF ’, Ch1, ‘, ‘, Ch2);
IF Ch1 > Ch2
THEN
BEGIN
WRITELN(Ch1);
WRITELN(Ch2)
END
ELSE
BEGIN
WRITELN(Ch2);
WRITELN(Ch1)
END
END.
INPUT : AZURE
OUTPUT : MAX OF A, Z
Z
A
INPUT : 1234
OUTPUT : MAX OF 1, 2
2
1
Список операторов внутри оператора BEGIN может быть пустым. В таком случаем говорят, что внутри оператора BEGIN присутствует пустой оператор. Пустой оператор ситуация довольно часто встречается в Паскаль-программах.
Если рассмотреть внимательно следующий фрагмент кода
BEGIN
Ch1 := Ch2;
END
Оператор присваивания заканчивается точкой с запятой, которая является разделителем. Следовательно, в операторе BEGIN два оператора: оператор присваивания и пустой оператор после точки с запятой.
В примере ниже выражение THEN содержит пустой оператор
IF Ch1 < Ch2
THEN
ELSE
Ch1 := Ch2
Внутри выражения THEN или выражения ELSE может быть использован оператор IF. В случае вложенности операторов IF Паскаль-машина ассоциирует выражение ELSE c ближайшим оператором IF.
PROGRAM Max3 (INPUT, OUTPUT);
{Копирует из INPUT в OUTPUT наибольший из
первых трех символов}
VAR
Ch1, Ch2, Ch3: CHAR;
BEGIN
READ(Ch1, Ch2, Ch3);
WRITELN(‘MAX OF ’, Ch1, ‘, ‘, Ch2, ‘, ‘, Ch3, ‘ IS ‘);
IF Ch1 > Ch2
THEN
IF Ch1 > Ch3
THEN
WRITE(Ch1)
ELSE
WRITE(Ch3)
ELSE
IF Ch2 > Ch3
THEN
WRITE(Ch2)
ELSE
WRITE(Ch3)
WRITELN(‘.’)
END.
INPUT : AZURE
OUTPUT : MAX OF A, Z, U IS Z
INPUT : 1234
OUTPUT : MAX OF 1, 2, 3 IS 3