Структуры: определить номер курса, на котором наибольший процент мужчин - Lisp

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

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

Имеется список студентов с информацией: фамилия, имя отчество, пол, возраст и курс. Нужно определить номер курса на котором наибольший процент мужчин

Решение задачи: «Структуры: определить номер курса, на котором наибольший процент мужчин»

textual
Листинг программы
> (defstruct student surname name fathername gender age course)
STUDENT
 
> (defun st-lst (n)
(cond ((= n 0) nil)
(t (cons (make-student
:surname (read)
:name (read)
:fathername (read)
:gender (read)
:age (read)
:course (read)) (st-lst (- n 1))))))
ST-LST
 
> (defun man (x)
(cond ((eq x nil) nil) 
((eq (student-gender (car x)) 'm)
(cons (student-course (car x)) (man (cdr x))))
(t (man (cdr x)))))
MAN
 
> (defun f (a x &optional (p 0))
(cond ((eq x nil)
p)
(t (if (equal a (car x)) (f a (cdr x) (+ p 1)) (f a (cdr x) p)))))
 
> (defun max-f (x &optional (n 0) z)
      (cond ((eq x nil) z)
            ((> (f (car x) x) n) (max-f (cdr x) (f (car x) x) (car x)))
            ((max-f (cdr x) n z))))
 
> (max-f (man (st-lst 5)))
a a a m 19 1
b b b m 20 1
c c c w 19 2
d d d w 18 2
e e e m 19 2
1

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

В коде используется язык программирования Lisp. Он определяет структуру данных студент с полями: фамилия, имя, отчество, пол, возраст, курс. Затем определяется функция st-lst, которая запрашивает ввод 5 студентов и возвращает список из них. Далее определена функция man, которая принимает список студентов и возвращает список курсов, на которых учатся мужчины. Затем определена функция f, которая принимает список студентов и номер студента в списке и возвращает номер курса, на котором учится мужчина. Если номер студента больше списка, то возвращается 0. Далее определена функция max-f, которая принимает список студентов и номер студента в списке и возвращает номер курса, на котором учится мужчина с наибольшим процентом. Если номер студента больше списка, то возвращается 0. В конце кода вызывается функция max-f с аргументом man(st-lst 5), где она получает список студентов, состоящий из 5 элементов, и возвращает номер курса, на котором учится мужчина с наибольшим процентом. В данном случае возвращается 1.

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

15   голосов , оценка 3.933 из 5
Похожие ответы