Процент успеваемости и средний балл в ведомости - Lisp

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

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

Имеется ведомость с экзамена на группу учеников: <Фамилия>((<Предмет 1>,<Оценка>),....(<Предмет 4>,<Оценка>)). Определить по каждому предмету процент успеваемости и средний балл. Вывести на экран соответствующую ведомость.

Решение задачи: «Процент успеваемости и средний балл в ведомости»

textual
Листинг программы
  1. (defun avg-mark (fname)
  2.   (let ((mat 0)
  3.         (phy 0)
  4.         (inf 0)
  5.         (n   0))
  6.    (iter (for stri in-file fname)
  7.      (when (> (strlen stri) 0)
  8.       (setq n (+ n 1))
  9.       (let* ((p (strInd stri "("))
  10.              (s (strMid stri p))
  11.              (l (input s)))
  12.       (iter (for a in l)
  13.         (cond ((eq (car a) 'мат) (setq mat (+ (cadr a) mat)))
  14.               ((eq (car a) 'физ) (setq phy (+ (cadr a) phy)))
  15.               ((eq (car a) 'инф) (setq inf (+ (cadr a) inf))))))))
  16.     (printsline "+------+------+------+")
  17.     (printsline "|  Мат |  Физ |  Инф |")
  18.     (printsline "+------+------+------+")
  19.     (printsline (strCat "| " (format (/ mat (+ 0.0 n)) "0.00") " "
  20.                         "| " (format (/ phy (+ 0.0 n)) "0.00") " "
  21.                         "| " (format (/ inf (+ 0.0 n)) "0.00") " |"))
  22.     (printsline "+------+------+------+") 'OK))

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

В данном коде на языке Lisp реализована функция avg-mark, которая вычисляет средний балл по трём предметам (мат, физ, и инф) в ведомости. Список переменных и их значения:

  1. fname - имя файла с ведомостью
  2. mat, phy, inf - переменные для хранения суммарного количества баллов по каждому предмету
  3. n - переменная для хранения общего количества баллов Код функции:
  4. Создаются четыре переменные mat, phy, inf и n со значением 0.
  5. Выполняется итерация по каждой строке в файле с ведомостью.
  6. Если длина строки больше 0, то увеличивается значение переменной n на 1.
  7. Для каждой строки выполняется итерация по каждому предмету (мат, физ, и инф).
  8. Если значение текущего предмета равно 'мат, то к переменной mat прибавляется значение следующего элемента в строке.
  9. Если значение текущего предмета равно 'физ, то к переменной phy прибавляется значение следующего элемента в строке.
  10. Если значение текущего предмета равно 'инф, то к переменной inf прибавляется значение следующего элемента в строке.
  11. После завершения итерации по всем строкам файла, выводится шаблон ведомости с названиями предметов и значениями переменных mat, phy и inf.
  12. Выводится средний балл по каждому предмету, рассчитанный как отношение суммы баллов к общему количеству баллов.
  13. Выводится средний балл по всем предметам, рассчитанный как отношение суммы баллов по всем предметам к общему количеству баллов.
  14. Функция возвращает значение 'OK.

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


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

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

10   голосов , оценка 3.9 из 5

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

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

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