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

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

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

болельщики автогонок "Формула-1", спорили о результатах предстоящего этапа гонок. — Вот увидишь, Шумахер не придет первым, — сказал Дима. Первым будет Хилл. — Да нет же, победителем будет, как всегда, Шумахер, — воскликнул Никита. — А об Алези и говорить нечего, ему не быть первым. Паша, к которому обратился Никита, возмутился: — Хиллу не видать первого места, а вот Алези пилотирует самую мощную машину. По завершении этапа гонок оказалось, что каждое из двух предположений двоих друзей подтвердилось, а оба предположения третьего из друзей оказались неверны. Кто выиграл этап гонки?

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

textual
Листинг программы
  1. % Вот увидишь, Шумахер не придет первым, сказал Дима.
  2. approve(dima, shum, no).
  3. % Первым будет Хилл.
  4. approve(dima, hill, yes).
  5. % Да нет же, победителем будет, как всегда, Шумахер, воскликнул Никита.
  6. approve(nik, shum, yes).
  7. % А об Алези и говорить нечего, ему не быть первым.
  8. approve(nik, alesi, no).
  9. % Паша, к которому обратился Никита, возмутился:
  10. % Хиллу не видать первого места,
  11. approve(pasha, hill, no).
  12. % а вот Алези пилотирует самую мощную машину.
  13. approve(pasha, alesi, yes).
  14.  
  15. % По завершении этапа гонок оказалось, что каждое из двух предположений двоих
  16. % друзей подтвердилось, а оба предположения третьего из друзей оказались неверны.
  17. % Кто выиграл этап гонки?
  18. win_race1(Win) :-
  19.   % если один из болельщиков назвал пилота-победителя правильно
  20.   approve(Fan1, Win, yes),
  21.   % и не назвал иначе
  22.   \+ approve(Fan1, Win, no),
  23.   % то другой
  24.   approve(Fan2, _, _),
  25.   % угадал так же,
  26.   approve(Fan2, Win, yes),
  27.   % и, не говорил, что этот пилот не победит
  28.   \+ approve(Fan2, Win, no),
  29.   % а третий
  30.   approve(Fan3, _, _),
  31.   % утверждал, что выигравший пилот не будет победителем,
  32.   approve(Fan3, Win, no),
  33.   % и также не утверждал, что будет
  34.   \+ approve(Fan3, Win, yes),
  35.   % рассуждения вели разные болельщики
  36.   is_distinct([Fan1, Fan2, Fan3]).
  37.  
  38. % все элементы списка разные
  39. is_distinct([]).
  40. is_distinct([H | T]) :-
  41.   \+ member1(H, T),
  42.   !,
  43.   is_distinct(T).
  44.  
  45. % принадлежность
  46. member1(X,[X|_]).
  47. member1(X,[_|T]):-
  48.     member1(X,T).

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

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

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


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

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

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

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

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

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