Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка (Информатика).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.12 Mб
Скачать

4.2. Условный оператор if и составной оператор Begin … End

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

IF <логическое выражение>

THEN <оператор 1>

[ELSE <оператор 2>];

в которой IFTHENELSE – зарезервированные слова языка, означающие соответственно ЕСЛИ…ТО…ИНАЧЕ, квадратные скобки означают, что часть ELSE <оператор 2> может отсутствовать. Условный оператор может быть записан в одну строку, однако рекомендуется придерживаться требований структурированной записи программы.

Если логическое выражение принимает значение ИСТИНА (TRUE), то выполняется оператор 1, если же оно принимает значение ЛОЖЬ (FALSE), то выполняется оператор 2. В любом случае далее выполняется оператор, стоящий в программе за условием.

Например, оператор, вычисляющий Y = |X|, будет иметь следующий вид:

IF X>=0

THEN Y:=X

ELSE Y:= -X;

Условный оператор может не иметь конструкции ELSE, тогда он называется сокращённым условным оператором. Если логическое выражение принимает значение ЛОЖЬ (FALSE), сразу выполняется оператор, следующий за условием.

Например, оператор

IF X<0

THEN X:= -X;

обеспечивает инвертирование значения переменной Х, если оно отрицательно, и оставляет его без изменения в противном случае.

Рассмотрим подробнее составные части условного оператора.

Логическим выражением (булевым) называется выражение, имеющее значение типа BOOLEAN, т.е. TRUE или FALSE.

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

В языке PASCAL допустимы следующие операции отношения:

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

Отношение принимает значение TRUE, если оно справедливо для входящих в него операндов и FALSE в противном случае. Например, 10>7 имеет значение истина, а 5<=0 – ложь.

Переменные, которые в программе принимают значение логического выражения, должны быть описаны в разделе описания переменных как имеющие тип BOOLEAN. Например, переменные А и В, описанные как

VAR

A, B: BOOLEAN;

считаются в программе логическими (т.е. принимают значения TRUE и FALSE).

Над множеством логических переменных определены следующие логические операции:

AND – логическое умножение (И);

OR – логическое сложение (ИЛИ);

XOR – логическое ИЛИ-НЕ (исключающее ИЛИ);

NOT – логическое отрицание (НЕ).

Их действия показаны в таблице 1:

Таблица 1. Таблица истинности

A

B

NOT A

A AND B

A OR B

A XOR B

FALSE

FALSE

TRUE

FALSE

FALSE

FALSE

FALSE

TRUE

TRUE

FALSE

TRUE

TRUE

TRUE

FALSE

FALSE

FALSE

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

TRUE

FALSE

По сравнению с операторами отношения логические операции имеют меньший приоритет.

В процессе вычислений соблюдается следующая очерёдность в выполнении этих операций:

  1. Выражения, заключённые в скобки;

  2. Логическое отрицание NOT;

  3. Логическое умножение AND;

  4. Логическое сложение OR, XOR.

Операции, имеющие одинаковый приоритет, вычисляются слева направо.

Например, логическое выражение

1 6 4 2 5 3

(-9>=5) OR NOT (11<30) AND (0<=7)

имеет значение FALSE. Цифрами сверху показан порядок выполнения операций.

Операции NOT, AND, OR, XOR можно использовать для побитовых операций с целыми числами, для которых они имеют следующий смысл.

NOT – унарная операция инверсии всех битов целого числа:

a = 1011, NOT A = 0100.

AND – побитовая логическая операция И двух целых чисел:

b = 0110, A AND B = 0010.

OR – побитовая логическая операция ИЛИ двух целых чисел:

A OR B = 1111.

XOR – побитовая логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ двух целых чисел:

A XOR B = 1101.

Также к этой группе относят операции SHL и SHR.

SHL – операция I SHL J сдвигает содержимое I на J битов влево. Освободившиеся биты заполняются нулями:

A SHL 2 = 1100.

SHR – операция I SHR J сдвигает содержимое I на J битов вправо. Освободившиеся биты заполняются нулями:

B SHR 1 = 0011.

В этих операциях I и J – выражения любого целого типа.

Полный условный оператор в общем случае в своей записи после THEN и ELSE может использовать любой оператор языка PASCAL. Однако часто возникает необходимость вставить в какую-либо ветвь не один, а группу операторов. В этом случае пользуются так называемым составным оператором.

Составной оператор – это заключённая между зарезервированными словами BEGIN и END последовательность операторов, отделённых друг от друга символом ‘;’ (точкой с запятой):

BEGIN

Оператор 1;

Оператор 2;

Оператор N;

END;

В свою очередь любой из операторов, входящих в составной, тоже может быть составным. Зарезервированные слова BEGIN и END называются в этом случае операторными скобками. Турбо Паскаль допускает произвольную глубину их вложенности.

Приведём программу: вычисление действительных корней квадратного уравнения ax2 + bx + c = 0, в соответствии с алгоритмом рис. 2.

Program SQEQ;

Var

A, B, C, D, X1, X2: Real;

Begin

WriteLn (‘Введите А, В, С’);

ReadLn (A);

ReadLn (B);

ReadLn (C);

D:=Sqr (B) 4 * A * C;

If D<0 then

WriteLn (‘Действительных корней нет’)

else begin

X1:=(B + Sqrt (D)) / (2 * A);

X2:=(B Sqrt (D)) / (2 * A);

WriteLn (‘Действительный корень Х1= ’, X1:3:1);

WriteLn (‘Действительный корень Х2= ’, X2:3:1);

End;

WriteLn (‘Дискриминант D= ’, D:3:1)

End.

Результаты выполнения программы

Введите A, B, C

2 5 2

Действительный корень X1 = - 0.5

Действительный корень X2 = - 2.0

Дискриминант D = 9.0

Структура выбора может входить составной частью в одну из ветвей другой структуры выбора. В этом случае имеет место сложное ветвление. Например, даны две переменные a и b. Если a = b, то вывести на печать значения этих переменных без изменения. Если a < b, значения переменных уменьшить в 3 раза. Если a > b, то значения переменных увеличить на 6. Алгоритм и программа имеют следующий вид:

Рис. 3

Program AANOB;

Var

A, B: Real;

Begin

WriteLn (‘Введите A, B’);

Read (A, B);

If A<>B then

If A<B then begin

A := A / 3;

B := B / 3;

End

else begin

A := A + 6;

B := B + 6;

End;

WriteLn (‘A=’, A:2:1, ‘B=’, B:2:1)

End.

Результаты выполнения программы

Введите A, B

4 2

A = 10.0 B = 8.0

В ветви THEN внешнего разветвления содержится ещё один оператор. Конструкция ELSE во внешнем ветвлении отсутствует. Ветвь ELSE относится к ближайшему IF, не имеющему ELSE. Структурированный вид программы предполагает написание соответствующих IFTHENELSE друг под другом. Операторы, ограниченные операторными скобками BEGIN END, записывают также друг под другом и следуют относительно BEGIN и END.