Имя
|
Тип
|
Описание
|
первая_группа
|
Целый
|
Хранит число строк в таблице со списком команд первой группы
|
вторая_группа
|
Целый
|
Хранит число строк в таблице со списком команд второй группы
|
строки_таблицы1
|
Целый
|
Хранит число строк в таблице с результатами игр первой группы
|
строки_таблицы2
|
Целый
|
Хранит число строк в таблице с результатами игр второй группы
|
N
|
Целый
|
Хранит число команд в чемпионате
|
i, j1, j2, x, x1, g, g1
|
Целый
|
Переменные, используемые в качестве счетчиков
|
Класс характеристика_команд_группы
|
название
|
object
|
Хранит название команды
|
очки
|
Целый
|
Хранит число очков заработанных командой
|
выигранные_партии
|
Целый
|
Хранит число партий выигранных командой
|
проигранные_партии
|
Целый
|
Хранит число партий проигранных командой
|
победы_в_гостях
|
Целый
|
Хранит число матчей выигранных в гостях
|
Класс перестановка
|
хозяин
|
object
|
Используется в алгоритме перестановки
|
гость
|
object
|
Используется в алгоритме перестановки
|
Класс полуфинал_и_финал
|
название
|
object
|
Хранит название команды играющей в полуфинале
|
очки
|
Целый
|
Хранит число очков заработанных этой комадой
|
3. Текстовый алгоритм
Начало.
п.1 Ввод команд участвующих в чемпионате
п.1.1. Выполняем цикл по int i = 0; i <
первая_группа; i++
п.1.1.1. Заносим название команды в
группа1[i].название
п.1.2. Выполняем цикл по int i = 0; i <
вторая_группа; i++
п.1.2.1. Заносим название команды в
группа2[i].название
п.2. Заносим в массив группа1[] результаты игр группового
этапа
п.2.1. Выполняем цикл по int i = 0; i < стр1;
i++
п.2.1.1. Выполняем цикл по int x = 0; x <
первая_группа; x++
п.2.1.1.1. Записываем в массив группа1[x]
результаты игр в первой группе
п.3. Выполняем цикл по
int
i = 0, x1
= 1; i < первая_группа
- 1; i++, x1
= i + 1
п.3.1. Выполняем цикл по ; x1 <
первая_группа; x1++
п.4. Выполняем цикл по int i = 0; i < стр2;
i++
п.4.1. Выполняем цикл по int x = 0; x <
вторая_группа; x++
п.4.1.1. Записываем в массив группа2[x]
результаты игр во второй группе
п.5. Выполняем цикл по
int
i = 0, x1
= 1; i < вторая_группа
- 1; i++, x1
= i + 1
п.5.1. Выполняем цикл по ; x1 <
вторая_группа; x1++
п.5.1.1. Сортируем массив группа2[i]
п.6. Создаем массив полуфинал и записываем результаты
игр полуфинала в полуфинал.очки
п.7. Сортируем массив полуфинал
п.7.1. Если полуфинал[0].очки <
полуфинал[1].очки, то меняем местами
полуфинал[0].очки и полуфинал[1].очки
п.7.2. Если полуфинал[2].очки <
полуфинал[3].очки, то меняем местами
полуфинал[2].очки и полуфинал[3].очки
п.8. Создаем массив финал и записываем
результаты игр финала
в финал.очки
п.9. Обрабатываем результаты финала
п.9.1. Если финал[0].очки > финал[1].очки, то
п.9.1.1. Вывод “Победитель ”+ финал[0].название
п.9.2. Иначе
п.9.3. Вывод “Победитель ”+ финал[1].название
п.9.4. Если финал[0].очки == финал[1].очки, то
п.9.5. Вывод “Необходимо сыграть третий
дополнительный матч”
п.9.6. Обрабатываем результаты дополнительного
матча
п.9.7. Если финал[0].очки > финал[1].очки, то
п.9.7.1. Вывод “Победитель ”+ финал[0].название
п.9.8. Иначе
п.9.8.1. Вывод “Победитель ”+ финал[1].название
Конец.
.
Графический алгоритм
int проигранные_партии;int победы_в_гостях;
}перестановка
{object хозяин; public object гость;
}полуфинал_и_финал
{object название; public int очки;
}void ОК_Click(object sender, EventArgs e)
{(Счетчик.Value <= 3)
{.Show("Обычно в чемпионате России
участвуют больше чем 2 или 3 команды. Но программа позволяет обработать
результаты и в этом случае. Команды будут играть в одной
группе.");.Enabled = false;.Enabled = false;
вторая_группа = 1;
первая_группа = Convert.ToInt32(Счетчик.Value);
строки_таблицы2 = 1;(Счетчик.Value == 2)
строки_таблицы1 = 2;
строки_таблицы1 = 3;
}
{.Enabled = true;.Enabled = true;N; double n;=
(int)Счетчик.Value;= (double)Счетчик.Value;(N / 2 + 0.5 == n / 2)
{
первая_группа = N / 2 + 1; вторая_группа = N /
2;
}
{
первая_группа = N / 2; вторая_группа = N / 2;
}(int i1 = 1; i1 != первая_группа; i1++)
{
строки_таблицы1 += первая_группа -
(первая_группа - i1);
}(int i1 = 1; i1 != вторая_группа; i1++)
{
строки_таблицы2 += вторая_группа -
(вторая_группа - i1);
}
{ .Rows[i].HeaderCell.Value =
Convert.ToString(i+1);
}(int i = 0; i < вторая_группа; i++)
{.Rows[i].HeaderCell.Value = (i + 1).ToString();
}.SelectedIndex++;
}void Распределение_Click(object sender,
EventArgs e)
{
характеристика_команд_группы[] группа1 = new
характеристика_команд_группы[первая_группа];
характеристика_команд_группы[] группа2 = new
характеристика_команд_группы[вторая_группа];
перестановка[] гру1 = new
перестановка[строки_таблицы1];
перестановка[] гру2 = new
перестановка[строки_таблицы2];(int i = 0; i < строки_таблицы1; i++) {
гру1[i] = new перестановка(); }(int i = 0; i < строки_таблицы2; i++) {
гру2[i] = new перестановка(); }(int i = 0; i < первая_группа; i++)
{
группа1[i] = new характеристика_команд_группы();
группа1[i].название = tab2[0, i].Value;
}(int i = 0; i < вторая_группа; i++)
{
группа2[i] = new характеристика_команд_группы();
группа2[i].название = tab4[0, i].Value;
}.Visible = true;.Visible = true;.Visible =
true;.Visible = true; j1 = 0, j2 = 0, g = первая_группа - 1, g1 = 1, j11 = 0,
индекс1 = 0;(g != 0)
{+= g;(j1 < j11)
{.Rows[j1].HeaderCell.Value = "1-ый
круг";
гру1[j1].хозяин = tab1.Rows[j1].Cells[0].Value =
группа1[индекс1].название;
гру1[j1].гость = tab1.Rows[j1].Cells[3].Value =
группа1[индекс1 + g1].название;++; g1++;
} g1 = 1; g--; индекс1++;
}(int i = 0; i < j1; i++)
{обмен;
обмен = гру1[i].хозяин; гру1[i].хозяин =
гру1[i].гость; гру1[i].гость = обмен;
} int же1 = j1;(int i = 0; i < же1; i++)
{.Rows[j1].HeaderCell.Value = "2-ой
круг";.Rows[j1].Cells[0].Value = гру1[i].хозяин;.Rows[j1].Cells[3].Value =
гру1[i].гость; j1++;
}(вторая_группа > 1)
{= вторая_группа - 1; int j22 = 0, индекс2 = 0;
g1 = 1;(g != 0)
{+= g;(j2 < j22)
{.Rows[j2].HeaderCell.Value = "1-ый
круг";.Rows[j2].Cells[0].Value = гру2[j2].хозяин = группа2[индекс2].название;.Rows[j2].Cells[3].Value
= гру2[j2].гость = группа2[индекс2 + g1].название;++; g1++;
} g1 = 1; g--; индекс2++;
} int же2 = j2;(int i = 0; i < же2; i++)
{.Rows[j2].HeaderCell.Value = "2-ой
круг";.Rows[j2].Cells[0].Value = гру2[i].гость;.Rows[j2].Cells[3].Value =
гру2[i].хозяин; j2++;
}
}
стр1 = j1; стр2 = j2;
Резгрупповогоэтапа.Visible = true;
}void Резгрупповогоэтапа_Click(object sender,
EventArgs e)
{.Visible = false;.Visible = false;.Visible =
false;.Visible = false;
Резгрупповогоэтапа.Visible = false;.Columns.Add("Column2",
"очки");.Columns.Add("Column2", "очки");.Text =
"Результаты игр";.Text = "Результаты игр";
характеристика_команд_группы[] группа1 = new
характеристика_команд_группы[первая_группа];
характеристика_команд_группы[] группа2 = new характеристика_команд_группы[вторая_группа];(int
i = 0; i < первая_группа; i++)
{
группа1[i] = new характеристика_команд_группы();
группа1[i].название =
tab2.Rows[i].Cells[0].Value;
}(int i = 0; i < вторая_группа; i++)
{
группа2[i] = new характеристика_команд_группы();
группа2[i].название =
tab4.Rows[i].Cells[0].Value;
}(int i = 0; i < стр1; i++)
{(int x = 0; x < первая_группа; x++)
{(группа1[x].название ==
tab1.Rows[i].Cells[0].Value)
{(Convert.ToInt32(tab1.Rows[i].Cells[1].Value)
== 3)
{
группа1[x].очки += 3;
группа1[x].выигранные_партии += 3;
группа1[x].проигранные_партии +=
Convert.ToInt32(tab1.Rows[i].Cells[2].Value);
}
{
группа1[x].выигранные_партии +=
Convert.ToInt32(tab1.Rows[i].Cells[1].Value);
группа1[x].проигранные_партии +=
Convert.ToInt32(tab1.Rows[i].Cells[2].Value);
}
}(группа1[x].название ==
tab1.Rows[i].Cells[3].Value)
{(Convert.ToInt32(tab1.Rows[i].Cells[2].Value)
== 3)
{
группа1[x].очки += 3;
группа1[x].выигранные_партии += 3;
группа1[x].победы_в_гостях += 1;
группа1[x].проигранные_партии +=
Convert.ToInt32(tab1.Rows[i].Cells[1].Value);
}
группа1[x].выигранные_партии +=
Convert.ToInt32(tab1.Rows[i].Cells[2].Value);
группа1[x].проигранные_партии +=
Convert.ToInt32(tab1.Rows[i].Cells[1].Value);
}
}
}
}(int i = 0, x1 = 1; i < первая_группа - 1;
i++, x1 = i + 1)
{(; x1 < первая_группа; x1++)
{
характеристика_команд_группы обмен = new
характеристика_команд_группы();(группа1[i].очки < группа1[x1].очки)
{
обмен = группа1[i]; группа1[i] = группа1[x1];
группа1[x1] = обмен;
}(группа1[i].очки == группа1[x1].очки)
{(группа1[i].выигранные_партии -
группа1[i].проигранные_партии < группа1[x1].выигранные_партии
группа1[x1].проигранные_партии)
{
обмен = группа1[i]; группа1[i] = группа1[x1];
группа1[x1] = обмен;
}(группа1[i].выигранные_партии - группа1[i].проигранные_партии
== группа1[x1].выигранные_партии
группа1[x1].проигранные_партии)
{(группа1[i].победы_в_гостях <
группа1[x1].победы_в_гостях)
{
обмен = группа1[i]; группа1[i] = группа1[x1];
группа1[x1] = обмен;
}(группа1[i].победы_в_гостях == группа1[x1].победы_в_гостях)
{(int индексс = 0; индексс < строки_таблицы1;
индексс++)
{(tab1.Rows[индексс].Cells[0].Value ==
группа1[i].название)
{(tab1.Rows[индексс].Cells[3].Value ==
группа1[x1].название)
{(Convert.ToInt32(tab1.Rows[индексс].Cells[1].Value)
< Convert.ToInt32(tab1.Rows[индексс].Cells[2].Value))
{
обмен = группа1[i]; группа1[i] = группа1[x1];
группа1[x1] = обмен;
}
}
}(tab1.Rows[индексс].Cells[0].Value ==
группа1[x1].название)
{(tab1.Rows[индексс].Cells[3].Value ==
группа1[i].название)
{(Convert.ToInt32(tab1.Rows[индексс].Cells[1].Value)
> Convert.ToInt32(tab1.Rows[индексс].Cells[2].Value))
{
обмен = группа1[i]; группа1[i] = группа1[x1];
группа1[x1] = обмен;
}
}
}
}
}
}
}
}
}(int i = 0; i < первая_группа; i++)
{.Rows[i].Cells[0].Value = группа1[i].название;.Rows[i].Cells[1].Value
= группа1[i].очки;
}(вторая_группа > 1)
{(int i = 0; i < стр2; i++)
{(int x = 0; x < вторая_группа; x++)
{(группа2[x].название ==
tab3.Rows[i].Cells[0].Value)
{(Convert.ToInt32(tab3.Rows[i].Cells[1].Value)
== 3)
{
группа2[x].очки += 3;
группа2[x].выигранные_партии += 3;
группа2[x].проигранные_партии +=
Convert.ToInt32(tab3.Rows[i].Cells[2].Value);
}
{
группа2[x].выигранные_партии +=
Convert.ToInt32(tab3.Rows[i].Cells[1].Value);
группа2[x].проигранные_партии += Convert.ToInt32(tab3.Rows[i].Cells[2].Value);
}
}(группа2[x].название ==
tab3.Rows[i].Cells[3].Value)
{(Convert.ToInt32(tab3.Rows[i].Cells[2].Value)
== 3)
{
группа2[x].очки += 3;
группа2[x].выигранные_партии += 3;
группа2[x].победы_в_гостях += 1;
группа2[x].проигранные_партии +=
Convert.ToInt32(tab3.Rows[i].Cells[1].Value);
}
{
группа2[x].выигранные_партии +=
Convert.ToInt32(tab3.Rows[i].Cells[2].Value);
группа2[x].проигранные_партии +=
Convert.ToInt32(tab3.Rows[i].Cells[1].Value);
}
}
}(int i = 0, x1 = 1; i < вторая_группа - 1;
i++, x1 = i + 1)
{(; x1 < вторая_группа; x1++)
{
характеристика_команд_группы обмен = new
характеристика_команд_группы();(группа2[i].очки < группа2[x1].очки)
{
обмен = группа2[i]; группа2[i] = группа2[x1];
группа2[x1] = обмен;
}(группа2[i].очки == группа2[x1].очки)
{(группа2[i].выигранные_партии -
группа2[i].проигранные_партии < группа2[x1].выигранные_партии -
группа2[x1].проигранные_партии)
{
обмен = группа2[i]; группа2[i] = группа2[x1];
группа2[x1] = обмен;
}(группа2[i].выигранные_партии -
группа2[i].проигранные_партии == группа2[x1].выигранные_партии -
группа2[x1].проигранные_партии)
{(группа2[i].победы_в_гостях <
группа2[x1].победы_в_гостях)
{
обмен = группа2[i]; группа2[i] = группа2[x1];
группа2[x1] = обмен;
}(группа2[i].победы_в_гостях ==
группа2[x1].победы_в_гостях)
{(int ind = 0; ind < строки_таблицы2; ind++)
{(tab3.Rows[ind].Cells[0].Value ==
группа2[i].название)
{(tab3.Rows[ind].Cells[3].Value ==
группа2[x1].название)
{(Convert.ToInt32(tab3.Rows[ind].Cells[1].Value)
< Convert.ToInt32(tab3.Rows[ind].Cells[2].Value))
{
обмен = группа2[i]; группа2[i] = группа2[x1];
группа2[x1] = обмен;
}
}
}(tab3.Rows[ind].Cells[0].Value ==
группа2[x1].название)
{(tab3.Rows[ind].Cells[3].Value ==
группа2[i].название)
{(Convert.ToInt32(tab3.Rows[ind].Cells[1].Value)
> Convert.ToInt32(tab3.Rows[ind].Cells[2].Value))
{
обмен = группа2[i]; группа2[i] = группа2[x1];
группа2[x1] = обмен;
}
}
}
}
}
}
}
}
}
}(int i = 0; i < вторая_группа; i++)
{.Rows[i].Cells[0].Value = группа2[i].название;.Rows[i].Cells[1].Value
= группа2[i].очки;
}.RowCount = 2;
полуфинал_и_финал[] полуфинал = new
полуфинал_и_финал[4];(int i = 0; i < 4; i++)
{
полуфинал[i] = new полуфинал_и_финал();
}(вторая_группа == 1)
{
полуфинал[0].название =
tab2.Rows[0].Cells[0].Value;
полуфинал[1].название =
tab2.Rows[1].Cells[0].Value;
}
{
полуфинал[0].название =
tab2.Rows[0].Cells[0].Value;
полуфинал[1].название =
tab2.Rows[1].Cells[0].Value;
полуфинал[2].название =
tab4.Rows[0].Cells[0].Value;
полуфинал[3].название = tab4.Rows[1].Cells[0].Value;
}(вторая_группа == 1)
{.RowCount = 1;.Rows[0].HeaderCell.Value =
"1 полуфинал";.Rows[0].Cells[0].Value =
полуфинал[0].название;.Rows[0].Cells[3].Value = полуфинал[1].название;
}
{.RowCount = 2;.Rows[0].HeaderCell.Value =
"1 полуфинал";.Rows[1].HeaderCell.Value = "2
полуфинал";.Rows[0].Cells[0].Value =
полуфинал[0].название;.Rows[0].Cells[3].Value =
полуфинал[3].название;.Rows[1].Cells[0].Value =
полуфинал[1].название;.Rows[1].Cells[3].Value = полуфинал[2].название;
}
}void checkBox1_CheckedChanged(object sender,
EventArgs e)
{(checkBox1.CheckState == CheckState.Checked)
{.Visible = true;.Visible = true;.Visible =
true;
}
{.Visible = false;.Visible = false;.Visible =
false;
}
}void Полуфинал_Click(object sender, EventArgs
e)
{
полуфинал_и_финал[] полуфинал = new
полуфинал_и_финал[4];.RowCount = 2;.Rows[0].HeaderCell.Value = "1-ая
игра";.Rows[1].HeaderCell.Value = "2-ая игра";(int i = 0; i <
4; i++)
{ полуфинал[i] = new полуфинал_и_финал();
}(вторая_группа == 1)
{
полуфинал[0].название = tab5.Rows[0].Cells[0].Value;
}
{
полуфинал[0].название =
tab5.Rows[0].Cells[0].Value;
полуфинал[1].название =
tab5.Rows[0].Cells[3].Value;(Convert.ToInt32(tab5.Rows[0].Cells[1].Value) >
Convert.ToInt32(tab5.Rows[0].Cells[2].Value))
{ полуфинал[0].очки += 3; }{ полуфинал[1].очки
+= 3; }
полуфинал[2].название =
tab5.Rows[1].Cells[0].Value;
полуфинал[3].название =
tab5.Rows[1].Cells[3].Value;(Convert.ToInt32(tab5.Rows[1].Cells[2].Value) >
Convert.ToInt32(tab5.Rows[1].Cells[2].Value))
{ полуфинал[2].очки += 3; }{ полуфинал[3].очки
+= 3; }
}(вторая_группа == 1)
{.Rows[0].Cells[0].Value =
полуфинал[0].название;.Rows[0].Cells[3].Value =
полуфинал[1].название;.Rows[1].Cells[0].Value =
полуфинал[1].название;.Rows[1].Cells[3].Value = полуфинал[0].название;
}
{(полуфинал[0].очки < полуфинал[1].очки)
{
полуфинал_и_финал обмен = new
полуфинал_и_финал();
обмен = полуфинал[0]; полуфинал[0] =
полуфинал[1]; полуфинал[1] = обмен;
}(полуфинал[2].очки < полуфинал[3].очки)
{
полуфинал_и_финал обмен = new
полуфинал_и_финал();
обмен = полуфинал[2]; полуфинал[2] =
полуфинал[3]; полуфинал[3] = обмен;
}.Rows[0].Cells[0].Value =
полуфинал[0].название;.Rows[0].Cells[3].Value =
полуфинал[2].название;.Rows[1].Cells[0].Value = полуфинал[2].название;.Rows[1].Cells[3].Value
= полуфинал[0].название;
}.SelectedIndex++;
}void Финал_Click(object sender, EventArgs e)
{
полуфинал_и_финал[] финал = new
полуфинал_и_финал[2];(int i = 0; i < 2; i++)
{ финал[i] = new полуфинал_и_финал(); }
финал[0].название = tab6.Rows[0].Cells[0].Value;
финал[1].название =
tab6.Rows[0].Cells[3].Value;(Convert.ToInt32(tab6.Rows[0].Cells[1].Value) >
Convert.ToInt32(tab6.Rows[0].Cells[2].Value))
{
финал[0].очки += 3;
}{ финал[1].очки += 3;
}(Convert.ToInt32(tab6.Rows[1].Cells[2].Value) >
Convert.ToInt32(tab6.Rows[1].Cells[1].Value))
{ финал[0].очки += 3; }{ финал[1].очки += 3;
}(финал[0].очки > финал[1].очки)
{ label10.Text = "ПОБЕДИТЕЛЬ - " +
Convert.ToString(финал[0].название) + " - ПОЗДРАВЛЯЕМ!!!"; }{
label10.Text = "ПОБЕДИТЕЛЬ - " + Convert.ToString(финал[1].название)
+ " - ПОЗДРАВЛЯЕМ!!!"; }(финал[0].очки == финал[1].очки)
{.RowCount = 3;.Text = "необходимо сыграть
третий, дополнительный матч";.Rows[2].HeaderCell.Value = "3-ая
игра";.Rows[2].Cells[0].Value = финал[0].название;.Rows[2].Cells[3].Value
= финал[1].название;.Show("необходимо сыграть третий дополнительный матч.
Введите результаты третьей игры и нажмите кнопку <ДОП. МАТЧ>");
Допматч.Visible = true;
}
}void Допматч_Click(object sender, EventArgs e)
{
полуфинал_и_финал[] финал = new
полуфинал_и_финал[2];(int i = 0; i < 2; i++)
{ финал[i] = new полуфинал_и_финал(); }
финал[0].название = tab6.Rows[2].Cells[0].Value;
финал[0].очки =
Convert.ToInt32(tab6.Rows[2].Cells[1].Value);
финал[1].название = tab6.Rows[2].Cells[3].Value;
финал[1].очки =
Convert.ToInt32(tab6.Rows[2].Cells[2].Value);(финал[0].очки > финал[1].очки)
{ label10.Text = "ПОБЕДИТЕЛЬ - " +
Convert.ToString(финал[0].название) + " - ПОЗДРАВЛЯЕМ!!!"; }{
label10.Text = "ПОБЕДИТЕЛЬ - " + Convert.ToString(финал[1].название)
+ " - ПОЗДРАВЛЯЕМ!!!"; }
}
}
}
6. Контрольный пример
Введем число
команд 4
Введем команды: Динамо, Цска, ТТГ, Югра.
Введем счет в играх: Динамо - Цска 3:2, Цска -
Динамо 0:3,
ТТГ - Югра 1:3, Югра - ТТГ 3:2.
Результаты группового
этапа:
Результаты игр полуфинала:
Результаты игр финала:
Победитель
- Динамо
. Руководство пользователя
1. На вкладке «Перед
чемпионатом» вводим число команд в чемпионате и нажимаем кнопку «ок». Если
нужны подсказки, то устанавливаем флажок «Показывать подсказки?»
. На вкладке «Групповой
этап» вводим в соответствующие таблицы команды, участвующие в чемпионате, затем
жмем кнопку «распределить по группам»
. Вводим результаты игр
группового этапа и жмем кнопку «Посчитать результаты группового этапа»
. После просмотра
результатов группового этапа переходим на вкладку «Полуфинал»
. Вводим результаты игр
полуфинала и жмем кнопку «Посчитать и перейти в финал»
. Вводим результаты игр
финала и жмем кнопку «Нажмите для просчета финала»
. Смотрим, кто победил, и
закрываем программу.
Список литературы
1) Павловская Т. А. «C#.
Программирование на языке высокого уровня: Учебник для вузов», «Питер», 2007.
2) С. Бобровский «Технологии
С#Builder. Разработка приложений для бизнеса. Учебный курс», «Питер», 2007.
) Рихтер Дж. «CLR via C#.
Программирование на платформе Microsoft .NET Framework 2.0 на языке C#»,
«Питер», 2007.