Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 4

Определить фамилию победителя соревнования и разницу между лучшим и худшим результатом

14.01.2013, 21:02. Показов 2202. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие задачи:
Известны результаты бега спортсменов на длинную дистанцию. Время представлено в минутах и секундах. Определить фамилию победителя соревнования и разницу между лучшим и худшим результатом.

Функции которые можно использовать:
append, apply, atom, car, cdr, cond, cons, defstruct, defun, eq, eval, format, funcall, if, let, list, mapcar, maplist, member, print, prog1, prog2, progn, quote, read, reverse.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2013, 21:02
Ответы с готовыми решениями:

ЗВычислить средний балл, полученный учениками, и разницу между лучшим результатом и средним баллом.
N учеников проходили тестирование, выполнив M тестов по какому-либо предмету. Сколько очков набрал каждый ученик по всем темам? Вычислить...

Определить победителя соревнования используя записи с системы фиксации
Ребят, помогите, пожалуйста, решить задачу... Идей пока вообще нет, даже не знаю как подступиться... Буду очень благодарен за любую...

Определить фамилию спортсмена – победителя соревнований
Известны баллы, набранные каждым из 12 спортсменов-пятиборцев в каждом из пяти видов спорта. Определить фамилию спортсмена – победителя...

8
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
14.01.2013, 22:09
Rina12,
1. На форуме уже с десяток подобных задач.
2. Все задачи с одними и теми же ограничениями.
3. Почему можно prog1, prog2, progn, но нельзя простые when, and, or и др.
4. Покажите как вы пытались решить задачу и у Вас не получилось.
0
 Аватар для Streuner
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 17
14.01.2013, 23:23
А что такое, кстати, prog1 и prog2? Все остальные приведенные операторы и функции мне известны.
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
14.01.2013, 23:32
http://www.lispworks.com/docum... prog1c.htm

prog1 и prog2 возвращают значение первого или второго аргумента соответственно
0
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 4
14.01.2013, 23:42  [ТС]
делала так:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CL-USER 16 : 1 > (defstruct sport fam mnt sec)
SPORT
 
CL-USER 17 : 1 > (defun sp(n)
                   (cond ((= n 0) nil)
                         (t (cons (make-sport
                                   :fam (read)
                                   :mnt (read)
                                   :sec (read)) (sp (- n 1))))))
SP
CL-USER 26 : 4 > (defun max1(x)
               (cond ((eq (cdr x) nil) (sport-mnt (car x))) ((eq (cdr x) nil) (sport-sec (car x))) 
                     (t (cons (max (sport-mnt (car x)) (max1 (cdr x)))(max (sport-sec (car x)) (max1 (cdr x)))))))
MAX1
CL-USER 36 : 5 > (defun min1(x)
                   (cond ((eq (cdr x) nil) (sport-sec (car x)))
                         (t (cons (min (sport-mnt (car x)) (min1 (cdr x)))(min (sport-sec (car x))(min1 (cdr x)))))))
MIN1
обе функции min1 и max1 работают не правильно, почему, я не понимаю. Вообще как общаться с ЛИСПом понять не могу, либо преподаватель не до объясняла, либо у меня соображалка не работает, на том же паскале написать подобную программу особых проблем бы не составило.
Все функции выписаны из методички, and и or использовать можно.
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
15.01.2013, 11:34
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(defstruct run name mm ss)
 
(defun res (n)
  (when (> n 0) (cons (make-run :name (read) :mm (read) :ss (read)) (res (1- n)))))
 
