В таблице перечислены результаты четырех логических операций; в качестве операндов этих операций используются операции отношения.
Операции And, Or, Xor являются двуместными (требуют двух операндов), операция Not – одноместной (второй операнд не требуется).
And – логическое умножение (конъюнкция), математические знаки: & и ⋀; операция вырабатывает значение Истина (True) только в том случае, когда оба операнда имеют значение Истина; в противном случае, когда хотя бы один из операндов имеет значение Ложь, операция And вырабатывает значение Ложь. Чтобы легче было понять это, проведем аналогию: Ложь – 0, Истина – 1, тогда:
0 * 0 = 0, 0 * 1 = 0, 1 * 0 = 0, 1 * 1 = 1. Данная операция используется в логических выражениях в тех случаях, когда необходимо проверить одновременное выполнение двух (и более) операций отношения.
Or – логическое сложение (дизъюнкция), математический знак v. Операция Or вырабатывает значение Истина, если хотя бы один из операндов имеет значение Истина, и только в том случае, когда оба операнда имеют значение Ложь, операция Orвырабатывает значение Ложь.Используя аналогию операцииAnd, можно записать: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 2 (хоть и не 1, но не 0, т.е. истина). Данная операция используется в логических выражениях в тех случаях, когда для выполнения условия достаточно выполнения хотя бы одной операции отношения.
Not – «Не» (отрицание), математический знак - ך. Результат выполнения операции противоположен значению операнда.
Xor – «исключающее или». Результатом выполнения операции является Истина, если операнды имеют разные значения, в противном случае вырабатывается Ложь.
Порядок выполнения операций при вычислении значения логического выражения:
1) определяется значение операций отношения (операндов логических операций);
2) если перед операндом стоит операция Not, то определяется ее значение;
3) And;
4) Or, Xor;
5) если логическое выражение заключено в скобки, и перед ними стоит операция Not, то вычисляется содержимое скобок, а потом применяется Not.
Рассмотрим пример логического выражения и попробуем вычислить его значение: Not ((a=b) And (b = c) Or ((d = 60) And (f = 60))) при а = 4, b = 7, c = 9, d = 45, f = 100.
Сначала определяем значение операций отношения, затем выполняем операции логичеcкого умножения And, затем логического сложения Or и отрицания Not:
Not (False And False Or (False And False)) = Not (False Or False) = Not (False) = True.
Теперь рассмотрим задачу, в которой условие будет являться логическим выражением и формироваться с использованием логических операций.
Задача № 9
Даны три произвольных числа a, b, c (вводятся с клавиатуры). Если выполняется соотношение a <= b <= c, заменить числа их квадратами; если выполняется соотношение a >b > c, то числа заменить наименьшим их них (т.е. с); в противном случае изменить знак каждого числа на противоположный. Результаты вывести на экран монитора.
Сначала нарисуем блок-схему:
Нет Да
Нет Да
При создании блок-схемы потребовалось записать условие в виде логического выражения: т.к. запись тройного неравенства в Pascal невозможна; пришлось разбить его на два неравенства, и, поскольку требовалось одновременное выполнение двух неравенств, то в логическом выражении между ними была использована операция And.
Теперь можно написать программу:
Program Primer;
Var a, b, c: Real;
Begin
Writeln (‘Введите три числа’);
Readln (a, b, c);
If (a <= b) And (b <= c) Then Begin a:= a * a; b:= b * b; c:= c *c; End Else
If (a > b) And (b > c) Then Begin a:= c; b:= c; End Else
Begin a:= - a; b:= - b; c:= -c; End;
Writeln (a, ‘ ‘, b, ‘ ‘, c);
Readln
End.
Задача № 10
С клавиатуры вводятся три произвольных числа x, y, Найти максимальное из следующих чисел: x + y + z, x * y * z, x – y – z. Результат вывести на экран монитора.
Сначала создадим алгоритм в виде блок-схемы:
Нет Да
Да Нет
Нет Да
Примечание. В блок-схеме алгоритма использованы дополнительные переменные: P – произведение исходных чисел, S – их сумма, R – их разность. Это сделано исключительно для того, чтобы графическое изображение алгоритма не было слишком громоздким. В программе вместо этих величин можно было бы просто писать x * y * z x + y + y x – y – z соответственно.
Теперь можно написать программу:
Program maximum;
Var x, y, z, P, S, R: Real;
Begin
Writeln (‘Введите три числа’); Readln(x, y, z);
P:= x * y * z; S:= x + y + z; R:= x – y – z;
If (P > R) And (P > S) Then Writeln (‘P (произведение) - max’, P) Else
If (S > P) And (S > R) Then Writeln (‘S (сумма) – max’, S) Else
If (R > P) And (R > S) Then Writeln (‘R (разность) – max’, R) Else
Writeln (‘ Максимальное не определено’);
Readln; End.
Задача № 11 (для самостоятельного написания программы по блок-схеме)
C клавиатуры вводятся четыре числа a, b, c, d. Определить является ли число d делителем хотя бы одного из чисел a, b, c. Вывести на экран соответствующее сообщение.
Блок-схема задачи:
Нет Да
Нет Да
Нет Да
Задача № 12(для самостоятельного написания программы по блок-схеме)
Дано (вводится с клавиатуры) три числа. Определить, могут ли эти числа быть сторонами треугольника, и если да, то какой это треугольник: равносторонний, равнобедренный или прямоугольный. Вывести на экран соответствующее сообщение.