Вычисление среднего значения числа студентов - Prolog

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

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

Сам пытался подсчитать среднее значение, но расчёты не удаются.
Листинг программы
  1. % Copyright
  2. implement main
  3. open core, console
  4. domains
  5. фамилия=string.
  6. номергруппы=integer.
  7. номерзачетки=integer.
  8. датарождения= string.
  9. адрес =string.
  10. язык=string.
  11. возраст =integer.
  12. количествостудентов=integer.
  13. среднееколичествостудентов= integer.
  14. количествогрупп=integer.
  15. студент:(номергруппы,номерзачетки,фамилия,датарождения,адрес,язык)nondeterm.
  16. возраст:(фамилия, возраст)nondeterm.
  17. изучение_языка:(номергруппы,фамилия,язык)nondeterm.
  18. сумма:(количествостудентов)determ.
  19. сумма1:(номергруппы,количествостудентов)determ.
  20. количество:(количествостудентов)nondeterm.
  21. группа:(номергруппы) nondeterm.
  22. class predicates
  23. информация_0_студенте:(номергруппы,номерзачетки,фамилия,возраст,адрес,язык)nondeterm anyflow.
  24. студенты_одной_группы:(номергруппы,фамилия)nondeterm anyflow.
  25. старшеВГруппе:(номергруппы, фамилия,фамилия)nondeterm anyflow.
  26. студентыизучающиеязыки:(номергруппы,фамилия,язык)nondeterm anyflow.
  27. список_студентов:(номергруппы)nondeterm anyflow. количество_студентов_в_группе:(номергруппы,количествостудентов)nondeterm anyflow.
  28. количество_студентов_всех_групп:() nondeterm anyflow.
  29. среднее_количество_студентов:(номергруппы,среднееколичествостудентов)nondeterm anyflow.
  30. clauses
  31. студент(1,00001,"Кабанов","19","Пожаластина 21","Английский").
  32. студент(1,00002,"Петров","20","Пожаластина 21","Английский").
  33. студент(1,00003,"Иванов","19","Пожаластина 21","Английский").
  34. студент(1,00004,"Сидоров","18","Пожаластина 21","немецкий").
  35. студент(2,00005,"Кержаков","19","Пожаластина 21","Английский").
  36. студент(2,00006,"Аршавин","21","Пожаластина 21","немецкий").
  37. студент(3,00007,"Сычев","22","Пожаластина 21","Английский").
  38. студент(3,00008,"Дзюба","22","Пожаластина 21","немецкий").
  39. студент(4,00006,"Дзагоев","21","Пожаластина 21","немецкий").
  40. студент(4,00007,"Глушаков","22","Пожаластина 21","Английский").
  41. студент(4,00008,"Ребров","22","Пожаластина 21","немецкий").
  42. студент(4,00008,"Кутепов","22","Пожаластина 21","немецкий").
  43. студент(4,00009,"Иванов","22","Пожаластина 21","немецкий").
  44. группа(1).
  45. группа(2).
  46. группа(3).
  47. информация_0_студенте(Номергруппы,Номерзачетки,Фамилия,Датарождения,Адрес,Язык).
  48. clauses
  49. среднее_количество_студентов(Номергруппы,_):-
  50. assert(сумма1(0,0)),
  51. группа(_),
  52. количество_студентов_в_группе(_,Количествостудентов),
  53. retract(сумма1(Номергруппы,Количествостудентов)),
  54. Количествогрупп = Количествогрупп + 1,
  55. Количествостудентов = Количествостудентов+1,
  56. asserta(сумма1(Количествогрупп1,Количествостудентов)),
  57. fail.
  58. среднее_количество_студентов(Номергруппы,_):-
  59. retract(сумма1(Номергруппы,Количествостудентов)),
  60. Среднееколичествостудентов= Количествогрупп1/Количествостудентов.
  61. среднее_количество_студентов(_,Среднееколичествостудентов).
  62. количество_студентов_в_группе(Номер_группы,_):-
  63. assert(сумма(0)),
  64. студент(Номер_группы,_,_,_,_,_),
  65. retract(сумма(Количествостудентов)),
  66. Количествостудентов1 = Количествостудентов + 1,
  67. asserta(сумма(Количествостудентов1)),
  68. fail.
  69. количество_студентов_в_группе(_,Количествостудентов):-
  70. retract(сумма(Количествостудентов)).
  71. количество_студентов_всех_групп():-
  72. группа(Номер_группы),
  73. количество_студентов_в_группе(Номер_группы,Количествостудентов),
  74. write(Номер_группы," кол-во ",Количествостудентов),nl,fail.
  75. студенты_одной_группы(Номер_группы, Фамилия):-
  76. студент(Номер_группы,_,Фамилия,_,_,_).
  77. старшеВГруппе( Номер_группы,Фамилия1,Фамилия2):-
  78. студент(Номер_группы,_,Фамилия1,Возраст1,_,_),
  79. студент(Номер_группы,_,Фамилия2,Возраст2,_,_),
  80. Фамилия1 <> Фамилия2,
  81. Возраст1> Возраст2.
  82. студентыизучающиеязыки(Номер_группы,Фамилия,"Английский"):-
  83. nl,write("Cтуденты изучающие английский язык ",":"),nl,
  84. write("_____________________________________________"),nl,
  85. студент(Номер_группы,_,Фамилия,_,_,"Английский"),
  86. write("_____________________________________________"),nl.
  87. список_студентов(Номер_группы):-
  88. nl,write("список_студентов группы ",Номер_группы,":"),nl,
  89. студент(Номер_группы,_,Фамилия,_,_,_),
  90. write("_____________________________________________"),nl,
  91. write(" ",Фамилия),nl,fail.
  92. clauses
  93. run():-
  94. console::init(),
  95. студентыизучающиеязыки(1,Фамилия,"Английский"),
  96. write(Фамилия),nl,fail.
  97. run() :- console::init(), количество_студентов_всех_групп(),fail..
  98. run():-console::init(),
  99. количество_студентов_в_группе(1,Количествостудентов),
  100. write(Количествостудентов),nl,fail.
  101. end implement main
  102. goal
  103. console::runUtf8(main::run).

