Решение логических выражений принято записывать в виде таблиц истинности – таблиц, в которых по действиям показано, какие значения принимает логическое выражение при всех возможных наборах его переменных.
При составлении таблицы истинности для логического выражения необходимо учитывать порядок выполнения логических операций, а именно:
действия в скобках,
инверсия (отрицание),
& (конъюнкция),
v (дизъюнкция),
=> (импликация),
<=> (эквивалентность).
Алгоритм составления таблицы истинности:
1. Выяснить количество строк в таблице (вычисляется как 2n, где n – количество переменных + строка заголовков столбцов).
2. Выяснить количество столбцов (вычисляется как количество переменных + количество логических операций).
3. Установить последовательность выполнения логических операций.
4. Построить таблицу, указывая названия столбцов и возможные наборы значений исходных логических переменных.
5. Заполнить таблицу истинности по столбцам.
6. Записать ответ.
Пример 6
Построим таблицу истинности для выражения F=(AvB)&(¬Av¬B).
1. Количество строк=22 (2 переменных+строка заголовков столбцов)=5.
2. Количество столбцов=2 логические переменные (А, В)+ 5 логических операций (v,&,¬,v,¬) = 7.
3. Расставим порядок выполнения операций: 1 5 2 4 3
(A v B) & (¬A v ¬B)
4-5. Построим таблицу и заполним ее по столбцам:
А
В
АvВ
¬А
¬В
¬Аv¬В
(AvB)&(¬Av¬B)
0
0
0
1
1
1
0
0
1
1
1
0
1
1
1
0
1
0
1
1
1
1
1
1
0
0
0
0
6. ответ: F=0, при A=B=0 и A=B=1
Пример 7
Построим таблицу истинности для логического выражения F=XvY&¬Z.
1. Количество строк=23+1=(3 переменных+строка заголовков столбцов)=9.
2. Количество столбцов=3 логические переменные+3 логических операций = 6.
3. Укажем порядок действий: 3 2 1
X v Y & ¬Z
4-5. Построим таблицу и заполним ее по столбцам:
X
Y
Z
¬Z
Y&¬Z
XvY&¬Z
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
1
1
1
1
0
0
1
0
1
1
0
1
0
0
1
1
1
0
1
1
1
1
1
1
0
0
1
6. ответ: F=0, при X=Y=Z=0; при X=Y=0 и Z=1.
//Pascal ABC.NET 3.1 сборка 1219
Var
f:text;
max,min,p:real;
maxn,minn,n,i:integer;
ar:array of real;
s:string;
begin
max:=real.MinValue;
min:=real.MaxValue;
n:=0;
assign(f,'text.txt');
reset(f);
while not(Eof(f)) do
begin
read(f,p);
inc(n);
setlength(ar,n);
ar[n-1]:=p;
if ar[n-1]>max then
begin
max:=ar[n-1];
maxn:=n-1;
end;
if ar[n-1]<min then
begin
min:=ar[n-1];
minn:=n-1;
end;
end;
close(f);
swap(ar[minn],ar[maxn]);
for i:=0 to n-1 do
if i<>n-1 then s:=s+floattostr(ar[i])+' '
else
s:=s+floattostr(ar[i]);
rewrite(f);
write(f,s);
close(f);
end.
Пример содержимого text.txt:
0 -2.1 1.1
Пример содержимого text.txt после работы программы:
0 1.1 -2.1