Обозначим за П значение утверждения "Петя ел", за В - значение утверждения "Вася ел", а за М значение утверждения "Маша ела".
Первое Петино высказывание: "Я не ел". Значение этого высказывания противоположно П. Действительно, если П равно 1, то Петя ел варенье, тогда первое Петино утверждение неверно; если же П равно 0, то Петя не ел варенье, значит, Петя сказал правду.
Таким образом, значение первого Петиного высказывания равно
Аналогичными рассуждениями можно показать, что значения второго Петиного высказывания и первого Васиного высказывания равны , второго Васиного высказывания равно П, второго Машиного высказывания равно В.
Осталось оценить первое утверждение Маши: "Вася врет". Оно означает, что Васино высказывание неверно, то есть что выражение (П) ложно. Получается, что значение первого Машиного утверждения равно значению выражения
Составим таблицу истинности для высказываний всех детей:
Объяснение:
Петя ел ел Вася ел Маша ела Петины утверж
Вас утверины
Машины утвержд.
П В М
П
В
0 0 0 1 1 1 0 1 0
0 0 1 1 0 0 0 1 0
0 1 0 1 1 1 0 1 1
0 1 1 1 0 0 0 1 1
1 0 0 0 1 1 1 0 0
1 0 1 0 0 0 1 1 0
1 1 0 0 1 1 1 0 1
1 1 1 0 0 0 1 1 1
Нас интересуют те варианты значений П, В и М, при которых два ребенка сказали правду, а третий - один раз соврал, а один раз сказал правду. Такие варианты соответствуют тем строкам таблицы, которые имеют пять единиц и один ноль в шести последних колонках.
Таких строк в таблице только одна (третья), соответствующая значениям П = 0, В = 1, М == 0.
За П мы обозначили значение утверждения "Петя ел". П = 0 означает, что это утверждение ложно, то есть Петя не ел варенье.
В = 1 означает, что утверждение "Вася ел" истинно, то есть Вася ел варенье.
М = О означает, что утверждение "Mania ела" ложно, то есть Маша не ела варенье.
Получается, что условие задачи (2 ребенка сказали правду, а третий один раз соврал) выполняется только для ситуации, в которой Петя и Маша не ели варенье, а Вася ел.
ответ. Варенье ел Вася, так как только при одном (третьем) варианте возможных значений ответ двоих - 1 и 1, а ответ одного - 0 и 1.
{ FreePascal 2.6.4}
program test;
uses
crt;
var
a, b, c, d : integer;
f : longint;
procedure swap (var x : integer; var y : integer);
var z : integer;
begin
z := x;
x := y;
y := z;
end;
function nod (m, n : integer) : integer;
begin
while m<>n do begin
if m>n
then
m:=m-n
else
n:=n-m;
end;
nod := m;
end;
function max (a,b : integer) : integer;
begin
if a>b
then max := a
else max := b;
end;
function min (x, y, z : integer) : integer;
var m : integer;
begin
m := x;
if y<m then m := y;
if z<m then m := z;
min := m;
end;
function mypow (a, b : integer) : integer;
var e, f : integer;
begin
f := 1;
for e:=1 to b do f := f*a;
mypow := f;
end;
function fact(a : integer) : longint;
var
i : integer;
res : longint;
begin
res := 1;
for i := 1 to a do res := res*i;
fact := res;
end;
begin
clrscr;
writeln('Test of function SWAP');
write('Input A: ');
readln(a);
write('Input B: ');
readln(b);
swap(a, b);
writeln('A=', a, ', B=', b);
writeln;
writeln('Test of function NOD');
write('Input A: ');
readln(a);
write('Input B: ');
readln(b);
c := nod(a, b);
writeln('NOD(', a, ',', b, ')=', c);
writeln;
writeln('Test of function MAX');
write('Input A: ');
readln(a);
write('Input B: ');
readln(b);
c := max(a, b);
writeln('MAX(', a, ',', b, ')=', c);
writeln;
writeln('Test of function MIN');
write('Input A: ');
readln(a);
write('Input B: ');
readln(b);
write('Input C: ');
readln(c);
d := min(a, b, c);
writeln('MIN(', a, ',', b, ',', c, ')=', d);
writeln;
writeln('Test of function POW');
write('Input A: ');
readln(a);
write('Input B: ');
readln(b);
c := mypow(a, b);
writeln('POW(', a, ',', b, ')=', c);
writeln;
writeln ('Test of function FACT (not large than 12!)');
write('Input A: ');
readln(a);
f := fact(a);
writeln(a, '!=', f);
writeln;
readkey;
end.