Решение задачи: «Вычисление среднего значения числа студентов»

textual
Листинг программы
  1. class predicates
  2.     среднее_количество_студентов:(среднееколичествостудентов) procedure(o).
  3.  
  4. clauses
  5. среднее_количество_студентов(Количество):-
  6.     assert(сумма1(0, 0)),
  7.     группа(Номергруппы),
  8.     количество_студентов_в_группе(Номергруппы, Количествостудентоввгруппе),
  9.     retract(сумма1(Количествогрупп, Количествостудентов)),
  10.     НовоеКоличествогрупп = Количествогрупп + 1,
  11.     НовоеКоличествостудентов = Количествостудентов + Количествостудентоввгруппе,
  12.     assert(сумма1(НовоеКоличествогрупп, НовоеКоличествостудентов)),
  13.     fail;
  14.  
  15.     retract(сумма1(Количествогрупп, Количествостудентов)),
  16.     Количество = Количествостудентов / Количествогрупп.

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

  1. Задана процедура среднее_количество_студентов, которая принимает один аргумент Количество.
  2. Аргумент Количество не используется в процедуре, поэтому он может быть любым.
  3. В процедуре используются следующие утверждения:
    • сумма1(0, 0) - это начальное значение суммы студентов и количества групп.
    • группа(Номергруппы) - это утверждение о существовании группы с номером Номергруппы.
    • количество_студентов_в_группе(Номергруппы, Количествостудентоввгруппе) - это утверждение о количестве студентов в группе с номером Номергруппы.
  4. Процедура выполняет следующие действия:
    • Добавляет новое значение суммы студентов и количества групп.
    • Увеличивает количество групп на 1.
    • Увеличивает общее количество студентов на количество студентов в текущей группе.
    • Добавляет новое значение суммы студентов и количества групп.
    • Проваливается, чтобы не выводить результат.
  5. В конце процедуры вычисляется среднее количество студентов путем деления общего количества студентов на количество групп.
  6. Результат Количество не используется в процедуре, поэтому он может быть любым.

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


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

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

9   голосов , оценка 4.222 из 5

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

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

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