130 likes | 461 Views
Решение логических задач. Курсовая работа Агеева Алексея, гимн.№5, 2002 г. Задача №1. Нужно для 4 дежурных -Антипова, Климова, Маркова, и Лебедева-составить график дежурств с соблюдением следующих условий. Условия.
E N D
Решение логических задач Курсовая работа Агеева Алексея, гимн.№5, 2002 г.
Задача №1 • Нужно для 4 дежурных -Антипова, Климова, Маркова, и Лебедева-составить график дежурств с соблюдением следующих условий.
Условия • 1. Если Лебедев не будет дежурить в понедельник, то в понедельник согласен дежурить Климов. • 2. Если Климов не сможет дежурить ни в понедельник, ни в четверг , то Антипов будет дежурить в понедельник. • 3. Если Марков не сможет дежурить в четверг , то Климов будет дежурить в среду. • 4. Если Лебедев придет дежурить во вторник , то Климов не будет дежурить в понедельник. • 5. Если Антиповне сможет дежурить в понедельник, то Марков не сможет дежурить во вторник.
Найти • Каким должен быть график дежурств?
Решение • Введем обозначения: L-Лебедев, K-Климов, А-Антипов, М-Марков. • Цифры означают :1-понедельник, 2- вторник, 3-среда, 4-четверг.
Согласно условиям задачи составим систему логических уравнений • 1. Если Лебедев не будет дежурить в понедельник, то в понедельник согласен дежурить Климов. L1K1 Так как L1K1 равносильно L1+K1 L1K1 L1+K1 По закону двойного отрицания (L1 L1) L1+K1 L1+K1 Сделав все преобразования получаем L1K1 L1+K1 L1+K1-читается как Лебедев дежурит в понедельник или Климов дежурит в понедельник
По закону эквивалентности 1. М4K3 M4+K3Читается так:Марков дежурит в четверг или Климов дежурит в среду 2. L2 K3L2+ K3Читается так: Лебедев не дежурит во вторник или Климов не дежурит в понедельник 3. A1 M2 A1+ M2Читается так: Антипов дежурит в понедельник или Марков не дежурит во вторник
2. Если Климов не сможет дежурить ни в понедельник, ни в четверг, то Антипов будет дежурить в понедельник. (K 1 *K 4) A1 Так как (K 1 *K 4) A1эквивалентно K 1 *K 4+ A1 (K 1 *K 4) A1K 1*K 4+ A1 То по закону де Моргана (K 1*K 4 K 1+K 4) K 1*K 4+ A1 K 1+K 4 + A1 И по закону двойного отрицания (K 1+K 4 K 1+K 4) K 1+K 4 + A1 K 1+K 4 + A1 сделав все преобразования мы получаем (K 1 *K 4) A1 K 1+K 4 + A1 читается так: Климов будет дежурить в понедельник или в четверг или Антипов будет дежурить в понедельник
То обстоятельство,что один и тот же человек не может дежурить дважды и в один день могут дежурить два человека зададим формулами • L2*L1 0 • K1*L1 0 • K1*A1 0 • K4*M4 0 • L1*A1 0
Программа для решения данной задачи (Pascal) program z1; uses crt; var m2,k1,k3,k4,l2,l1,m4,a1,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f:integer; label 1; begin clrscr; for m2:=0 to 1 do begin for k1:=0 to 1 do begin for k3:=0 to 1 do begin for k4:=0 to 1 do begin
for l2:=0 to 1 do begin for l1:=0 to 1 do begin for m4:=0 to 1 do begin for a1:=0 to 1 do begin f1:=(l1 or k1); f2:=(k1 or k4 or a1); f3:=(m4 or k3); f4:=(not l2 or not k1); f5:=(a1 or not m2); f6:=(not(k1 and k3)) and (not(k3 and k4)) and (not (k1 and k4));
f7:=not(l2 and l1); f8:=not(k1 and l1); f9:=not(k1 and a1); f10:=not(k4 and m4); f11:= not (l1 and a1); f:=f1 and f2 and f3 and f4 and f5 and f6 and f7 and f8 and f9 and f10 and f11; if f=1 then goto 1; end;end;end;end;end;end;end; end; 1:writeln('f k1 k3 k4 l1 l2 m2 m4 a1'); writeln(f,k1:3,k3:4,k4:4,l1:4,l2:4,m2:4,m4:4,a1:4); readln end. Запуск программы
K A L M - - - 1 + - - - 2 + - - - + 3 - - - 4 + Анализ ответа Запустив программу мы получили ответ: f1 k1 k3 k4 l1 l2 m2 m4 a1 1 1 0 0 0 0 0 1 0 Из ответа следует:1. Климов дежурит в понедельник 2. Марков дежурит в четверг 3. Лебедев дежурит в среду т.к из ответа следует что тон не дежурит в понедельник не дежурит во вторник 4. Антипов дежурит во вторник