Процент успеваемости и средний балл в ведомости - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д