Процент успеваемости и средний балл в ведомости - 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, которая вычисляет средний балл по трём предметам (мат, физ, и инф) в ведомости. Список переменных и их значения:
- fname - имя файла с ведомостью
- mat, phy, inf - переменные для хранения суммарного количества баллов по каждому предмету
- n - переменная для хранения общего количества баллов Код функции:
- Создаются четыре переменные mat, phy, inf и n со значением 0.
- Выполняется итерация по каждой строке в файле с ведомостью.
- Если длина строки больше 0, то увеличивается значение переменной n на 1.
- Для каждой строки выполняется итерация по каждому предмету (мат, физ, и инф).
- Если значение текущего предмета равно 'мат, то к переменной mat прибавляется значение следующего элемента в строке.
- Если значение текущего предмета равно 'физ, то к переменной phy прибавляется значение следующего элемента в строке.
- Если значение текущего предмета равно 'инф, то к переменной inf прибавляется значение следующего элемента в строке.
- После завершения итерации по всем строкам файла, выводится шаблон ведомости с названиями предметов и значениями переменных mat, phy и inf.
- Выводится средний балл по каждому предмету, рассчитанный как отношение суммы баллов к общему количеству баллов.
- Выводится средний балл по всем предметам, рассчитанный как отношение суммы баллов по всем предметам к общему количеству баллов.
- Функция возвращает значение 'OK.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д