Кто сказал неправду, и кто был первым на самом деле? - Prolog

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

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

Привет Всем! ПОМОГИТЕ ПОЖАЛУЙСТА решить такую задачу на прологе! Выручайте пожалуйста! Никак не могу решить( Школьник, не силен в прологе. ЗАРАНЕЕ СПАСИБО!!! Четверо ребят — Алексей, Борис, Иван и Григорий — соревновались в беге. На сле- дующий день на вопрос, кто какое место занял, они ответили так : Алексей : «Я не был ни первым, ни последним». Борис : «Я не был последним». Иван : «Я был первым». Григорий : «Я был последним». Известно, что три из этих ответов правильные, а один — неверный. Кто сказал неправду, и кто был первым на самом деле?

Решение задачи: «Кто сказал неправду, и кто был первым на самом деле?»

textual
Листинг программы
  1. /*Четверо ребят — Алексей, Борис, Иван и Григорий — соревновались в беге. На сле-
  2. дующий день на вопрос, кто какое место занял, они ответили так :
  3. Алексей : «Я не был ни первым, ни последним».
  4. Борис : «Я не был последним».
  5. Иван : «Я был первым».
  6. Григорий : «Я был последним».
  7. Известно, что три из этих ответов правильные, а один — неверный.
  8. Кто сказал неправду, и кто был первым на самом деле?
  9. */
  10.  
  11. PREDICATES
  12. nondeterm solve(symbol,symbol,symbol)
  13. nondeterm say(symbol,symbol,symbol)
  14. nondeterm begun(symbol)
  15.  
  16. CLAUSES
  17. %Четверо ребят Алексей, Борис, Иван и Григорий соревновались в беге.
  18. begun(alexey).
  19. begun(boris).
  20. begun(ivan).
  21. begun(grigory).
  22.  
  23. %на вопрос, кто какое место занял, они ответили так:
  24. %сказал Кто, при гипотезе о первом и последнем
  25. say(alexey,First,Last):-not(First=alexey),   не был ни первым,
  26.             not(Last=alexey).   %ни последним
  27.            
  28. say(boris,First,Last):-not(Last=boris).     не был последним
  29.  
  30. say(ivan,First,Last):-First=ivan.   был первым
  31.  
  32. say(grigory,First,Last):-Last=grigory.   был последним
  33.  
  34. solve(First,Last,Liar):-begun(First),begun(Last), First<>Last, %кто-то первый, кто-то последний, но это разные люди
  35.     begun(Liar), %кто-то из четверых солгал
  36.     not(say(Liar,First,Last)), %то, что сказал лжец не должно выполняться
  37.     say(X,First,Last),say(Y,First,Last),X<>Y,   еще должно быть 3 истинных высказывания
  38.     say(Z,First,Last), Z<>X,Z<>Y.           чтобы их было 3, это должны сказать 3 разных человека   
  39.  
  40.        
  41. GOAL
  42. solve(First,Last,Liar).

Объяснение кода листинга программы

Код представляет собой логическую задачу, в которой необходимо определить, кто из четырех участников соревнования сказал неправду и кто на самом деле был первым. В коде используются следующие переменные:

  1. alexey - Алексей
  2. boris - Борис
  3. ivan - Иван
  4. grigory - Григорий
  5. First - Первый
  6. Last - Последний
  7. Liar - Лжец Условие задачи разбито на несколько частей и представлено в виде предложений на языке Prolog. Каждое предложение соответствует одному из участников, который говорит о своем месте в соревнованиях. Например, предложение say(alexey,First,Last):-not(First=alexey), not(Last=alexey) означает, что Алексей говорит, что он не был ни первым, ни последним. Предложение solve(First,Last,Liar):-begun(First),begun(Last), First<>Last, begun(Liar), not(say(Liar,First,Last)), say(X,First,Last),say(Y,First,Last),X<>Y, say(Z,First,Last), Z<>X,Z<>Y используется для определения лжеца. Оно говорит, что если есть участник, который начал гонку, и есть участник, который не был первым и последним, и есть участник, который сказал неправду, то лжец - это тот, кто сказал неправду. Таким образом, чтобы определить, кто сказал неправду и кто на самом деле был первым, необходимо решить задачу, используя предложенный код.

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


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

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

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

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

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

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