Решить с или таблицы истинности или логического выражения, или методом от противного (каждая должна быть решена двумя из указанных методов) 15. а) три школьника, миша (м), коля (к) и сергей (с), остававшиеся в классе на перемене, были вызваны к директору по поводу разбитого в это время окна в кабинете. на вопрос директора о том, кто это сделал, мальчики ответили следующее: миша: «я не бил окно, и коля » коля: «миша не разбивал окно, это сергей разбил футбольным мячом! » сергей: «я не делал этого, стекло разбил миша». стало известно, что один из сказал чистую правду, второй в одной части заявления соврал, а другое его высказывание истинно, а третий оба факта исказил. зная это, директор смог докопаться до истины. кто разбил стекло в классе? б) в поездке пятеро друзей — антон, борис, вадим, дима и гриша, знакомились с попутчицей. они предложили ей отгадать их фамилии, причём каждый из них высказал одно истинное и одно ложное утверждение: 24 дима сказал: "моя фамилия — молотов, а фамилия бориса — хрущев". антон сказал: "молотов — это моя фамилия, а фамилия вадима — брежнев". борис сказал: "фамилия вадима — тихонов, а моя фамилия — молотов". вадим сказал: "моя фамилия — брежнев, а фамилия гриши — чехов". гриша сказал: "да, моя фамилия чехов, а фамилия антона — тихонов". какую фамилию носит каждый из друзей? в) правильно ли рассуждение: если джонс не встречал ночью смита, то смит был убийцей или джонс лжет. если смит не был убийцей, то джонс не встречал смита этой ночью, и убийство имело место после полуночи. если убийство имело место после полуночи, то смит был убийцей или джонс не лжет. следовательно, смит был убийцей.
procedure Analyze(n: integer; var sd: integer; var has2: boolean);
{Для заданного целого n возвращает:
sd - сумму цифр в шестнадцатиричном представлении;
has2 - true, если среди шестнадцитиричных цифр имеется хотя бы одна двойка.}
const
mask = $00F;
var
i, r: integer;
begin
has2 := false;
sd := 0;
for i := 1 to 3 do
begin
r := (n and mask);
has2 := (has2 or (r = 2));
sd := sd + r;
n := (n shr 4);
end
end;
function IsSuitable(n: integer): Boolean;
{Проверяет, удовлетворяет ли число n набору условий}
var
s1, s2: integer;
has2, stub: boolean;
begin
Analyze(n, s1, has2);
Analyze(2 * n, s2, stub);
IsSuitable := ((s1 = s2) and has2)
end;
var
i, n: integer;
begin
n := 0;
for i := $100 to $7FF do
if IsSuitable(i) then n := n + 1;
Writeln('Найдено чисел- ', n)
end.
Результат выполнения программы:
Найдено чисел- 23