Найти фамилии студентов данной группы, которые получили максимальный балл (программа не запускается) - Prolog

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

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

дана инф ввиде:ФИО,группа,балл. найти фамилии студентов данной группы,которые получили максимальный балл
Листинг программы
  1. FIO = string
  2. PREDICATES
  3. student(FIO,Gr,Ball).
  4. nondeterm max(List,integer).
  5. CLAUSES
  6. student("Krjanovskaya Oksana ", "IVT", 80).
  7. student("Chaichenko Anna", "IVT" ,81).
  8. student("Smolenkaya Marina", "IVT", 82).
  9. student("Gudkova Tatiana", "IVT", 83).
  10. student("Kirillov Vladislav", "IVT", 84).
  11. student("Aitbaeva Zarina", "IVT", 85).
  12. student("Satutybalbaev Tilek", "IVT", 86).
  13. student("Sadirov Ernazar", "IVT", 87).
  14. student("Mukaev Temirlan", "IVT", 88).
  15. student("Bulanbekov Erlan", "IVT", 89).
  16. max([X],X).
  17. max([H|Tail],H):-max(Tail,M),H>M,!.
  18. max([_|Tail],M):-max(Tail,M).
  19. GOAL
  20. findall(student(FIO,Gr,Ball),L),max(L,X),write(X),nl,student(Name,Gr,X).DOMAINS

Решение задачи: «Найти фамилии студентов данной группы, которые получили максимальный балл (программа не запускается)»

textual
Листинг программы
  1. Domains
  2. intl=integer*
  3.  
  4. PREDICATES
  5.  
  6. student(string,string,integer).
  7. nondeterm max(intl,integer).
  8.  
  9. CLAUSES
  10.  
  11. student("Krjanovskaya Oksana ", "IVT", 80).
  12. student("Chaichenko Anna", "IVT" ,81).
  13. student("Smolenkaya Marina", "IVT", 82).
  14. student("Gudkova Tatiana", "IVT", 83).
  15. student("Kirillov Vladislav", "IVT", 84).
  16. student("Aitbaeva Zarina", "IVT", 85).
  17. student("Satutybalbaev Tilek", "IVT", 86).
  18. student("Sadirov Ernazar", "IVT", 87).
  19. student("Mukaev Temirlan", "IVT", 88).
  20. student("Bulanbekov Erlan", "IVT", 89).
  21.  
  22. max([X],X).
  23. max([H|Tail],H):-max(Tail,M),H>M,!.
  24. max([_|Tail],M):-max(Tail,M).
  25.  
  26. GOAL
  27. findall(Ball,student(FIO,Gr,Ball),L),max(L,X),write(X),nl,student(Name,Gr,X),write(Name),nl.

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

  1. В коде используется язык программирования Prolog.
  2. Код содержит два основных блока: определение доменов и определение предикатов.
  3. Домен intl определен как integer*, что означает, что он может содержать любое количество целых чисел.
  4. Предикат student определен как student(string,string,integer), где первые два аргумента являются строками (именем и фамилией студента), а третий аргумент - целым числом (баллом студента).
  5. В блоке clauses определены студенты группы с их именами, фамилиями и баллами.
  6. Предикат max определен для нахождения максимального значения в списке целых чисел.
  7. В блоке goals определена задача: найти фамилии студентов с максимальным баллом и вывести их на экран.
  8. Для решения задачи используется функция findall, которая ищет все значения, удовлетворяющие заданному предикату (студенты с максимальным баллом), а затем функция max используется для нахождения максимального значения в полученном списке.
  9. Затем фамилии студентов с максимальным баллом выводятся на экран с помощью функции write.

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


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

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

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

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

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

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