Найти фамилии студентов данной группы, которые получили максимальный балл (программа не запускается) - Prolog
Формулировка задачи:
дана инф ввиде:ФИО,группа,балл. найти фамилии студентов данной группы,которые получили максимальный балл
Листинг программы
- FIO = string
- PREDICATES
- student(FIO,Gr,Ball).
- nondeterm max(List,integer).
- CLAUSES
- student("Krjanovskaya Oksana ", "IVT", 80).
- student("Chaichenko Anna", "IVT" ,81).
- student("Smolenkaya Marina", "IVT", 82).
- student("Gudkova Tatiana", "IVT", 83).
- student("Kirillov Vladislav", "IVT", 84).
- student("Aitbaeva Zarina", "IVT", 85).
- student("Satutybalbaev Tilek", "IVT", 86).
- student("Sadirov Ernazar", "IVT", 87).
- student("Mukaev Temirlan", "IVT", 88).
- student("Bulanbekov Erlan", "IVT", 89).
- max([X],X).
- max([H|Tail],H):-max(Tail,M),H>M,!.
- max([_|Tail],M):-max(Tail,M).
- GOAL
- findall(student(FIO,Gr,Ball),L),max(L,X),write(X),nl,student(Name,Gr,X).DOMAINS
Решение задачи: «Найти фамилии студентов данной группы, которые получили максимальный балл (программа не запускается)»
textual
Листинг программы
- Domains
- intl=integer*
- PREDICATES
- student(string,string,integer).
- nondeterm max(intl,integer).
- CLAUSES
- student("Krjanovskaya Oksana ", "IVT", 80).
- student("Chaichenko Anna", "IVT" ,81).
- student("Smolenkaya Marina", "IVT", 82).
- student("Gudkova Tatiana", "IVT", 83).
- student("Kirillov Vladislav", "IVT", 84).
- student("Aitbaeva Zarina", "IVT", 85).
- student("Satutybalbaev Tilek", "IVT", 86).
- student("Sadirov Ernazar", "IVT", 87).
- student("Mukaev Temirlan", "IVT", 88).
- student("Bulanbekov Erlan", "IVT", 89).
- max([X],X).
- max([H|Tail],H):-max(Tail,M),H>M,!.
- max([_|Tail],M):-max(Tail,M).
- GOAL
- findall(Ball,student(FIO,Gr,Ball),L),max(L,X),write(X),nl,student(Name,Gr,X),write(Name),nl.
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Код содержит два основных блока: определение доменов и определение предикатов.
- Домен intl определен как integer*, что означает, что он может содержать любое количество целых чисел.
- Предикат student определен как student(string,string,integer), где первые два аргумента являются строками (именем и фамилией студента), а третий аргумент - целым числом (баллом студента).
- В блоке clauses определены студенты группы с их именами, фамилиями и баллами.
- Предикат max определен для нахождения максимального значения в списке целых чисел.
- В блоке goals определена задача: найти фамилии студентов с максимальным баллом и вывести их на экран.
- Для решения задачи используется функция findall, которая ищет все значения, удовлетворяющие заданному предикату (студенты с максимальным баллом), а затем функция max используется для нахождения максимального значения в полученном списке.
- Затем фамилии студентов с максимальным баллом выводятся на экран с помощью функции write.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д