Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava_05.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
716 Кб
Скачать
☆

5.4. Простейшие логические операции и выражения

Нетрудно понять, что сложное условие A≤B≤C сводится к одновременному выполнению двух простых: (A≤B) и (B≤C). В самом деле, A≤B≤C истинно тогда и только тогда, когда одновременно истинны (A≤B) и (B≤C). Связка и в данном случае выполняет роль логической операции, которую так и принято называть «логическое И». Мы будем использовать ее английское название and1. Кроме этой операции часто при написании программ приходится использовать «логическое ИЛИ» (or) и «логическое отрицание НЕ» (not). Для этих операций определены таблицы истинности:

Логическое

И (and)

Логическое

ИЛИ (or)

Логическое НЕ (not)

X

y

X and y

X

y

X or y

X

not X

True

True

True

True

True

True

True

False

True

False

False

True

False

True

False

True

False

True

False

False

True

True

False

False

False

False

False

False

Таким образом, сложное логическое выражение X and Y принимает значение True (истина), если истинны входящие в его состав более простые выражения X и Y. Выражение X or Y истинно (принимает значение True), если истинно хотя бы одно из входящих в его состав более простых выражений X или Y. Логическое выражение not X истинно, если X принимает значение False. Примеры использования логических операций:

Фрагмент программы

Комментарии

X:=5;

if (X>0) and (X<10) then

A:=1

else

A:=13

WriteLn(’Результат A=’, A);

Первое условие X>0=True (истинно), второе X<10=True (истинно), поэтому и все сложное логическое выражение принимает значение True. Управление передается оператору A:=1. На экран поступит сообщение «Результат A=1».

X:=15;

if (X>0) and (X<10) then

A:=1

else

A:=13

WriteLn(’Результат A=’, A);

Условие X>0=True (истинно), но выражение X<10=False (ложно), поэтому и все сложное логическое выражение принимает значение False. Управление передается оператору A:=13. В итоге на экран поступит сообщение «Результат A=13».

X:=15;

if (X>10) or (X<0) then

A:=120

else

A:=130

WriteLn(‘Результат A=’, A);

Условие X>10=True (истинно), выражение X<0=False (ложно), поэтому и все сложное логическое выражение, включающее логическое ИЛИ, принимает значение True. Управление передается оператору A:=120. В итоге на экран поступит сообщение «Результат A=120». Аналогичный результат получится, например, при X=-10.

X:=5;

if (X>10) or (X<0) then

A:=120

else

A:=130

WriteLn(’Результат A=’, A);

Оба условия ложны (X>10=False и X<0=False), поэтому и все сложное логическое выражение включающее логическое ИЛИ принимает значение False. Управление передается оператору A:=130. В итоге на экран поступит сообщение «Результат A=130». Аналогичный результат будет получен, например, при любых X[0; 10].

X:=5;

if not(X>10) then

A:=22

else

A:=33

WriteLn(’Результат A=’, A);

Условие X>10 ложно (X>10=False), поэтому все сложное логическое выражение включающее логическое НЕ истинно (принимает значение True). Управление передается оператору A:=22. В итоге на экран поступит сообщение «Результат A=22».

Используя логические операции, для задания 5.2 можно попытаться разработать более понятный и читабельный алгоритм, например, как это показано на рис. 5.3. Программа, реализующая этот алгоритм, стала несколько длиннее, проверок прибавилось, они дублируют друг друга (например, операция сравнения A и B определяется трижды). Тем не менее, согласитесь, программа стала понятнее. Что предпочесть эффективность или читабельность? Естественно, все определяется конкретными требованиями к алгоритму, но в общем случае соотношение между эффективностью и читабельностью регламентируется стандартами структурного программирования (подробнее см. п. 13.6).

program Sorting;

var

A,B,C: Integer;

begin

Write(‘Введите A,B,C:’);

ReadLn(A,B,C);

if (A<=B) and (B<=C) then

WriteLn(A,B,C)

else

if (A<=C) and (C<=B) then

WriteLn(A,C,B)

else

if (B<=A) and (A<=C) then

WriteLn(B,A,C)

else

if(B<=C) and (C<=A) then

WriteLn(B,C,A)

else

if (C<=A) and (A<=B) then

WriteLn(C,A,B)

else

WriteLn(C,B,A);

ReadLn;

end.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]