Составление расписания встреч участников соревнований

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?го чемпионата. По системе плей-офф в европейском футболе принято разыгрывать Кубок страны и Кубок УЕФА. Также есть стадия плей-офф в нескольких крупных турнирах - Лиге чемпионов, Чемпионатах Европы и мира, однако перед этим там проходит групповой турнир.

В большинстве Чемпионатов России по игровым видам спорта в настоящий момент звание Чемпиона России разыгрывается именно в играх на выбывание - сериях плей-офф.

В странах Азии по системе плей-офф проводятся многие отборочные турниры, определяющие претендентов на высшие титулы игры го. А вот в шахматных турнирах, напротив, плей-офф не распространён, хотя уже с 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>