Создание программы для анализа и прогнозирования чемпионата мира по хоккею
Разработка программного обеспечения, используемого для анализа и прогнозирования хоккейных матчей. Описание интерфейса пользователя. Алгоритм сравнения двух команд, для прогноза матчей. Описание функций приложения и обработка данных, контрольный пример.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.05.2014 |
Размер файла | 6,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
- 1.Условие задачи
- 1.1 Постановка целей и задач
- 1.2 Структура работы с приложением
- 2. Анализ. Предметная область
- 2.1 Описание предметной области
- 2.2 Ознакомление
- 2.3 Назначения и условия использования программы
- 2.4 Описание используемых данных
- 3.Проектирование. Руководство пользователя.
- 3.1 Описание интерфейса пользователя
- 3.2 Статистика хоккейных команд
- 4. Программная часть. Руководство программиста
- 4.1 Описание полей и методов
- 4.2 Описание функций приложения и обработка данных
- 4.3 Возможность дальнейшего развития
- 4.4 Диаграмма классов
- 5.В заключении
- 5.1 Контрольный пример и описание проделанной работы
- 5.2 Итоги проделанной работы
- Используемая литература
- 1. Условие задачи
1.1 Постановка целей и задач
Цель: Разработка программного обеспечения, используемого для анализа и прогнозирования хоккейных матчей. При разработке данной программы были поставлены задачи:
1)Изучить данную область спортивных событий (Хоккей)
2)Осуществить обработку данных, получаемых из конкретного источника.
3)Найти способ сравнения командных характеристик для дальнейшего их использования.
4)Разработать программу для анализа хоккейных матчей и определения финальной статистики команд.
5)Протестировать программное обеспечение.
1.2 Структура работы с приложением
Требования к программе: Программа должна хранить файл статистики, путем анализа которой она проводит прогноз исхода игр. Должен быть создан определенный алгоритм, с помощью которого можно определить победную команду. При этом программа должна учитывать сыгранные игры и редактировать самостоятельно статистику. Требуется составить список команд по очкам по исходам матчей(1 тур чемпионата), с помощью которого определяются лидирующие команды, которые по правилам хоккея допускаются в следующий тур. После программа должна выбрать 3 победителей из них c помощью обработки уже измененной ранее сыгранными матчами статистики. Приложение должно быть написано на языке C# с использованием методов, алгоритмов и полей в Windows Forms для удобства работы с ней пользователю.
Структура приложения очень проста: пользователь выбирает из списка по 8 предложенных команд в каждую группу(группа юг и группа север).Для правильности названия команд, создается специальный список из действующий стран в чемпионате, из которого пользователь выбирает те, что будут участвовать в чемпионате. Перед началом исследования чемпионата в программу загружается файл со статистикой команд последних 3 чемпионатов мира. Для большей точности прогноза учитываются последние участия в чемпионатах. Программа считает средние коэффициенты, по которым происходит определение победителя. У каждой команды имеются очки, которые набираются по определенным правилам. Переменная N отвечает за количество средних коэффициентов команды, которые преобладают у одной из них. Сравнивая N каждой команды, программа выбирает победителя. В первом этапе все команды должны сыграть друг с другом, таким образом, по продолжению команды набирают очки. В конце первого этапа по количеству очков составляется таблица рейтинга, первые 4 места которой проходят в плей-офф. Остальные команды вылетают из чемпионата. Для того чтоб следить за исходом игр, в окне появляются результаты каждого из матчей. В конце появляется таблица результатов, составленная по очкам каждой из стран.
Затем команды с 1 и 4,2 и 3 места играют, проигравшие вылетают. Программа выделяет победителей и происходит матч между ними. Для удобства наблюдения, создана специальная таблица плей-офф, на которой можно видеть результаты игр. Последний матч определяет победителя чемпионата мира по хоккею. Появляется таблица первых 3 мест с командами. Таким образом, программа проводит исследование чемпионата мира по хоккею среди выбранных стран.
Ключевые слова: чемпионат мира по хоккею, хоккей, прогноз, анализ игр, статистика, анализ спортивных событий, спорт, страны. программа, результаты, язык программирования с #, массивы, строки, методы, алгоритм, работа, текстовый файл, база данных, windows from, окно, таблица очков.
2. Анализ. Предметная область
2.1 Описание предметной области
Пользователь выбирает 16 команд из списка, предложенного ему, каждая из которых числится в чемпионате. В программу поступают данные о статистиках игр команд путем списка или вручную. Эти данные берутся со специализированных сайтов. После обработки их должны быть прогнозированы исходы матчей. Именно по такому принципу идет отбор команд и выявление победителей. В соответствии с занесенными данными о командах выводиться турнирная таблица и таблица результатов. Программа сама рассчитывает результаты всех матчей по правилам чемпионата и выводит результаты.
Сайты, с которых загружаются данные по коэффициентам.
Ссылки:
http://hockeyarchives.ru/world/championships.html
http://www.vfs.ee/hokkey/main_2013.htm
http://ru.wikipedia.org/wiki/Чемпионат_мира_по_хоккею_с_шайбой.htm [10]
Для работоспособности программы требуются данные с результатами всех команд(16 команд) прошлых 3 чемпионатов. Программа должна считать ровно 48 участий в чемпионате мира для дальнейшей работы. Затем вычисляется средняя статистика каждой команды по коэффициентам. Сравнивая две команды по этим характеристикам, можно предположить исход игры. На каждый момент сыгранного матча средняя статистика изменяется с учетом последней сыгранно игры. После проведения подсчетов программа выводит таблицу с результатами всех игр и 3 призовых победителя.
Для детального ознакомления с этим видом спорта будут описаны такие аспекты:
1)Хоккей и правила проведения чемпионатов
2)Хоккейная статистика и оценивание команд
3)Команды чемпионата (по странам)
2.2 Ознакомление
Главным событием этого года(2014) является проведение Олимпиады в городе Сочи. Такое бывает раз в десятки лет и потому для многих хоккеистов это единственная Олимпийская игра в их спортивной карьере. Мы должна обеспечить победу нашей сборной. Но текущей подготовки наших хоккеистов не достаточно для такого результата и потому требуется проведение комплексного анализа сборной России. В этом могут помочь современные приложения. Данная программа может обеспечить анализ и предугадать исход игр из анализа подготовки команды по определенной статистике.
Хоккей - вид спорта, в котором две команды пытаются поразить ворота противника шайбой. Команда состоит из порядка 15 человек, на поле играют 5 игроков и 1 вратарь (возможна замена на 6-го игрока). Информация взята [1].
Правила проведения Чемпионата Мира по Хоккею: турнир проходит в 2 этапа.
Первый этап (групповой) - в этом этапе участвует 16 команд, они делятся на 2 группы: запад и восток, по 8 человек. На групповом этапе команды в каждой группе играю между собой. В плей-офф выходят только победители,4 с “запада” и 4 с “востока”. Результаты делаются из таблицы с очками. За победу в основное время команда получает 3 очка, за победу в овертайме (дополнительное время в случае ничьи в основное время) или по буллитам(удары после овертайма) - 2 очка, за поражение в овертайме или по буллитам - 1 очко, за поражение в основное время - 0 очков.
Второй этап (плей-офф) - в данный этап проходят 4 команды с каждой группы. Этап состоит из 1/4 финала, 1/2 финала, матча за третье место и финала. Игры устроены так, чтоб играли по результатам таблицы. Играют 1 и 4 места,2 и 3 места. Игра на “вылет”. Победители проходят в 1/2 финала и играют со 2 местом из противоположной группы. Проигравшие участвую в матче за 3 место, две другие команды выходят в финал.
Такой же принцип взят в программе для вычисления результатов всех игр чемпионата и выявления победителей для проведения анализа спортивных матчей по хоккею.
Хоккейная статистика,взята с источника[10]:
И (сыгранные игры)
В (выигрыши в основное время)
П (проигрыши в основное время)
ВО (выигрыши в овертайме - доп. время.)
ПО (проигрыши в овертайме - доп. время.)
ВБ (выигрыши по послематчевым буллитам)
ПБ (проигрыши по послематчевым буллитам)
ЗШ (заброшенные шайбы)
ПШ (пропущенные шайбы)
О (очки) -- за победу в основное время даётся 3 очка, в случае овертайма (доп. время.) дается 2 очка за победу и 1 за проигрыш.
Команды чемпионата (по странам): Пользователь выбирает команд из списка предложенных стран, т.к. при начале работы требуется создать список стран, принимающих участие в чемпионате мира по хоккею. Данный список будет рассмотрен чуть ниже. Названия команд являются странами т.к. количество команд, участвующих за одну страну велико, но допустима лишь одна команда от страны.
Список стран включенных в список команд таков: Россия, Канада, Чехия, Швеция, США, Финляндия, Великобритания, Словакия, Швейцария, Германия, Австрия, Белоруссия, Болгария, Венгрия, Израиль, Казахстан, Латвия, Нидерланды, Румыния, Сербия, Туркмения, Украина, Хорватия, Эстония.
2.3 Назначения и условия использования программы
Т.к. данная программа писалась под определенные цели, а именно исследование чемпионата мира по хоккею, то область её применения не велика. Тем не мене в области хоккея она будет очень полезна. Сейчас век информационных технологий, что позволяет с помощью некоторых программ контролировать качество игр команд определенного вида спорта. Путем анализа статистики игр команды можно прогнозировать исход игры с другими командами. Требуется готовить команду к чемпионату, но как это делать, если игры не сыграны, а предугадать исходы матчей надо. В этом может помочь данная программа. Путем анализа статистики каждой команды за последние 3 чемпионата, она сравнивает их, т.е. оценивает в процентах относительно друг друга качество игры, и, оперируя этими знаниями, делает прогнозы на счет исхода матчей. Данные могут быть не правдивыми в 20-25%т.к. существует большое количество внешних условий влияющих на игру. Несмотря на это программа работоспособна и готова к использованию.
2.4 Описание используемых данных
Файл, загружаемый перед началом работы программы, содержит характеристики по трем последним чемпионатам по каждой команде. Эти данные корректируются с каждой игрой, исходя из исхода матча. Находится сумма коэффициентов за последние 3 чемпионата, считая сыгранные. В файле содержатся коэффициенты по всем характеристикам, отдельно для каждой команды, (И, В, П, ПО, ВБ, ПБ, ЗШ, ПШ, О). После проведения матча коэффициенты изменяют своё значение для каждой из команд по данным правилам:
В случае если не было ничьи:
Победитель И=И+1; В=В+1; П=П; ВО=ВО; ПО=ПО; ВБ=ВБ; ПБ=ПБ; ЗШ=ЗШ+(ЗШ/И); ПШ=ПШ; О=О+3;
Проигравший И=И+1; В=В; П=П+1; ВО=ВО; ПО=ПО; ВБ=ВБ; ПБ=ПБ; ПШ=ПШ+(ПШ/И); ЗШ=ЗШ; О=О;
В случае ничьи:
Победитель И=И+1; В=В; П=П; ВО=ВО+1; ПО=ПО; ВБ=ВБ; ПБ=ПБ; ЗШ=ЗШ+(ЗШ/И); ПШ=ПШ; О=О+2;
Проигравший И=И+1; В=В; П=П; ВО=ВО; ПО=ПО+1; ВБ=ВБ; ПБ=ПБ; ПШ=ПШ+(ПШ/И); ЗШ=ЗШ; О=О+1;
Основано на правилах игры матча по хоккею[1].
3. Проектирование. Руководство пользователя
3.1 Описание интерфейса пользователя
При начале работы показывается окно, в котором объясняется принцип работы с данной программой. Затем появляется главное окно. Доступны кнопки <открыть>(открыть файл со статистикой) или <создать>(создание статистики). Используются объекты Windows Form, вся инфромация работы взята [6]. Ссылка на сайт, откуда можно взять коэффициенты находится в правом углу, браузер сразу направляет на данный сайт. При загрузке файла высвечивается путь к нему. В случае открытия файла с количеством команд менее 16 программа выдает ошибку, требуется весь список стран, участвующих в чемпионате.
Добавлена кнопка получения информации о создателе. В случае открытия файла возможно редактирование коэффициентов. Чтобы просмотреть статистику нажимаем кнопку <редактировать> . Затем появляется следующее окно.
Данное окно выводится при создании статистики или загрузке существующей и редактировании её. Таблица с данными будет рассмотрена далее. Заполняются 3 последних чемпионата всех команд. При добавлении команды, она автоматически добавляется в таблицы других чемпионатов. Ссылка на сайт, откуда брать данные, дана[10].Предусмотрена проверка правильности ввода, т.е. при введении некорректных данных выдается ошибка. После сохранения статистики, доступна кнопка добавления команд в группы. После её нажатия в таблицы ЮГ и СЕВЕР выводится список команд.
Установление галки, добавляет коману в группу. При этом из списка таблицы СЕВЕР эта команда убирается для избавления исключения дублирования. Повторное нажатие снимает галку и идет обратный процесс. При добавлении 8 команд выдается сообщение о заполнении и становится доступна таблица СЕВЕР. Данный алгоритм написан по книге[6].
После её заполнения пользователь может приступить к анализу чемпионата мира, нажав соответствующую кнопку. Расчеты идут по правилам введения чемпионата хоккея. Таким образом сначала на экране появляется окно 1 тура с таблицей очков каждой из групп и результаты всех иыгранных матчей с выбором победителя.
Вверху даны вкладки для каждой группы. Список команд выдается в порядке убывания по местам. В результатах игр показывается матч 2 стран и победитель, в случае ничьи это пишется. Затем нажатие кнопки осуществляется переход к следующему окну.
Окно 2 тура (плей-офф) имеет 15 текстовых строк, которые составляют таблицу результатов плей-офф и в левом верхнем углу список победителей. Конец программы, можно закрыть её.
3.2 Статистика хоккейных команд
Коэффициенты статистики поясняются выше. База данных, требующаяся для анализа чемпионата, может быть загружена, в таком случае желательно проверить количество команд содержащихся там. При нажатии кнопки <выбрать команды по группам> осуществляется проверка количества стран в списке, если их меньше 16, то программа выдает ошибку и просит пополнить список. Таблица статистики открывается при нажатии кнопки <редактировать> или <создать>. Работа с таблицами[5].
И (сыгранные игры), В и П (выигрыш и проигрыш в основное время),ВО и ПО (выигрыш и проигрыш в овертайме), ВБ и ПБ (выигрыш и проигрыш по буллитам), ЗШ и ПШ (забитые и пропущенные шайбы), О (очки).
Пользователь имеет возможность добавлять команды (названия стран), в 2 других добавляются строки с этими названиями. Требуется больше 15 команд и заполнение всех коэффициентов. В других столбцах кроме “Команда” имеет место ввод только положительных чисел и нуля. Принцип выбора победителя среди двух команд основан на этих коэффициентах. Берутся все виды статистики по 3 чемпионатам, и находится их среднее арифметическое. Эти данные заносятся в массив команд и сравниваются.
Пример таблицы со статистикой за чемпионат мира по хоккею 2013 года с сайта: http://hockeyarchives.ru/world/championships.html
Отсюда данные переносятся в таблицу. Таким образом, чтоб проанализировать чемпионат мира по хоккею за 2014 год требуется внести данные с 2011-2013, если команды не принимали участие в эти года, то брать более ранние статистики. Для статистики требуются данные из столбцов с теми же названиями, все должно быть занесено в свои места. На данной таблице первые 8 столбцов показывают счет сыгранных игр, чтоб занести данные в И (сыгранные игры) вычитаем из этого количества 1. Пример, 8-1=7 сыгранных игр - это число заносим.
4. Программная часть. Руководство программиста
4.1 Описание полей и методов
При создании данной программы была поставлена задача, создать алгоритм сравнения двух команд, чтоб можно было делать прогноз матчей. Основывается он на статистике ранее проведенных чемпионатов. Под нее созданы поля, которые сначала объявляются.
public class Team
{
public string Name;
public double A;
public double B;
public double C;
public double D;
public double E;
public double F;
public double G;
public double H;
public double K;
public double L;
public double ochki=0;
public Team(string Name, double A, double B, double C, double D, double E, double F, double G, double H, double K, double L)
{
this.Name = Name;
this.A = A;
this.B = B;
this.C = C;
this.D = D;
this.E = E;
this.F = F;
this.G = G;
this.H = H;
this.K = K;
this.L = L;
С помощью конструктора присваиваются полям класса Team значения. Name-название команды, A(И), B(В), C(П), D(ВО), E(ПО), F(ВБ), G(ПБ), H(ЗШ), K(ПШ), L(О) см. расшифровка стр. 7 .
public static Team pobeda(Team team1,Team team2, out int n, out Team team11,out Team team22)
{
team11 = team1;
team22 = team2;
Random rnd = new Random();
int a = rnd.Next(2);
n = 0;
Team team = new Team();
int n1 = 0, n2 = 0;
if ((team11.B / team11.A) > (team22.B / team22.A)) n1++; else if ((int)(team11.B / team11.A) != (int)(team22.B / team22.A)) n2++;
if ((team11.C / team11.A) < (team22.C / team22.A)) n1++; else if ((int)(team11.C / team11.A) != (int)(team22.C / team22.A)) n2++;
if ((team11.D / team11.A) > (team22.D / team22.A)) n1++; else if ((int)(team11.D / team11.A) != (int)(team22.D / team22.A)) n2++;
if ((team11.E / team11.A) < (team22.E / team22.A)) n1++; else if ((int)(team11.E / team11.A) != (int)(team22.E / team22.A)) n2++;
if ((team11.F / team11.A) > (team22.F / team22.A)) n1++; else if ((int)(team11.F / team11.A) != (int)(team22.F / team22.A)) n2++;
if ((team11.G / team11.A) < (team22.G / team22.A)) n1++; else if ((int)(team11.G / team11.A) != (int)(team22.G / team22.A)) n2++;
if ((team11.H / team11.A) > (team22.H / team22.A)) n1++; else if ((int)(team11.H / team11.A) != (int)(team22.H / team22.A)) n2++;
if ((team11.K / team11.A) < (team22.K / team22.A)) n1++; else if ((int)(team11.K / team11.A) != (int)(team22.K / team22.A)) n2++;
if ((team11.L / team11.A) > (team22.L / team22.A)) n1++; else if ((int)(team11.L / team11.A) != (int)(team22.L / team22.A)) n2++;
Статический метод определения победителя возвращает команду победителя team, 2 команды загружаются в метод team1 и team2, выводит n(1-ничья, 0-небыло ничьи) и команды с измененными коэффициентами team11 и team22. Работа с классами[2]. Статистика сравнивается, пример если большая часть коэффициентов у первой команды лучше, то n1 будет иметь значение больше чем n2.
if (n1 > n2)
{
team = team11;
team11.A++; team22.A++;
team11.B++; team22.C++;
team11.ochki = team11.ochki + 3;
team11.H = team11.H + (team11.H / team11.A);
team22.K = team22.K + (team22.K / team22.A);
team11.L = team11.L + 3;
} return team;
Сравниваются n1 и n2, выбирается победная команда, в этом случает первая команда. Статистика меняется по-разному в случае победы в основное время и дополнительное!По правилам хоккея[1]. Это пример победы в основное время.
Random rnd = new Random();
int a = rnd.Next(2);
Если произошла ничьи(n1=n2) компьютер сам определяет, кто побеждает путем значения переменной a(1 - первая команда,0 - вторая);
if (a == 1)
{
team = team11;
team11.A++; team22.A++;
team11.D++; team22.E++;
team11.ochki = team11.ochki + 2;
team22.ochki = team22.ochki + 1;
team11.H = team11.H + (team11.H / team11.A);
team22.K = team22.K + (team22.K / team22.A);
team11.L = team11.L + 2; team22.L = team22.L + 1;
} return team;
Вот пример изменения статистики команд в случае ничьи и победы первой команды в доп. время. Такой принцип всего алгоритма сравнения команд.
public static List<Team> puzirk(List<Team> team)
{
Team t;
for (int a = 0; a < team.Count; a++)
for (int b = a+1; b <= team.Count; b++)
{
if (team[b - 1].ochki > team[a].ochki)
{
t = team[b - 1];
team[b - 1] = team[a];
team[a] = t;
}
}
return team;
Данный метод(взят с источника [7]) пузырьковой сортировки по очкам очень важен ,т.к. в конце 1 тура чемпионата требуется вывести список команд по местам(очки по убываю) и отобрать команды первых 4 мест с каждой группы.
public Team doubletour(Team team1, Team team2)
{
team = Team.pobeda(team1, team2, out n, out team11, out team22);
if (team == team1) return team11; else return team22;
}
В классе Team4 данный метод только возвращает победную команду т.к. другие поля не требуются.
public Team prougr(Team team1, Team team2)
{
team = Team.pobeda(team1, team2, out n, out team11, out team22);
if (team != team1) return team11; else return team22;
}
Так же нужен метод определения проигравшей команды. Он используется для определения 2 места чемпионата.
4.2 Описание функций приложения и обработка данных
В начале работы с программой требуется база статистики. Заполняется она вручную, но есть возможность сохранения и дальнейшего открытия её.
private void Form2_Load(object sender, EventArgs e)
{
string str = " ";
string[] info = new string[31];
double[] info2 = new double[30];
double[] info3 = new double[10];
if (check == 1)
{
StreamReader reader = new StreamReader(path);
while ((str = reader.ReadLine())!=null)
{
info = str.Split(';');
Table.Rows.Add(info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7], info[8], info[9], info[10]);
dataGridView1.Rows.Add(info[0], info[11], info[12], info[13], info[14], info[15], info[16], info[17], info[18], info[19], info[20]);
dataGridView2.Rows.Add(info[0], info[21], info[22], info[23], info[24], info[25], info[26], info[27], info[28], info[29], info[30]);
}
reader.Close();
check = 0;
}
}
Данный метод срабатывает при загрузке Form2 при нажатии кнопки <редактировать>. Считываются данные построчно с открытого файла с потокового чтения StreamReader и метода Split (данные принципы взяты с [8]),который разделяет строку на массив слов с “;” между элементами. Затем эти массивы выводятся в таблицу, которую видит пользователь и редактирует её, добавляя команды и изменяя коэффициенты. При нажатии кнопки <создать> данный метод не срабатывает, т.к. в Form2 с помощью конструктора дается значение check(0-метод не срабатывает,1-срабатывает). Программа проверяет количество добавленных команд, и если количество меньше 16 то оповещает об этом.
double[] into0 = new double[10];
double[] into1 = new double[10];
double[] into2 = new double[10];
double[] into3 = new double[10];
team.Clear();
for (int i = 0; i < Table.Rows.Count - 1; i++)
{
string stroka = "";
for (int j = 0; j < 10; j++)
{
into0[j] = Convert.ToDouble(Table.Rows[i].Cells[j + 1].Value);
into1[j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j + 1].Value);
into2[j] = Convert.ToDouble(dataGridView2.Rows[i].Cells[j + 1].Value);
into3[j] = (into0[j] + into1[j] + into2[j]);
}
string Name = Table.Rows[i].Cells[0].Value.ToString();
team.Add(new Team(Name, into3[0], into3[1], into3[2], into3[3], into3[4], into3[5], into3[6], into3[7], into3[8], into3[9]));
В случае удовлетворения проверки количества команд больше 15 срабатывает данный алгоритм считывания данных с таблицы. Изначально с помощью циклов программа обрабатывает все строки и столбцы, которые добавляются в массивы. Находятся суммированные значения статистики и присваиваются полям объекта класса Team, проходя по всем строкам таблицы, создается список команд со своими коэффициентами. Именно с этим списком программа дальше будет работать.
StreamWriter writer = new StreamWriter(path);
for (int b = 0; b < 10; b++) stroka = stroka + ";" + into0[b];
for (int b = 0; b < 10; b++) stroka = stroka + ";" + into1[b];
for (int b = 0; b < 10; b++) stroka = stroka + ";" + into2[b];
writer.WriteLine(stroka);
} writer.Close();
Данная часть метода отвечает за сохранение новых данных таблицы в изначально открытый или созданный файл. Так что возможно снова редактировать данные.
for (int i = 0; i < team2.Count; i++)
checkedListBox1.Items.Add(team2[i].Name);
for (int i = 0; i < team2.Count; i++)
checkedListBox2.Items.Add(team2[i].Name);
Затем пользователь может перейти к добавлению команд в группы ЮГ и СЕВЕР. В оба листа загружается список команд. Но нужен алгоритм, чтоб при установлении галки команда удалялась из 2 листа, а при отмене снова добавлялась(основан на принципах описанных в [6]).
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int m = 0;
for (int i = 0; i < prov.Count; i++)
if ((int)prov[i] == checkedListBox1.SelectedIndex) m = 1;
if (m == 1)
{
checkedListBox2.Items.Insert(checkedListBox1.SelectedIndex, checkedListBox1.Items[checkedListBox1.SelectedIndex]);
team3.Remove(team2[checkedListBox1.SelectedIndex]);
prov.Remove(checkedListBox1.SelectedIndex);
}
else
{
checkedListBox2.Items.Remove(checkedListBox1.Items[checkedListBox1.SelectedIndex]);
team3.Add(team2[checkedListBox1.SelectedIndex]);
prov.Add(checkedListBox1.SelectedIndex);
}
Данный алгоритм осуществляет проверку выбранной команды для таблицы ЮГ. Щелчок по команде, добавляет её в prov и удаляет из листа группы СЕВЕР. Если она уже существует в выбранном списке группы ЮГ - prov, то второй щелчок по ней означает, что галка снята, и надо удалить её из prov и снова добавить в лист группы СЕВЕР. Параметр m отвечает за эту проверку. Таким образом, выбрав 8 команд, они содержатся в prov и удалены из листа СЕВЕР. Список team3 так же имеет все выбранные команды. В дальнейшем программа уже работает с ним, что показывать результаты игр в группе ЮГ.
private void checkedListBox2_SelectedIndexChanged(object sender, EventArgs e)
{
int m = 0;
for (int i = 0; i < prov.Count; i++)
if ((int)prov[i] == checkedListBox2.SelectedIndex) m = 1;
if (m == 1)
{
for (int i = 0; i < team2.Count; i++)
if ((string)checkedListBox2.Items[checkedListBox2.SelectedIndex] == team2[i].Name)
team4.Remove(team2[i]);
prov.Remove(checkedListBox2.SelectedIndex);
}
else
{
for (int i = 0; i < team2.Count; i++)
if ((string)checkedListBox2.Items[checkedListBox2.SelectedIndex] == team2[i].Name)
team4.Add(team2[i]);
prov.Add(checkedListBox2.SelectedIndex);
}
Этот алгоритм основан на том же принципе, только используется для добавления команд в team4(команды группы СЕВЕР). Т.к. при удалении из списка команды индексы команд так же изменяются, то массивы команд не изменяются. Удаляются команды из листа. Т.е. мы проверяем индекс выбранной команды и добавляем её в team4, если совпал. Список prof так же служит для проверки состояния галки, что при двойном щелчке команда добавляется и удаляется.
Team team11, team22, team;
int n;
for (int i = 0; i < team3.Count; i++)
for (int j = i + 1; j < team3.Count; j++)
{
n = 0;
team=Team.pobeda(team3[i],team3[j], out n,out team11,out team22);
team3[i] = team11;
team3[j] = team22;
if (n != 1)
{
listBox3.Items.Add(String.Format("{0,20} победа : {1} ", (team3[i].Name + " : " + team3[j].Name), team.Name));
}
else
{
listBox3.Items.Add(String.Format("{0,20} (ничья)победа в доп.вр:{1} ", (team3[i].Name + " : " + team3[j].Name), team.Name));
}
После выбора команд программа приступает к анализу чемпионата. По правилам 1 тура все команды должны друг с другом сыграть. Эта часть кода за это отвечает. Запуская метод pobeda с двумя командами по всему цикл, меняется статистика команд и выводится в текстовое окно результаты игр. Победитель - team, tea11 и team22 команды с уже измененными в результате игры статистиками(работа с циклами и классами [3])). В конце используя метод пузырьковой сортировки puzirk, список данных команд выводится на экран с уже набранными очками по 1 туру.
textBox7.Text = team3[0].Name;
textBox8.Text = team4[3].Name;
textBox9.Text = team4[1].Name;
textBox10.Text = team3[2].Name;
textBox11.Text = team4[0].Name;
textBox12.Text = team3[3].Name;
textBox13.Text = team3[1].Name;
textBox14.Text = team4[2].Name;
team3[0] = this.doubletour(team3[0], team4[3]);
team3[2] = this.doubletour(team4[1], team3[2]);
team3[3] = this.doubletour(team4[0], team3[3]);
team3[1] = this.doubletour(team3[1], team4[2]);
textBox6.Text = team3[0].Name;
textBox5.Text = team3[2].Name;
textBox4.Text = team3[3].Name;
textBox3.Text = team3[1].Name;
team4[0] = this.doubletour(team3[0], team3[2]);
team4[1] = this.doubletour(team3[3], team3[1]);
team4[2] = this.prougr(team3[0], team3[2]);
team4[3] = this.prougr(team3[3], team3[1]);
textBox15.Text = team4[0].Name;
textBox16.Text = team4[1].Name;
textBox1.Text = "1 место:" + this.doubletour(team4[0], team4[1]).Name;
listBox1.Items.Add(String.Format(" 1 место: "+ this.doubletour(team4[0], team4[1]).Name));
listBox1.Items.Add(String.Format(" 2 место: "+ this.prougr(team4[0], team4[1]).Name));
listBox1.Items.Add(String.Format(" 3 место: "+ this.doubletour(team4[2], team4[3]).Name));
Переходя во 2 тур, берутся по 4 команды с каждой группы, имеющие наивысшие очки. Это реализовать легко, т.к. team3 и team4 имеют сортировку по очкам. Чтобы составить турнирную таблицу используются строки на форме, которым присваиваются победные команды. Используются методы doubletour (возвращает победителя) и prougr (возвращает проигравшего). Команды играю по правилам чемпионата мира по хоккею. После этого выводятся первые три призовых места в текстовый лист.
4.3 Возможность дальнейшего развития
Есть возможность улучшения путем построения анализа программы не только на статистике чемпионатов, но и на счете ранее сыгранных игр. Т.е. программа будет определять победителя, при этом еще прогнозируя счет с которым сыграют команды. Тогда и количество коэффициентов статистики значительно увеличится, т.к. она будет вестись еще и по играм. С помощью такого алгоритма прогноз чемпионата будет более точным. Но есть минус этого алгоритма то, что для осуществления его требуется базы данных с очень большим количеством информации, которую вручную тяжело обрабатывать. Поэтому требуется приложение для обработки сайтов статистики, чтобы она автоматически сканировалась и сохранялась в файл. Это значительно облегчит работу с программой. Если осуществить автоматическую обработку данных, то и количество чемпионатов можно увеличить с 3 до большего количества. В таком случае программа будет обрабатывать статистику игр и чемпионатов за последние десятилетия, выявляя закономерности игр и путем их анализа делать прогнозы на чемпионаты, которые проходят в данный момент времени.
4.4 Диаграмма классов
Код данной программы состоит из 6 классов. Первые 4 это классы Windows Form, Program и Team. Показаны все методы и поля данных классов. Form 1 отвечает за начальное окно загрузки файла и выбора команд. Form 2 - это окно для редактирования статистики. Form 3 выводит таблицу очков и результаты игр 1 тура. Form 4 выводит таблицу результатов и список призовых мест. Класс Team имеет 11 полей предназначенных под статистику, конструктор для присваивания этих коэффициентов, класс имеет методы расчета победителя с изменением статистических данных и пузырьковую сортировку по очкам. (информация о создании класса диаграмм взята с [4]).
Поля, обозначенные черным цветом, созданы для хранения информации, с которой идет работа (это параметры условий, массивы команд, текстовые файлы и т.д.) Остальные поля это объекты Windows Form, которые отвечают за внешний интерфейс программы. Так же описаны все методы, использующиеся в программе, главные фрагменты кода были даны выше.
5. В заключении
5.1 Контрольный пример и описание проделанной работы
Проводилась проверка чемпионата мира по хоккею за 2013 год на основе статистики за 2009-2012. Как показала практика, программа выдает результаты имеющие совпадение на 65-70%, т.к. существует множество факторов влияющих на игру, а программа опирается на коэффициенты прошлых чемпионатов. Вот демонстрация одного из примеров.
Я открыл уже существующий файл со статистикой последних 4 лет. Все коэффициенты были занесены ранее вручную с сайта, который дан в форме в левом нижнем углу. Данные были сохранены, и затем программа перешла к выбору команд в группы ЮГ и СЕВЕР.
Сопоставив список команд, как он был в чемпионате, я выбрал по 8 команд, которые принимали участие и были разделены на ЮГ и СЕВЕР. Существует возможность изменения списков в случае, если была допущена ошибка и команда загружена не в ту таблицу.
Нажав кнопку перехода к чемпионату, на экране появилось окно с результатами игр 1 тура и списком команд, сортированных по очкам, и вкладками для каждой из групп. На скриншоте показаны результаты, выданные программой после анализа статистики. Ниже рисунок демонстрирует настоящие результаты за 2013 год чемпионата мира по хоккею. Как видно результаты отличаются всего на 1-2 места в таблице.
Это таблица очков и результатов группы СЕВЕР. Ниже таблица чемпионата мира по хоккею по второй группе. Если их сравнить, то видно 60-65% совпадения. Затем переходим ко 2 туру (плей-офф).
Вылезло последнее окно с результатами 2 тура. Данная таблица плей-офф демонстрирует результаты игр. Команды взяты по правилам проведения чемпионата. В таблице показаны 3 победные страны. Сравним их с результатами уже проведенного чемпионата мира по хоккею в 2013 году. Места были таковыми 1)Швеция 2)Швейцария 3)США Результаты программы 1) Швеция 2)Финляндия 3)США. На этом работа с программой была закончена.
5.2 Итоги проделанной работы
Путем анализа книг по хоккею, была проделана работа над созданием программы для анализа и прогнозирования чемпионата мира по хоккею, основанная на алгоритме сравнения статистики ранних чемпионатов. Данное ПО написано на языке программирования C#. Было изучено много литературы для написания самой программы, а именно работа с массивами, строками, полями, циклами и в особенности работой с текстовыми файлами.
В начале написания работы была изучена данная область вида спорта: правила проведения игр, статистика, страны, принимающие участие, манера игры и многие аспекты. Был реализован алгоритм сравнения команд для прогнозирования выигрыша одной из команд в матче. Он выдавал победителя с помощью данного алгоритма, при этом статистика команд по мере игр так же меняются.
Путем изучения работы со строками, текстовыми файлами, потоками ввода и вывода был создан файл, позволяющий содержать статистику, изменять её, сохранять, добавлять и работать с содержащейся информацией. Данные эти выводились на таблицу, которую можно редактировать. За это отвечал алгоритм чтения и перезаписи данных таблицы. Таким образом, была осуществлена обработка статистики, полученная с сайта.
программа прогнозирование чемпионат хоккей
Используемая литература
1. Уваров В.Ф. Хоккей. Правила соревнований.- М.: физкультура и спорт, 1985 -
79 стр.
2. Фролов А, Фролов Г. Язык C#. Самоучитель. - М.: Диалог-МИФИ, 2003 - 560 стр.
3. Шилдт Герберт- C# Учебный Курс. - Спб.: Питер, 2003, 471 стр.
4. Шилдт Герберт. Полный справочник по C#. - М.: Вильямс, 2004 - 752
5. сайт по ознакомлению с языком C#, 2011 - 2014 <http://professorweb.ru/my/csharp/charp_theory/level1/index.php>
6. Лабор В. Visual C# Создание приложений для Windows. - Мн.: Харвест, 2003- 385 стр.
7. Павловская. C# Программирование на языке высокого уровня. - Спб.: Питер, 2009 - 432 стр.
8. Петцольд Ч. Программирование для Microsoft Windows на С#. Том 1. - М.: Русская Редакция, 2002- 570 стр.
9. Бишоп Д. C# в кратком изложении. - М.: Бином. Лаборатория знаний,2005 - 467 стр.
10. Хоккейные архивы, 2009 - 2014 <http://hockeyarchives.ru/world/championships.html>
Размещено на Allbest.ru
...Подобные документы
Описание использованных структур данных и разработка программы, обеспечивающей сжатие данных по алгоритму LZ77 с пошаговой визуализацией. Описание процедур, функций, структуры приложения и интерфейса пользователя. Тест и анализ работы алгоритма LZ77.
курсовая работа [537,9 K], добавлен 28.06.2011Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Общая характеристика и функциональное назначение проектируемого программного обеспечения, требования к нему. Разработка и описание интерфейса клиентской и серверной части. Описание алгоритма и программной реализации приложения. Схема базы данных.
курсовая работа [35,4 K], добавлен 12.05.2013Создание программного обеспечения в среде Visual Basic for Applications для проведения теста по работе полушарий мозга человека. Описание команд. Разработка интерфейса и тестирование программы. Листинг приветствия и задаваемых пользователю вопросов.
курсовая работа [387,1 K], добавлен 09.03.2014Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.
курсовая работа [1,2 M], добавлен 16.08.2012Разработка алгоритмов на динамических структурах данных. Описание структуры данных "стек". Процедуры добавления и удаления элемента, очистки памяти. Код распечатки содержимого всего стека. Инструкция пользователя, код программы, контрольный пример.
курсовая работа [22,9 K], добавлен 19.10.2010Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013Анализ технического задания. Разработка интерфейса программы и ее алгоритмов. Кодирование и тестирование разработанного программного обеспечения, оценка его практической эффективности и функциональности. Формирование, содержание руководства пользователя.
курсовая работа [2,0 M], добавлен 31.07.2012Проектирование программного обеспечения для создания баз данных о работах студентов университета при помощи языка Visual Basic. Разработка интерфейса пользователя. Руководство для системного программиста. Краткое описание алгоритма работы с программой.
курсовая работа [2,6 M], добавлен 19.03.2010Создание программного приложения для осуществления основных функций по заказу мебели, регистрации клиентов, сотрудничеству с поставщиками. Разработка интерфейса прикладной программы. Логическое проектирование базы данных и SQL-скрипт генерации таблиц.
курсовая работа [2,4 M], добавлен 11.02.2013Создание web-сайта для сбора статистических данных, прогнозирования возможностей системы общего образования и анализа демографического состояния региона в динамике. Проектирование базы данных, разработка компонентов, алгоритмов и программного обеспечения.
дипломная работа [3,1 M], добавлен 15.04.2013Обзор программных продуктов для анализа изображений: ABBYY FineReader и OCR CuneiForm. Понятие и виды нейронных сетей. Алгоритм обучения персептрона. Результаты исследований и описание интерфейса программы. Расчет себестоимости программного обеспечения.
дипломная работа [590,7 K], добавлен 17.08.2011Разработка технологии обработки информации, структуры и формы представления данных. Проектирование программных модулей. Блок-схема алгоритма и исходный код программы анализа арифметического выражения, синтаксического анализа простой программы на языке С.
курсовая работа [2,4 M], добавлен 12.12.2011Рассмотрение инфологической и даталогической модели базы данных кинотеатров города. Разработка базы данных в программе MS Access. Описание структуры приложения и интерфейса пользователя. Изучение SQL-запросов на вывод информации о кинотеатре и о фильме.
курсовая работа [1,1 M], добавлен 04.09.2014Разработка программного кода и алгоритма действий приложения "калькулятор". Использование функций в программе Matlab. Разработка кнопок, опций, интерфейса, оформление. Части кода Matlab и тестовый набор. Инструкция пользователя по работе программы.
курсовая работа [527,1 K], добавлен 27.09.2014Теоретические основы разработки приложения, реализующего подсвечивание ключевых слов. Описание используемых процедур и функций, структуры программы, интерфейса пользователя. Системные требования для работы приложения, анализ результаты его тестирования.
курсовая работа [1,2 M], добавлен 07.07.2012Описание предметной области. Алгоритм разработки приложения для создания, управления и просмотра базы данных библиотечной литературы. Построение схемы классов для графического отображения функций программы и анализа взаимосвязей между различными классами.
курсовая работа [2,0 M], добавлен 14.12.2012- Создание приложения автоматизации анализа финансово-хозяйственной деятельности в ООО "Уралэнерготел"
Исследование предметной области предприятия ООО "Уралэнерготел". Проект приложения автоматизации анализа результатов финансово-хозяйственной деятельности компании. Формализация требований к приложению пользователя. Создание базы данных и интерфейса.
дипломная работа [2,3 M], добавлен 11.07.2014 Разработка принципиальной схемы, выбор управляющего микроконтроллера. Общий алгоритм работы программы. Блок анализа и реализации команд, принятых от персонального компьютера. Описание используемых интерфейсов. Формат данных RS-232C, листинг программы.
курсовая работа [1,2 M], добавлен 26.12.2012Применение программного обеспечения для разработки игры "Быки и коровы". Описание алгоритма и интерфейса пользователя программы. Назначение и область применения и описание возможностей программы. Рассмотрение списка сообщений об ошибках программы.
курсовая работа [799,2 K], добавлен 26.04.2021