Логическая задача Prolog - Prolog (226274)

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, решить логическую задачу.
Болельщики футбольных команд делали прогнозы об итогах соревнований «Турнир четырех»: — Я уверен, что Спартак будет чемпионом, а ЦСКА займет последнее место — сказал Иван. — Что ты, Спартак выше третьего не поднимется, а ЦСКА станет вторым — возразил Сергей. — Чемпионом будет Динамо, а ЦСКА войдет в тройку сильнейших — сделал свой прогноз Петр. — Динамо будет вторым, а вот Ротор точно будет последним — промолвил Алексей. Выяснилось, что каждый из болельщиков был прав в одном прогнозе и ошибся во втором. Как распределились места, занятые командами?
Проблема в том, что нужно и учесть условие "каждый из болельщиков был прав в одном прогнозе и ошибся во втором" и установить между названием команды-местом взаимнооднозначное соответствие. Добавлял объекты для обозначения различных болельщиков, чтобы условие учесть, но тогда соответствия нет, и выводятся лишние варианты. В итоге додумался только сгруппировать в утверждениях условия для каждой команды, но это, очевидно, просто перебор всех вариантов с такими условиями:
Листинг программы
  1. PREDICATES
  2. nondeterm соответствие(string, integer)
  3. nondeterm название(string)
  4. nondeterm место(integer)
  5. nondeterm решение(string, string, string, string, integer, integer, integer, integer)
  6. CLAUSES
  7. название("ЦСКА").
  8. название("Спартак").
  9. название("Динамо").
  10. название("Ротор").
  11. место(1).
  12. место(2).
  13. место(3).
  14. место(4).
  15. соответствие(X, Y) :- название(X), X = "Спартак", место(Y), Y = 1; название(X), X = "Спартак", место(Y), not(Y = 1), not(Y = 2).
  16. соответствие(X, Y) :- название(X), X = "ЦСКА", место(Y), Y = 2; название(X), X = "ЦСКА", место(Y), Y = 4; название(X), X = "ЦСКА", место(Y), not(Y = 4).
  17. соответствие(X, Y) :- название(X), X = "Динамо", место(Y), Y = 1; название(X), X = "Динамо", место(Y), Y = 2; название(X), X = "Динамо", место(Y), not(Y = 2), not(Y = 1).
  18. соответствие(X, Y) :- название(X), X = "Ротор", место(Y), Y = 4; название(X), X = "Ротор", место(Y), not(Y = 4).
  19. решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4) :- X1 = "ЦСКА", соответствие(X1, Y1), X2 = "Спартак", соответствие(X2, Y2),
  20. X3 = "Динамо", соответствие(X3, Y3), X4 = "Ротор", соответствие(X4, Y4),
  21. Y1 <> Y2, Y1 <> Y3, Y1 <> Y4, Y2 <> Y3, Y2 <> Y4, Y3 <> Y4.
  22. GOAL
  23. решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4).
Ещё есть мысль использовать database, но, наверное, это можно решить и без динамической БД.

Решение задачи: «Логическая задача Prolog»

textual
Листинг программы
  1. PREDICATES
  2. nondeterm соответствие(symbol, string, string, integer, integer)
  3. nondeterm название(string)
  4. nondeterm место(integer)
  5. nondeterm решение(string, string, string, string, integer, integer, integer, integer)
  6.  
  7. CLAUSES
  8. название("Спартак").
  9. название("ЦСКА").
  10. название("Динамо").
  11. название("Ротор").
  12.  
  13. место(1).
  14. место(2).
  15. место(3).
  16. место(4).
  17.  
  18. соответствие(a, X1, X2, Y1, Y2) :- название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА",
  19.                    место(Y1), Y1 = 1, место(Y2), Y2 <> 4;
  20.                    название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА",
  21.                    место(Y1), Y1 <> 1, место(Y2), Y2 = 4.
  22.                    
  23. соответствие(b, X1, X2, Y1, Y2) :- название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА",
  24.                    место(Y1), Y1 <> 1, Y1 <> 2, место(Y2), Y2 <> 2;
  25.                    название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА",
  26.                    место(Y1), Y1 <> 3, Y1 <> 4, место(Y2), Y2 = 2.
  27.                    
  28. соответствие(c, X3, X2, Y3, Y2) :- название(X3), X3 = "Динамо", название(X2), X2 = "ЦСКА",
  29.                    место(Y3), Y3 = 1, место(Y2), Y2 = 4;
  30.                    название(X3), X3 = "Динамо", название(X2), X2 = "ЦСКА",
  31.                    место(Y3), Y3 <> 1, место(Y2), Y2 <> 4.
  32.                    
  33. соответствие(d, X3, X4, Y3, Y4) :- название(X3), X3 = "Динамо", название(X4), X4 = "Ротор",
  34.                    место(Y3), Y3 = 2, место(Y4), Y4 <> 4;
  35.                    название(X3), X3 = "Динамо", название(X4), X4 = "Ротор",
  36.                    место(Y3), Y3 <> 2, место(Y4), Y4 = 4.
  37.  
  38. решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4) :- X2 = "ЦСКА", X1 = "Спартак", X3 = "Динамо", X4 = "Ротор",
  39.                        соответствие(a, X1, X2, Y1, Y2), соответствие(b, X1, X2, Y1, Y2),
  40.                        соответствие(c, X3, X2, Y3, Y2), соответствие(d, X3, X4, Y3, Y4),
  41.                        Y1 <> Y2, Y1 <> Y3, Y1 <> Y4, Y2 <> Y3, Y2 <> Y4, Y3 <> Y4.
  42. GOAL
  43. решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут