Рисунок 4 - Блок-схема решения задачи для функции UNION: LST- список, в котором просматриваются вхождения числа NUM, TEMP_NUM- рабочий список
Рисунок 5 - Блок-схема решения задачи для функции COPY_HALF_LIST, LST_RES- список-результат, в который копируется первая половина списка LST, I- рабочая переменная
Рисунок 6 - Блок-схема решения задачи для функции COPY_LAST_HALF_LIST, LST_RES- список-результат, в который копируется вторая половина списка LST, I- рабочая переменная
; составляем пары
(defun union (lst num)
(cond
( (null num) nil)
( (atom num)
(cond
( (null lst) nil)
( (atom lst) (if (not (eq lst num)) (list lst ': num)))
(t (cons (union (car lst) num) (union (cdr lst) num)))
)
)
(t (append (union lst (car num))
(progn
(setq temp_num (car num))
(setq lst (remove temp_num lst))
(unionlst (cdrnum))
)
)
)
)
)
; функция устанавливает счет матча
(defun set_res (lst)
(list (list (random 7) ': (random 7)) lst)
)
; копируем первую половину списка
(defuncopy_half_list (lst)
(declare (special lst_res))
(setq lst_res nil)
(do
( (i 0))
( (>= i (/ (length lst) 2)) lst_res)
(setq lst_res (insert i lst_res (nth i lst)))
(setqi (+ i 1))
)
)
; копируем вторую половину списка
(defun copy_last_half_list (lst)
(declare (special lst_res))
(setq lst_res nil)
(do
( (i (/ (length lst) 2)) (iter 0))
( (>= i (length lst)) lst_res)
(setq lst_res (insert iter lst_res (nth i lst)))
(setq i (+ i 1))
(setq iter (+ iter 1))
)
)
; вставка элемента at в pos позицию списка lst
(defun insert (pos lst at)
(cond
( (null lst) (cons at nil))
( (eql pos 0) (cons at lst))
(t (cons (car lst) (insert ( - pos 1) (cdr lst) at)))
)
)
; функция выбирает победителя
(defunget_winner (lst)
(nth (random (length lst)) lst)
)
; функция иммитирует игру по олимпийской системе
(defun play_off (l output)
(cond
; если осталось 2 участника выбираем победителя и выходим из функции
( (= (length l) 2)
(progn
(print 'pobeditel output)
(print (get_winner l) output)
)
)
( (/= (lengthl) 2)
(progn
; разбиваем команды на 2 группы
(setq group1 (copy_half_list l))
(print 'gruppa1 output)
(print group1 output)
(setq group2 (copy_last_half_list l))
(print 'gruppa2 output)
(print group2 output)
; формируем встречи комманд
(setq commands (mapcar 'list group1 group2))
(print 'igroki output)
(print commands output)
; выбираем победителя
(setq l (mapcar 'get_winner commands))
(print 'pobediteli output)
(print l output)
(print '______________________________________________ output)
; рекурсивно вызываем функцию play_off с новым
; списком комманд участников
(play_offloutput)
)
)
)
)
; открываем файл и получаем команды
(setqinput_stream (open "d: \commands. txt": direction: input))
; вид системы
; 1 - круговая
; 2 - playoff
(setq system (read input_stream))
(setq commands (read input_stream))
(close input_stream)
(setq output_stream (open " d: \play. txt": direction: output))
(if (= system 1)
; круговая система
(print (setq play (mapcar 'set_res (remove nil (union commands commands)))) output_stream)
;иммитируем игру по олимпийской системе для получееных комманд
(play_off commands output_stream)
)
(terpri output_stream)
(close output_stream)
Пример 1.
Рисунок 7 - Команды, играющие по олимпийской системе
Рисунок 8 - Игра команд по олимпийской системе
Рисунок 9 - Команды, играющие по круговой системе
Рисунок 10 - Игра команд по круговой системе
Пример 2.
Рисунок 11 - Команды, играющие по олимпийской системе
Рисунок 12 - Игра команд по олимпийской системе
Рисунок 13 - Команды, играющие по олимпийской системе
Рисунок 14 - Игра команд по олимпийской системе
Система спортивных соревнований является главным системообразующим и интегрирующим фактором, наиболее существенно влияющим на все остальные элементы спорта. В основополагающих трудах ведущих теоретиков спорта соревнования трактуются как цель, средство, метод и модель подготовки, как мощный рычаг управления видом спорта.
Итогом работы можно считать созданную функциональную модель составления расписания встреч участников соревнований. Данная модель применима к круговой и олимпийской системе проведения спортивных соревнований. Созданная функциональная модель и ее программная реализация могут служить органической частью решения более сложных задач.
1. Бронштейн И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. - М.: Наука, 2007. - 708 с.
2. Круговая система [Электронный ресурс] - Режим доступа: http://ru. wikipedia.org/wiki/Круговая_система
3. Платонов В.Н. Профессиональный спорт. [Текст] / В.Н. Платонов, С.И. Гуськова. - К.: Олимпийская литература, 2000. С.293.
4. Плей-офф [Электронный ресурс] - Режим доступа: http://ru. wikipedia.org/wiki/Плей_офф
5. Степанов П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А. Степанов, А.В. Бржезовский. - М.: ГУАП, 2003. С.79.
6. Столбов В.В. История физической культуры. [Электронный ресурс] / В.В. Столбов, И.Г. Чудинов - М.: ФиС. 1999. С.643.
7. Симанков В.С. Основы функционального программирования [Текст] / В.С. Симанков, Т.Т. Зангиев, И.В. Зайцев. - Краснодар: КубГТУ, 2002. - 160 с.
8. Хювенен Э. Мир Лиспа [Текст] / Э. Хювенен, Й. Сеппянен. - М.: Мир, 1990. - 460 с.