База данных успеваемости студентов. Список на отчисление.

      Комментарии к записи База данных успеваемости студентов. Список на отчисление. отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Работа с базами данных в Prolog База данных успеваемости студентов. Список на отчисление.

Помечено: ,

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет назад.

  • Автор
    Сообщения
  • #1923

    questioner
    Участник

    Помогите с задачей на swi prolog. Есть база данных успеваемости студентов:
    успеваемость(Предмет,Фамилия,Оценка,Количество попыток)
    Необходимо вывести список студентов на отчисление. Студент отчисляется если не сдал 2 и более предмета.

  • #1924

    Пример записи базы данных:
    успеваемость(математика, 'Петров', 5, 2).

    Я думаю, стоит сначала получить список всех студентов:
    findall(Студент, успеваемость(_Предмет, Студент, _Оценка, _Попыток), Студенты).

    А затем, обходить список и выполнять требуемые проверки:

    отчисление([], []):-!.
    отчисление([Студент|Остальные], [Студент|ОстальныеОтчисленные]):-
      успеваемость(Предмет_1, Студент, 2, _), успеваемость(Предмет_2, Студент, 2, _), 
      Предмет_1 \= Предмет_2, !, 
      отчисление(Остальные, ОстальныеОтчисленные).
    отчисление([_Студент|Остальные], ОстальныеОтчисленные):-
      отчисление(Остальные, ОстальныеОтчисленные).

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

Для ответа в этой теме необходимо авторизоваться.