Составление расписания встреч участников соревнований
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?го чемпионата. По системе плей-офф в европейском футболе принято разыгрывать Кубок страны и Кубок УЕФА. Также есть стадия плей-офф в нескольких крупных турнирах - Лиге чемпионов, Чемпионатах Европы и мира, однако перед этим там проходит групповой турнир.
В большинстве Чемпионатов России по игровым видам спорта в настоящий момент звание Чемпиона России разыгрывается именно в играх на выбывание - сериях плей-офф.
В странах Азии по системе плей-офф проводятся многие отборочные турниры, определяющие претендентов на высшие титулы игры го. А вот в шахматных турнирах, напротив, плей-офф не распространён, хотя уже с 1960-х годов были предложения о введении именно этого порядка розыгрыша турнира претендентов на звание Чемпиона мира по шахматам (с таким предложением выступал, например, Роберт Фишер). Начиная с 1995 года ФИДЕ проводит турниры сильнейших игроков по нокаут-системе) которая представляет собой вариант плей-офф, а в течение десятилетия 1995-2004 лет официальный чемпион мира по версии ФИДЕ определялся также в нокаут-турнире, но затем ФИДЕ отказалась от нокаут-системы в чемпионате мира.
3. Функциональные модели и блок-схемы решения задачи
Функциональные модели и блок-схемы решения задачи представлены на рисунках 1 - 6.
Рисунок 1 - Функциональная модель решения задачи для функции GET_WINNER
LST - список команд
N1, N2 - команды, участвующие в соревнованиях
Рисунок 2 - Блок-схема решения задачи для функции INSERT
POS - позиция вставляемого элемента, LST - список, в который вставляем элемент, AT элемент
Рисунок 3 - Блок-схема решения задачи для функции: PLAY_OFF L - команды-участники, OUTPUT - поток вывода
Рисунок 4 - Блок-схема решения задачи для функции UNION: LST - список, в котором просматриваются вхождения числа NUM, TEMP_NUM - рабочий список
Рисунок 5 - Блок-схема решения задачи для функции COPY_HALF_LIST, LST_RES - список-результат, в который копируется первая половина списка LST, I - рабочая переменная
Рисунок 6 - Блок-схема решения задачи для функции COPY_LAST_HALF_LIST, LST_RES - список-результат, в который копируется вторая половина списка LST, I - рабочая переменная
4. Программная реализация решения задачи
; составляем пары
(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))
(union lst (cdr num))
)
)
)
)
)
; функция устанавливает счет матча
(defun set_res (lst)
(list (list (random 7) : (random 7)) lst)
)
; копируем первую половину списка
(defun copy_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)))
(setq i (+ 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)))
)
)
; функция выбирает победителя
(defun get_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)
)
)
( (/= (length l) 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_off l output)
)
)
)
)
; открываем файл и получаем команды
(setq input_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)
5. Пример выполнения программы
Пример 1.
Рисунок 7 - Команды, играющие по олимпийской системе
Рисунок 8 - Игра команд по олимпийской системе
Рисунок 9 - Команды, играющие по круговой системе
Рисунок 10 - Игра команд по круговой системе
Пример 2.
Рисунок 11 - Команды, играющие по олимпийской системе
Рисунок 12 - Игра команд по олимпийской системе
Рисунок 13 - Команды, играющие по олимпийской системе
Рисунок 14 - Игра команд по олимпийской системе
Заключение
Система спортивных соревнований является главным системообразующим и интегрирующим фактором, наиболее существенно влияющим на все остальные элементы спорта. В основополагающи?/p>