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

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

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

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

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

textual
Листинг программы
(defun avg-mark (fname)
  (let ((mat 0)
        (phy 0)
        (inf 0)
        (n   0)) 
   (iter (for stri in-file fname) 
     (when (> (strlen stri) 0)
      (setq n (+ n 1))
      (let* ((p (strInd stri "("))
             (s (strMid stri p))
             (l (input s)))
      (iter (for a in l)
        (cond ((eq (car a) 'мат) (setq mat (+ (cadr a) mat)))
              ((eq (car a) 'физ) (setq phy (+ (cadr a) phy)))
              ((eq (car a) 'инф) (setq inf (+ (cadr a) inf))))))))
    (printsline "+------+------+------+")
    (printsline "|  Мат |  Физ |  Инф |")
    (printsline "+------+------+------+")
    (printsline (strCat "| " (format (/ mat (+ 0.0 n)) "0.00") " "
                        "| " (format (/ phy (+ 0.0 n)) "0.00") " "
                        "| " (format (/ inf (+ 0.0 n)) "0.00") " |"))
    (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
Похожие ответы