36
И. Лапушонок
Программное обеспечение фехтовальных туриров
В современных по фехтованию все участники разбиаются на первоначальные группы (пульки), в которых они ведут бой каждой с каждой по установленному порядку. В пульке может быть от пяты до десяти человек, причем желательно, чтобы во всех пульках было равное количество спорстемов. Место, которое занял участник в пульке, определяется числом побед, а при равном числе побед — по коэффициенту :
Определение количества личных участников из каждой пульки (объчно 3 или 4) выходит в следующую ступень. В следующей ступени участники опять разбиаются на пульки (если участников больше десяти) и снова ведут бой. Когда очередная ступень будет состоять меньше, чем из 10 человек, она объявляется финансовой и победителем в ней объявляется победителем турира.
Программное обеспечение совершенний по фехтованию состоит из следующих процедур:
— расчет возможных вариантов пульек (ПУЛЬКА);
— ввод фамилий участников и записи их в множество (УЧАСТНИКИ);
— распределение фамилий участников по пулькам (ГРУППЫ);
— определение порядка боев для каждой пульки и запись результаты этих боев в кортеж (СЧЕТ);
— подсчет количества побед каждой участника и в конечном счете места в пульке (БАЛЛЫ);
— выдача протокола пульки (ПРОТОКОЛ);
— запись участников следующего ступени в множество (СТУПЕНЬ);
— управляющая процедура УПРАВЛЕНИЕ с процедурой ПЕРЕБОЙ (повторный бой).
Система работы в диалоговом режиме. Она была первоначально написана на языке Бэйсик. Читатель мы предлагаем повторить эти программы на Рапире.
Контроль над ведением совершенний и включение процедур в нужной последовательности осуществляется процедура УПРАВЛЕНИЕ.
ПолучFORMALНО Эту программу можно было бы описать так:
ПРОЦ УПРАВЛЕНИЕ;
.УЧАСТНИКИ;
1—> ПРИЗНАК;
ПОКА ПРИЗНАК > = 0::
.ПУЛЬКА; .ГРУППЫ;
ДЛЯ ВСЕХ ГРУПП::
.СЧЕТ; .БАЛЛЫ; ПРОТОКОЛ
ВСЕ;
ЕСЛИ ЧИСЛО УЧАСТНИКОВ <10
ТО ПРИЗНАК —1—> ПРИЗНАК
ИНАЧЕ .СТУПЕНЬ
ВСЕ
ВСЕ;
ПРОВЕРКА НЕОБХОДИМОСТИ
ВЫЗОВА ПРОЦЕДУРЫ ПЕРЕБОЙ
КНЦ;
Не формальными (с точки зрения Рапиры) является здесь всего два места. Они выделены курсивом. Во-первых, это строка ДЛЯ ВСЕХ ГРУПП::
означаюшая обязательное, повторяющее выполнение всех трех последующих процедур СЧЕТ, БАЛЛЫ и ПРОТОКОЛ для всех пульек одной ступени; ваше задача — реализовать это неформальное предписание известными вам средствами Рапиры.
Во-вторых, строки ПРОВЕРКА НЕОБХОДИМОСТИ ВЫЗОВА ПРОЦЕДУРЫ ПЕРЕБОЙ
вам не трудно будет развернуть в форматное описание условий оператора ЕСЛИ, учитывающего, что процедура ПЕРЕБОЙ начинает работу в случае, если у 2—4 участников (у любой пары из них, у троих или даже у четырех) равное количество побед и равные коэффициенты.
Кроме того, в описании процедуры УПРАВЛЕНИЕ нужно, по-видимому, посяснядых. Перененная ЧИСЛО УЧАСТНИКИ вводится судей в начале работы программы (в процедре УЧАСТНИКИ) и может быть изменена (уменьшена) только в ходе выполнения процедуры СЧЕТ. Перененная ПРИЗНАК используется для того, чтобы зафиксировать фамильную пульку.
Процедура УЧАСТНИКИ служит для начального ввод и заполнения фамилий участников. Вводятся они с терминала в порядке, установленном жеребевкой (для программиста
37
важно, что порядок в списке участников к моменту ввода его в память точно известен). Процедура ГРУП-ПЫ выбирает из записанных участников состав пульки. Например, в первую пульку будет записаны участники, чьи фамилии вводились, скажем, с номерами 1, 7, 13, 19, 25, 31, 37. Перед началом пульки выдается распечатка — номера и фамилии участников. Пример:
Пулька 1
№ 1 ИВАНОВ Д.
№ 2 ВОЛКОВ И.
№ 3 КУЗНЕЦОВ М.
№ 4 ЛЕБЕДЕВ А.
№ 5 ЛЬВОВ В.
Ниболье интересными являются процесуры ПУЛЬКА, СЧЕТ и БАЛЛЫ, так как в них отражена специфика фехтовальных турниров. ПУЛЬКА выводит возможные варианты разбивки участников по пулькам. Пример машиной выдачи этой процесуры:
СКОЛЬКО ЧЕЛОВЕК ПРИНИМАЕТ УЧАСТИЕ В ТУРНИРЕ?
— 43
6 ЧЕЛОВЕК В КАЖДОЙ ИЗ 6 ГРУПП И 7 ЧЕЛОВЕК В КАЖДОЙ ИЗ 1 ГРУПП.
7 ЧЕЛОВЕК В КАЖДОЙ ИЗ 5 ГРУПП И 8 ЧЕЛОВЕК В КАЖДОЙ ИЗ 1 ГРУПП.
5 ЧЕЛОВЕК В КАЖДОЙ ИЗ 5 ГРУПП И 6 ЧЕЛОВЕК В КАЖДОЙ ИЗ 3 ГРУПП.
Здесь судья ввел только одно число — 43.
СЧЕТ выводит таблицу порядка боев для каждой пульки. Кроме того, эта процесура неосредственно предписывает введение боев, вызывает участников на дорогжу, предъявает о следующем бое, принимает результаты, записывает их в кортеж. Этот же кортеж использует и в процессе БАЛЛЫ, которая подсчитывает число побед, коэффициенты, места.
Ниже показана распечатка таблицы боев и хода турнира с записью результаты и в процессе БАЛЛЫ, которая подсчитывает число побед, коэффициенты, места.
Ниже показана распечатка таблицы боев и хода турнира с записью результаты и в процессе БАЛЛЫ, которая подсчитывает число побед, коэффициенты, места.
ПОРЯДОК БОЕВ ДЛЯ 5 УЧАСТНИКОВ 1—2, 3—4, 5—1, 2—3, 5—4, 1—3, 2—5, 4—1, 3—5, 4—2,*)
НА ДОРОЖКУ 1—2 ПРИГОТОВИТЬСЯ 3—4
РЕЗУЛЬТАТ?
— 3,5
НА ДОРОЖКУ 3—4 ПРИГОТОВИТЬСЯ 5—1
РЕЗУЛЬТАТ?
— 5,0
…**)
ПОСЛЕДНЯЯ ПАРА 4—2
РЕЗУЛЬТАТ?
— 5,3
Протокол, оформленный по итогам этой пульки, показан в таблице.
Участники № 1 2 3 4 5 П НУ ПУ М
Иванов Д. 1 * 3 5 2 0 1 10 19 5
Волков И. 2 5 * 5 3 1 2 14 21 3
Кузнецов М. 3 4 3 * 5 1 1 13 15 4
Лебедев А. 4 5 5 0 * 3 2 13 15 2
Львов В. 5 5 5 5 * 4 20 5 1
П — число побед
НУ — число нанесенных уколов
ПУ — число полученных уколов
М — место
*) На самом деле ЭВМ печатает эти цифры в колонку без запятых.
**) Здесь аналогично ЭВМ печатает результаты боев еще семи пар.