- •5. Алгоритмы с разветвлением
- •5.1. Пример алгоритма с разветвлением
- •1) Постановка задачи:
- •2) Выбор метода решения и проектирование
- •5.2. Условный оператор
- •5.3. Составной оператор
- •2) Текст программы
- •3) Текст программы
- •3) Теcтирование и отладка программы
- •1) Постановка задачи:
- •2) Выбор метода решения и проектирование
- •5.4. Простейшие логические операции и выражения
- •5.5. Задания для самостоятельного выполнения
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.
Подробно работа с логическими данными и выражениями рассматривается в курсе дискретной математики. Мы же на этом завершим знакомство с условным переходом – одной из базовых схем управления программой.
