Вычисление среднего значения числа студентов - Prolog
Формулировка задачи:
Сам пытался подсчитать среднее значение, но расчёты не удаются.
Листинг программы
- % Copyright
- implement main
- open core, console
- domains
- фамилия=string.
- номергруппы=integer.
- номерзачетки=integer.
- датарождения= string.
- адрес =string.
- язык=string.
- возраст =integer.
- количествостудентов=integer.
- среднееколичествостудентов= integer.
- количествогрупп=integer.
- студент:(номергруппы,номерзачетки,фамилия,датарождения,адрес,язык)nondeterm.
- возраст:(фамилия, возраст)nondeterm.
- изучение_языка:(номергруппы,фамилия,язык)nondeterm.
- сумма:(количествостудентов)determ.
- сумма1:(номергруппы,количествостудентов)determ.
- количество:(количествостудентов)nondeterm.
- группа:(номергруппы) nondeterm.
- class predicates
- информация_0_студенте:(номергруппы,номерзачетки,фамилия,возраст,адрес,язык)nondeterm anyflow.
- студенты_одной_группы:(номергруппы,фамилия)nondeterm anyflow.
- старшеВГруппе:(номергруппы, фамилия,фамилия)nondeterm anyflow.
- студентыизучающиеязыки:(номергруппы,фамилия,язык)nondeterm anyflow.
- список_студентов:(номергруппы)nondeterm anyflow. количество_студентов_в_группе:(номергруппы,количествостудентов)nondeterm anyflow.
- количество_студентов_всех_групп:() nondeterm anyflow.
- среднее_количество_студентов:(номергруппы,среднееколичествостудентов)nondeterm anyflow.
- clauses
- студент(1,00001,"Кабанов","19","Пожаластина 21","Английский").
- студент(1,00002,"Петров","20","Пожаластина 21","Английский").
- студент(1,00003,"Иванов","19","Пожаластина 21","Английский").
- студент(1,00004,"Сидоров","18","Пожаластина 21","немецкий").
- студент(2,00005,"Кержаков","19","Пожаластина 21","Английский").
- студент(2,00006,"Аршавин","21","Пожаластина 21","немецкий").
- студент(3,00007,"Сычев","22","Пожаластина 21","Английский").
- студент(3,00008,"Дзюба","22","Пожаластина 21","немецкий").
- студент(4,00006,"Дзагоев","21","Пожаластина 21","немецкий").
- студент(4,00007,"Глушаков","22","Пожаластина 21","Английский").
- студент(4,00008,"Ребров","22","Пожаластина 21","немецкий").
- студент(4,00008,"Кутепов","22","Пожаластина 21","немецкий").
- студент(4,00009,"Иванов","22","Пожаластина 21","немецкий").
- группа(1).
- группа(2).
- группа(3).
- информация_0_студенте(Номергруппы,Номерзачетки,Фамилия,Датарождения,Адрес,Язык).
- clauses
- среднее_количество_студентов(Номергруппы,_):-
- assert(сумма1(0,0)),
- группа(_),
- количество_студентов_в_группе(_,Количествостудентов),
- retract(сумма1(Номергруппы,Количествостудентов)),
- Количествогрупп = Количествогрупп + 1,
- Количествостудентов = Количествостудентов+1,
- asserta(сумма1(Количествогрупп1,Количествостудентов)),
- fail.
- среднее_количество_студентов(Номергруппы,_):-
- retract(сумма1(Номергруппы,Количествостудентов)),
- Среднееколичествостудентов= Количествогрупп1/Количествостудентов.
- среднее_количество_студентов(_,Среднееколичествостудентов).
- количество_студентов_в_группе(Номер_группы,_):-
- assert(сумма(0)),
- студент(Номер_группы,_,_,_,_,_),
- retract(сумма(Количествостудентов)),
- Количествостудентов1 = Количествостудентов + 1,
- asserta(сумма(Количествостудентов1)),
- fail.
- количество_студентов_в_группе(_,Количествостудентов):-
- retract(сумма(Количествостудентов)).
- количество_студентов_всех_групп():-
- группа(Номер_группы),
- количество_студентов_в_группе(Номер_группы,Количествостудентов),
- write(Номер_группы," кол-во ",Количествостудентов),nl,fail.
- студенты_одной_группы(Номер_группы, Фамилия):-
- студент(Номер_группы,_,Фамилия,_,_,_).
- старшеВГруппе( Номер_группы,Фамилия1,Фамилия2):-
- студент(Номер_группы,_,Фамилия1,Возраст1,_,_),
- студент(Номер_группы,_,Фамилия2,Возраст2,_,_),
- Фамилия1 <> Фамилия2,
- Возраст1> Возраст2.
- студентыизучающиеязыки(Номер_группы,Фамилия,"Английский"):-
- nl,write("Cтуденты изучающие английский язык ",":"),nl,
- write("_____________________________________________"),nl,
- студент(Номер_группы,_,Фамилия,_,_,"Английский"),
- write("_____________________________________________"),nl.
- список_студентов(Номер_группы):-
- nl,write("список_студентов группы ",Номер_группы,":"),nl,
- студент(Номер_группы,_,Фамилия,_,_,_),
- write("_____________________________________________"),nl,
- write(" ",Фамилия),nl,fail.
- clauses
- run():-
- console::init(),
- студентыизучающиеязыки(1,Фамилия,"Английский"),
- write(Фамилия),nl,fail.
- run() :- console::init(), количество_студентов_всех_групп(),fail..
- run():-console::init(),
- количество_студентов_в_группе(1,Количествостудентов),
- write(Количествостудентов),nl,fail.
- end implement main
- goal
- console::runUtf8(main::run).
Решение задачи: «Вычисление среднего значения числа студентов»
textual
Листинг программы
- class predicates
- среднее_количество_студентов:(среднееколичествостудентов) procedure(o).
- clauses
- среднее_количество_студентов(Количество):-
- assert(сумма1(0, 0)),
- группа(Номергруппы),
- количество_студентов_в_группе(Номергруппы, Количествостудентоввгруппе),
- retract(сумма1(Количествогрупп, Количествостудентов)),
- НовоеКоличествогрупп = Количествогрупп + 1,
- НовоеКоличествостудентов = Количествостудентов + Количествостудентоввгруппе,
- assert(сумма1(НовоеКоличествогрупп, НовоеКоличествостудентов)),
- fail;
- retract(сумма1(Количествогрупп, Количествостудентов)),
- Количество = Количествостудентов / Количествогрупп.
Объяснение кода листинга программы
- Задана процедура
среднее_количество_студентов
, которая принимает один аргументКоличество
. - Аргумент
Количество
не используется в процедуре, поэтому он может быть любым. - В процедуре используются следующие утверждения:
сумма1(0, 0)
- это начальное значение суммы студентов и количества групп.группа(Номергруппы)
- это утверждение о существовании группы с номеромНомергруппы
.количество_студентов_в_группе(Номергруппы, Количествостудентоввгруппе)
- это утверждение о количестве студентов в группе с номеромНомергруппы
.
- Процедура выполняет следующие действия:
- Добавляет новое значение суммы студентов и количества групп.
- Увеличивает количество групп на 1.
- Увеличивает общее количество студентов на количество студентов в текущей группе.
- Добавляет новое значение суммы студентов и количества групп.
- Проваливается, чтобы не выводить результат.
- В конце процедуры вычисляется среднее количество студентов путем деления общего количества студентов на количество групп.
- Результат
Количество
не используется в процедуре, поэтому он может быть любым.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д