(defun name-ss (w)
  (mapcar #'(lambda (a) (list (run-name a) (+ (* (run-mm a) 60) (run-ss a)))) w))
 
(defun r-sort (w)
  (sort (name-ss w) #'< :key #'cadr))
 
(defun winner (w)
  (caar (r-sort w)))
 
(defun advantage (w &aux (v (r-sort w)))
  (- (cadar (last v)) (cadar v)))
 
> (setq 3km (res 2)) 
ivanov
10
54
petrov
9
37
(#S(RUN :NAME IVANOV :MM 10 :SS 54) #S(RUN :NAME PETROV :MM 9 :SS 37))
> (winner 3km)
PETROV
> (advantage 3km)
77
1
 Аватар для Streuner
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 17
15.01.2013, 13:33
У меня получилось вот так:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(defstruct sport name m s)
(defparameter *number*  (+ (random 10) 10)) ;число участников соревнований от 10 до 19
 
(defun generate-name () ;генератор случайной фамилии
    (let* ((len (+ (random 5) 5)) (name (make-string len))) 
          (dotimes (i len name) ;генерируем в цикле случайный символ ASCII-диапазона английского алфавита     
               (setf (char name i) (code-char (+ 97 (random 26)))))
          (setf (char name 0) (char-upcase (char name 0))) ; фамилия начинается с большой буквы
          name)) 
 
(defun generate-list-of-sportsmens (num) ; генерация списка спортсменов
    (let ((lst nil))
         (dotimes (i num lst)
            (push (make-sport :name (generate-name) :m (+ 10 (random 5)) :s (random 60)) lst))))
 
(defun res-in-seconds (player) ; результат спортсмена в секундах
    (+ (* 60 (sport-m player))  (sport-s player)))
 
(defun find-winner-and-loser (min-elt max-elt lst) ;обходит весь список, возвращающая чемпиона и лузера
    (cond ((null lst) (values min-elt max-elt (-(res-in-seconds max-elt) (res-in-seconds min-elt))))
          ((<= (res-in-seconds (car lst)) (res-in-seconds min-elt))
                    (find-winner-and-loser (car lst) max-elt (cdr lst)))
          ((>= (res-in-seconds (car lst)) (res-in-seconds max-elt))
                    (find-winner-and-loser min-elt (car lst) (cdr lst)))
      (t (find-winner-and-loser min-elt max-elt (cdr lst)))))
 
(defun min-max (lst) ; вызывается с топлевела
    (format t "Список участников:~%")
    (dolist (elmt lst) 
         (format t "~A~%" elmt))
    (format t "~%Лучший и худший результат:~%")
    (multiple-value-bind (winner loser delta)
        (if (<= (res-in-seconds (first lst)) (res-in-seconds (second lst)))
            (find-winner-and-loser (first lst) (second lst) (cddr lst))
        (find-winner-and-loser (second lst) (first lst) (cddr lst)))
        (format t "~A~%~A~%Разница:~A мин ~A сек" winner loser (floor (/ delta 60)) (- delta (* 60 (floor (/ delta 60)))))))
Миниатюры
Определить фамилию победителя соревнования и разницу между лучшим и худшим результатом  
0
 Аватар для Streuner
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 17
15.01.2013, 13:36
Достаточно большие списки лень вводить с клавиатуры, поэтому я написал случайный генератор фамилии спортсмена и его результатов, которые лежат в диапазоне от 10 до 15 минут. Рекурсивная функция find-winner-and-loser пробегает случайно сгенерированный список, находя победителя и проигравшего.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.01.2013, 05:49
Streuner, вместо комментариев к toplevel-функциями и переменным лучше использовать строки документации
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2013, 05:49
Помогаю со студенческими работами здесь

Определить фамилию победителя (участника, набравшего наибольшее количество баллов
К соревнованиям, проходившим в три тура, были допущены трое: Иванов, Петров, Сидоров. Иванов в трёх турах набрал S1 баллов, Петров...

Вычислить средний балл, полученный учениками, и разницу между лучшими результатом и средним баллом
N учеников проходили тестирование, выполнив М тестов по какому-либо предмету. Сколько очков набрал каждый ученик по всем темам? Вычислить...

Определить фамилию спортсмена победителя, если известны баллы, набранные каждым спортсменов
Подскажите, задание: известны баллы набранные каждым из 20 спортсменов олимпиады-пятиборья по пяти видам спорта,определить фамилию...

Записи с лучшим результатом из нескольких попыток
Добрый день. Есть таблица: user_id (не унимальный), id (унимальный), ball. С одним user_id может быть несколько записей. Нужно...

Не состыковка между результатом программы и результатом Excel
Даны натуральные числа N и M (N&gt;M). Вычислить S=\sum_{k-M}^{N}k^2\ln(k!) Вот код: //Задание 5 #include &lt;stdio.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru