// PascalABC.NET 3.0, сборка 1076 type Point=record x,y:real end; Line=record A,B:Point end; Triangle=record A,B,C:Point; sa,sb,sc:real; { длины сторон } end;
procedure GetPoint(PointName:char; var M:Point); begin Write('Введите координаты точки ',PointName,'(x,y): '); Read(M.x,M.y) end;
function LineLength(A,B:Point):real; begin LineLength:=sqrt(sqr(B.x-A.x)+sqr(B.y-A.y)) end;
procedure CreateTriangle(var T:Triangle; var l:boolean); begin With T do begin GetPoint('A',A); GetPoint('B',B); GetPoint('C',C); sa:=LineLength(B,C); sb:=LineLength(A,C); sc:=LineLength(A,B); l:=(sa+sb>sc) and (sa+sc>sb) and (sb+sc>sa) end end;
function TriangleIsLikes(T1,T2:Triangle):boolean; var k1,k2,k3:real; begin k1:=T1.sa/T2.sa; k2:=T1.sb/T2.sb; if k1=k2 then begin k3:=T1.sc/T2.sc; TriangleIsLikes:=k1=k3 end else TriangleIsLikes:=False end;
var T1,T2:Triangle; legal:boolean; begin Writeln('*** Первый треугольник ***'); CreateTriangle(T1,legal); if legal then begin Writeln('*** Второй треугольник ***'); CreateTriangle(T2,legal); if legal then if TriangleIsLikes(T1,T2) then Writeln('Треугольники подобны') else Writeln('Треугольники не подобны') else Writeln('Треугольник невозможно построить') end else Writeln('Треугольник невозможно построить') end.
Обозначим за П значение утверждения "Петя ел", за В - значение утверждения "Вася ел", а за М значение утверждения "Маша ела".
Первое Петино высказывание: "Я не ел". Значение этого высказывания противоположно П. Действительно, если П равно 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.
type
Point=record
x,y:real
end;
Line=record
A,B:Point
end;
Triangle=record
A,B,C:Point;
sa,sb,sc:real; { длины сторон }
end;
procedure GetPoint(PointName:char; var M:Point);
begin
Write('Введите координаты точки ',PointName,'(x,y): ');
Read(M.x,M.y)
end;
function LineLength(A,B:Point):real;
begin
LineLength:=sqrt(sqr(B.x-A.x)+sqr(B.y-A.y))
end;
procedure CreateTriangle(var T:Triangle; var l:boolean);
begin
With T do begin
GetPoint('A',A);
GetPoint('B',B);
GetPoint('C',C);
sa:=LineLength(B,C);
sb:=LineLength(A,C);
sc:=LineLength(A,B);
l:=(sa+sb>sc) and (sa+sc>sb) and (sb+sc>sa)
end
end;
function TriangleIsLikes(T1,T2:Triangle):boolean;
var
k1,k2,k3:real;
begin
k1:=T1.sa/T2.sa; k2:=T1.sb/T2.sb;
if k1=k2 then begin
k3:=T1.sc/T2.sc;
TriangleIsLikes:=k1=k3
end
else
TriangleIsLikes:=False
end;
var
T1,T2:Triangle;
legal:boolean;
begin
Writeln('*** Первый треугольник ***');
CreateTriangle(T1,legal);
if legal then begin
Writeln('*** Второй треугольник ***');
CreateTriangle(T2,legal);
if legal then
if TriangleIsLikes(T1,T2) then Writeln('Треугольники подобны')
else Writeln('Треугольники не подобны')
else Writeln('Треугольник невозможно построить')
end
else Writeln('Треугольник невозможно построить')
end.
Обозначим за П значение утверждения "Петя ел", за В - значение утверждения "Вася ел", а за М значение утверждения "Маша ела".
Первое Петино высказывание: "Я не ел". Значение этого высказывания противоположно П. Действительно, если П равно 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.