Розв’язання: Для розв’язку задачі згадаємо логічні операції, які ми розглядали раніше. З розглянутих операцій для розв’язку даної задані нам будуть потрібні операції not, and і or. Запишемо висловлення хлопчиків при допомозі цих операцій, ввівши попередньо наступні позначення:
А = {монета грецька},
B = {монета фінікійська},
C = {монету викарбувано в ІІІ столітті},
D = {монету викарбувано в ІV столітті },
E = {монету викарбувано в V столітті }.
Крім того використаємо для зменшення кількості записів такі позначення логічних операцій, які прийнято в алгебрі логіки, а саме:
n not (A) Ы
n A and B Ы A&B
n A or B Ы AЪ B
Використовуючи домовленості, запишемо висловлювання юних нумізматів на мові алгебри логіки:
A&E – слова Юрка,
В &С – слова Сашка,
Ъ D – слова Михайла.
Зі слів вчителя історії випливає, що кожне з цих висловлень хибне, так як кожен з хлопчиків вірно висловив лише половину свого висловлення. Що це значить? Припустимо, що Юрко вірно вказав, що монета грецька (А = 1), але помилився в часі її виготовлення (Е = 0). Якщо ж він не правий в тому, що монета грецька (А = 0), то вірно вказав час виготовлення (Е = 1). Звідси випливає, що
А & Ъ & Е = 1.
Проводячи аналогічні міркування для висловлень Сашка та Михайла, отримаємо ще два істинних складних висловлення:
В & Ъ & C = 1
& Ъ A & D = 1.
Якщо ж ці висловлювання логічно перемножити, то отримаємо істинне складне висловлення:
(А & Ъ & Е) & (В & Ъ & C) & ( & Ъ A & D) = 1
Розкриваємо дужки, тобто спрощуємо отриманий складний вираз:
А & & B & & & Ъ A & & B & & A & D Ъ
А & & & C & & Ъ A & & & C & A & D Ъ
& E & B & & & Ъ & E & B & & A & D Ъ
& E & &C & & Ъ & E & B & C & A & D = 1.
Так як А & = 0 (монета не може бути одночасно і грецькою і не грецькою), то будуть рівні нулю (будуть хибними) і вирази:
А & & B & & & = 0
А & & & C & & = 0
& E & B & & A & D = 0
& E & B & C & A & D = 0
Крім того, з умови випливає, що:
так як A & B = 0, то A & & B & & A & D = 0,
C & D = 0, то A & & & C & A & D = 0,
E & C = 0, то & E & &C & & = 0.
(З яких даних умови це випливає?)
Тому залишається єдина відповідь:
& E & B & & & = 1, тобто істинними є висловлення В і Е.
Програмна реалізація даного розв’язку з виведенням станів всіх логічних змінних і відповідних повідомлень приведена нижче. Крім того під час виконання дана програма будує в пам’яті таблицю істинності для отриманого висловлення. Рекомендуємо Вам модифікувати дану програму для отримання значень таблиці істинності при всіх значеннях змінних.
program logic1;
uses crt;
const a1 = ‘ Монета грецька. ’;
b1 = ‘ Монета фiнiкiйська. ’;
c1 = ‘ Монету викарбувано в III столiттi. ’;
d1 = ‘ Монету викарбувано в IV столiттi. ’;
e1 = ‘ Монету викарбувано в V столiттi. ’;
var
a,b,c,d,e: boolean;
function answer: boolean;
begin
answer:= (not (a)) and (e) and (b) and (not(c)) and (not a) and (not d);
end;
begin
clrscr;
for a:= false to true do
for b:= false to true do
for c:= false to true do
for d:= false to true do
for e:= false to true do
begin
if answer = true then
begin
writeln(a,‘ ’,b,‘ ’,c,‘ ’,d,‘ ’,e,‘ ’,answer);
if a = true then writeln(a1);
if b = true then writeln(b1);
if c = true then writeln(c1);
if d = true then writeln(d1);
if e = true then writeln(e1);
end;
end;
writeln;
readln;
end.
Перед тим, як перейти до наступної задачі, спробуйте задати функцію answer таким чином, щоб в ній не було готового результату, а були лише дані, що отримуються на підставі аналізу умови задачі.
Розглянемо ще одну задачу такого типу. Вона буде цікавою ще й тим, що ми введемо нову логічну операцію, яка в мові Паскаль не визначена.