procedure MatInput(M:array[,] of integer); begin var nr:=Length(M,0); var nc:=Length(M,1); WritelnFormat('Введите построчно массив размером {0}x{1}',nr,nc); for var i:=0 to nr-1 do for var j:=0 to nc-1 do Read(M[i,j]); end;
function S(M:array[,] of integer):integer; begin Result:=0; var Zero:integer; for var i:=0 to Length(M,0)-1 do begin Zero:=1; for var j:=0 to Length(M,1)-1 do if M[i,j]=0 then begin Zero:=0; Break end; Result+=Zero; if Result=1 then begin Result:=0; Exit end end; Result:=1 end;
begin var A:=new integer[3,4]; MatInput(A); var B:=new integer[3,3]; MatInput(B); Writeln(S(A)); Writeln(S(B)); end.
Можно заметить, что (J /\ ¬K) = ¬(J → K), тогда выражение превратится в ((J → K) → (M /\ N /\ L)) /\ (¬(J → K) → ¬(M /\ N /\ L)) /\ (M → J)
Сравним две подчёркнутые скобки, они похожи: первая имеет вид A → B, вторая ¬A → ¬B. Обе скобки должны быть одновременно равны 1, откуда A = B. Итак, уравнение можно переписать в виде системы двух уравнений:
(J → K) = (M /\ N /\ L) (M → J) = 1
Если бы J равнялось 0, то система бы решений не имела: из второго уравнения получилось бы, что M = 0, когда первое уравнение вырождается в неверное равенство 1 = 0. Значит, J = 1. Второе уравнение в таком случае выполняется при любых M, а первое имеет вид (1 → K) = (M /\ N /\ L) Если K = 0, то M /\ N /\ L = 0, это выполняется всегда, кроме случая M = N = L = 0 [8 - 1 = 7 решений]. Если K = 1, то M /\ N /\ L = 1, это верно при M = N = L = 1 [1 решение] Всего получается 7 + 1 = 8 решений.
procedure MatInput(M:array[,] of integer);
begin
var nr:=Length(M,0);
var nc:=Length(M,1);
WritelnFormat('Введите построчно массив размером {0}x{1}',nr,nc);
for var i:=0 to nr-1 do
for var j:=0 to nc-1 do
Read(M[i,j]);
end;
function S(M:array[,] of integer):integer;
begin
Result:=0;
var Zero:integer;
for var i:=0 to Length(M,0)-1 do begin
Zero:=1;
for var j:=0 to Length(M,1)-1 do
if M[i,j]=0 then begin Zero:=0; Break end;
Result+=Zero;
if Result=1 then begin Result:=0; Exit end
end;
Result:=1
end;
begin
var A:=new integer[3,4]; MatInput(A);
var B:=new integer[3,3]; MatInput(B);
Writeln(S(A));
Writeln(S(B));
end.
Тестовое решение:
Введите построчно массив размером 3x4
1 2 3 4
5 6 7 8
9 0 1 2
Введите построчно массив размером 3x3
1 2 0
2 0 1
0 1 0
0
1
((J → K) → (M /\ N /\ L)) /\ (¬(J → K) → ¬(M /\ N /\ L)) /\ (M → J)
Сравним две подчёркнутые скобки, они похожи: первая имеет вид A → B, вторая ¬A → ¬B. Обе скобки должны быть одновременно равны 1, откуда A = B. Итак, уравнение можно переписать в виде системы двух уравнений:
(J → K) = (M /\ N /\ L)
(M → J) = 1
Если бы J равнялось 0, то система бы решений не имела: из второго уравнения получилось бы, что M = 0, когда первое уравнение вырождается в неверное равенство 1 = 0. Значит, J = 1. Второе уравнение в таком случае выполняется при любых M, а первое имеет вид
(1 → K) = (M /\ N /\ L)
Если K = 0, то M /\ N /\ L = 0, это выполняется всегда, кроме случая M = N = L = 0 [8 - 1 = 7 решений].
Если K = 1, то M /\ N /\ L = 1, это верно при M = N = L = 1 [1 решение]
Всего получается 7 + 1 = 8 решений.