Разбирается дело Джона, Брауна и Смита. Известно, что один из них нашёл и утаил клад. На следствии каждый из подозреваемых сдела
л два заявления: Смит: «Я не делал этого. Браун сделал это». Джон: «Браун не виновен. Смит сделал это». Браун: «Я не делал этого. Джон не делал этого». Суд установил, что один из них дважды солгал, другой дважды сказал правду, третий один раз солгал, один раз сказал правду. Кто из подозреваемых должен быть оправдан?
Классическая задача про рыцарей, лжецов и нормальных людей. Есть шесть высказываний, три пары по два. Следовательно, у нас 6 вариантов развития событий, т.к. каждый из них может быть либо лжецом, либо рыцарем (всегда говорящим правду), либо нормальным (который и так и так). Перейдем к символьным обозначениям. A: A невиновен, С виновен B: С невиновен, A виновен С: С невиновен, B невиновен Для начала, С не может быть лжецом, т.к. в противном случае он бы утверждал, что и В и С виновны. Далее, если С говорит правду, то А виновен, и В придется ему противоречить, т.к. если В лжец, то С виновен, а мы знаем, что виновен А, а если В нормальный, либо А и С виновный, чего быть не может, либо А и С невиновны, что противоречит С. Получаем, что С нормальный. Тогда либо В правда, тогда А виновен, и лжец, и это вызовет противоречие с С (из его слов выходит, что либо В, либо С виновен). Либо А правда, тогда С виновен, и В лжец, что противоречий не вызывает. Ответ таков - А сказал правду оба раза, В лжец, а С один раз соврал и один раз сказал правду. И при этом С утаил клад. Тогда можно спокойно отпускать Смита и Джона.
Program Table; uses math; //подключаем математический модуль, возможно с модулем я ошибся var // объявляем локальные переменные для программы a , b, h : Real; //указывает дробный тип числа
function calculate_f( x: Real) : Real; //объявляем функцию в теле программы begin calculate_f := 1/2*sin(x/4+1) ; //записываем результат вычисления в функцию end;
Begin a := -0.99; //определяем b := 50.0; //вводные h := 0.1; //значения
while a < b do begin //пока "a" меньше "b" writeln("F(", a, ') = ', calculate_f(a)); //выводим результат вычислений в строку a := a + h; //прибавляем шаг "h" end; end.
Я могу и ошибиться, потому что писал на Паскале оочень давно :D Поэтому Вам прийдется поправить некоторые ошибки в коде.