Постройте таблицы истинности для следующих логических выражений: И можете объяснить, почему вы так сделали 1) B & (А v В); 2) А & (B v ¬В); 3) А & (А v В v С); 4) ¬(A v B v ¬C).
Попробуй Program PascalGuru; var s:string; f,t:text; function preobr(s:string):string;var i,j,p,n,sered:integer; gl,zp,slovo:string; m:array [1..80] of string;beginzp:='!?*,.'; gl:='аоуыэяеёюи'; p:=pos(' ',s); i:=0; repeat inc(i); slovo:=copy(s,1,p-1); m[i]:=slovo; delete(s,1,p); p:=pos(' ',s); until p=0; n:=i+1; m[n]:=s; for i:=1 to n do begin s:=m[i]; if pos(s[length(s)],zp)<>0 then p:=length(s)-1 else p:=length(s); sered:=(p div 2)+1; if (not odd(p)) or (p<3) then continue; if pos(s[1],gl)=0 then continue; if pos(s[sered],gl)=0 then continue; if pos(s[p],gl)=0 then continue; s[1]:=UpCase(s[1]); s[sered]:=UpCase(s[sered]); s[p]:=UpCase(s[p]); m[i]:=s+'('+s[1]+','+s[sered]+','+s[p]+')'; end; s:=''; for i:=1 to n do s:=s+m[i]+' '; preobr:=s;end; beginassign(f,'input.txt'); reset(f);assign(t,'output.txt'); rewrite(t); while not eof(f) do begin readln(f,s); writeln(t, preobr(s) ); end; writeln('Файл успешно записан...'); close(f);close(t);readln;end.
В алгебре логики различают три вида логических операций:
Конъюкция - это логическое умножение, обозначается &, ^, И
Дизъюнкция - это логическое сложение, обозначается ∨, I, ИЛИ, +
Инверсия - это логическое отрицание(т.е., если у нас 0, то с инверсии у нас получится 1), обозначаем ее как HE, ¬, -
Логические операции имеют свой порядок: сначала инверсия, потом конъюкция, потом дизъюнкция.
Давай подсчитаем количество переменных в логическом выражении: это A, B, C, т.е., 3 переменные. Подсчитаем количество действий в этом выражении: 5 действий.
Сложим кол-во действий и кол-во переменных и получим количество столбцов в таблице.
3 + 5 = 8 столбцов.
Теперь определим количество строк в таблице. Для этого воспользуемся формулой m = 2^n.
m = 2^3 = 8 строк в таблице, не считая шапки таблицы.
Чертим таблицу:
A B C A ^ B B ^ C A ^ C A^B∨B B^C∨A
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
1 1 0 1 0 0 1 1
1 0 1 0 0 1 0 1
0 1 1 0 1 0 1 1
1 1 1 1 1 1 1 1
Расставим порядок действий: первым действием у нас будет A ^ B, так как конъюкция первее дизъюнкции.
Вторым действием будет B ^ C по выше сказанной причине.
Третьим действием будет A ^ C
Четвертым действием A ^ B ∨ B
Пятым действием будет B ^ C ∨ A
В таблице будет только две цифры - 0 и 1. В первых трех действиях конъюкция(лог.умножение), т.е. мы будем умножать 0 и 1. В последних двух действиях - конъюкция с дизъюнкцией, т.е. сначала будем умножать B на C и прибавлять к A. (Если алгебру знаешь - справишься).
Задача решена.
P.S Если у всех троих переменных 0 - то во всех логических действиях у них будет результат, равный нулю. Тоже самое и с ситуацией, когда все три переменные равны 1.
function preobr(s:string):string;var i,j,p,n,sered:integer; gl,zp,slovo:string; m:array [1..80] of string;beginzp:='!?*,.'; gl:='аоуыэяеёюи'; p:=pos(' ',s); i:=0; repeat inc(i); slovo:=copy(s,1,p-1); m[i]:=slovo; delete(s,1,p); p:=pos(' ',s); until p=0; n:=i+1; m[n]:=s; for i:=1 to n do begin s:=m[i]; if pos(s[length(s)],zp)<>0 then p:=length(s)-1 else p:=length(s); sered:=(p div 2)+1; if (not odd(p)) or (p<3) then continue; if pos(s[1],gl)=0 then continue; if pos(s[sered],gl)=0 then continue; if pos(s[p],gl)=0 then continue; s[1]:=UpCase(s[1]); s[sered]:=UpCase(s[sered]); s[p]:=UpCase(s[p]); m[i]:=s+'('+s[1]+','+s[sered]+','+s[p]+')'; end; s:=''; for i:=1 to n do s:=s+m[i]+' '; preobr:=s;end;
beginassign(f,'input.txt'); reset(f);assign(t,'output.txt'); rewrite(t); while not eof(f) do begin readln(f,s); writeln(t, preobr(s) ); end; writeln('Файл успешно записан...'); close(f);close(t);readln;end.
Объяснение:
A ^ B ∨ B ^ C ∨ A ^ C
В алгебре логики различают три вида логических операций:
Конъюкция - это логическое умножение, обозначается &, ^, И
Дизъюнкция - это логическое сложение, обозначается ∨, I, ИЛИ, +
Инверсия - это логическое отрицание(т.е., если у нас 0, то с инверсии у нас получится 1), обозначаем ее как HE, ¬, -
Логические операции имеют свой порядок: сначала инверсия, потом конъюкция, потом дизъюнкция.
Давай подсчитаем количество переменных в логическом выражении: это A, B, C, т.е., 3 переменные. Подсчитаем количество действий в этом выражении: 5 действий.
Сложим кол-во действий и кол-во переменных и получим количество столбцов в таблице.
3 + 5 = 8 столбцов.
Теперь определим количество строк в таблице. Для этого воспользуемся формулой m = 2^n.
m = 2^3 = 8 строк в таблице, не считая шапки таблицы.
Чертим таблицу:
A B C A ^ B B ^ C A ^ C A^B∨B B^C∨A
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
1 1 0 1 0 0 1 1
1 0 1 0 0 1 0 1
0 1 1 0 1 0 1 1
1 1 1 1 1 1 1 1
Расставим порядок действий: первым действием у нас будет A ^ B, так как конъюкция первее дизъюнкции.
Вторым действием будет B ^ C по выше сказанной причине.
Третьим действием будет A ^ C
Четвертым действием A ^ B ∨ B
Пятым действием будет B ^ C ∨ A
В таблице будет только две цифры - 0 и 1. В первых трех действиях конъюкция(лог.умножение), т.е. мы будем умножать 0 и 1. В последних двух действиях - конъюкция с дизъюнкцией, т.е. сначала будем умножать B на C и прибавлять к A. (Если алгебру знаешь - справишься).
Задача решена.
P.S Если у всех троих переменных 0 - то во всех логических действиях у них будет результат, равный нулю. Тоже самое и с ситуацией, когда все три переменные равны 1.