Начало Графический алгоритм
Выбор страны
Ввод
имена участников
выбрана страна и
И имена не равны « »
Что-то не ввели
Нет
Да
Нажатие кнопки добавить жертв
Создает команду с именем выбранной команды
Создает 4 спортсменов с именами введенными и страны им дает из выбранной страны
Созданной команде дает этих 4 спортсменов
Продолжить?
Нет
Да
Выбор страны
Ввод улова спортсмена выбранной страны
Присваивает значения введенные уловам за 1 и 2 дни спортсменам
Всем спорстменам введены уловы?
Нет
Да
Для i 0…колво_спортсменов
Спортсмен[i].уловоб = улов1+улов2
Для i 0…колво_команд
Для j 0… колво_спорт_в_команде
команда[i].улов1 += спорт[j].улов1
команда[i].улов2 += спорт[j].улов2
команда[i].уловоб = улов1+ улов2
i2= 1; i3= 0; i4 = 0;
I2<колво_спортсменов
Нет
Нет
Да
I1= 0; му1= 0;му2 = 0;
I1<колво_спортсменов
Да
Му1< спорт[i1].улов1
Место1 = 0
Да
Нет
Му2< спорт[i1].улов2
Место1 = 0
Му1 = спорт[i1].улов1
I3= i1
Му2 = спорт[i1].улов2
I4= i1
Нет
Да
I1++
Нет
Спорт[i3].mesto1 = i2; спорт[i4].mesto2 = i2; I2++
Алгоритм для спортсменов и команд
Со 2 по 3 повторить
Спорт[i].сумма_мест = место1 +место2
I1 = спорт[0].сумма_мест; i2 = спорт[0].уловоб;
i3 = спорт[0].улов1
спорт[i].сумма_мест = место1 +место2
Да
Нет
I1==спорт[i].сумма_мест
спорт[i].местооб = 1
Алгоритм для спортсменов и команд
Со 3 по 4 повторить
I2 = спорт[i].уловоб
Да
Нет
I2!=спорт[i]. уловоб
спорт[i].местооб = 0
I3 = спорт[i].улов1
Да
Нет
I3!=спорт[i].Улов1
спорт[i].местооб = 0
спорт[i].место1 ==1
Вывод
Спорт[i].imya
спорт[i].место1 ==1
Вывод
Спорт[i].imya
спорт[i].место1 ==1
Вывод
Спорт[i].imya
конец
Алгоритм для спортсменов и команд
Со 4 по 5 повторить
Текст программы
Formvvod.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Рыбалка_курсач
{
public partial class Formvvod : Form
{
public int nst = 0;
public int nsp = 0;
public int spvkom = 4;
TreeNode[] tn;
public komanda[] vsekom;
public sportsmen[] vsespotmens;
public Formvvod()
{
InitializeComponent();
vsekom = new komanda[comboBoxstrani.Items.Count];
for (int p = 0; p < comboBoxstrani.Items.Count; p++)
{
vsekom[p] = new komanda();
vsekom[p].sport = new sportsmen[spvkom];
}
tn = new TreeNode[comboBoxstrani.Items.Count];
vsespotmens = new sportsmen[comboBoxstrani.Items.Count * spvkom];
for (int g = 0; g < comboBoxstrani.Items.Count; g++)
tn[g] = new TreeNode();
}
private void button1_Click(object sender, EventArgs e)
{
textimya1.Text.Trim();
textimya2.Text.Trim();
textimya4.Text.Trim();
textimya5.Text.Trim();
if ((comboBoxstrani.SelectedIndex != -1) && (textimya1.Text != "") && (textimya2.Text != "") && (textimya4.Text != "") && (textimya5.Text != ""))
{
vsekom[nst].strana = comboBoxstrani.SelectedItem.ToString();
vsespotmens[nsp] = new sportsmen(textimya1.Text, comboBoxstrani.SelectedItem.ToString());
vsekom[nst].sport[0] = vsespotmens[nsp];
nsp++;
vsespotmens[nsp] = new sportsmen(textimya2.Text, comboBoxstrani.SelectedItem.ToString());
vsekom[nst].sport[1] = vsespotmens[nsp];
nsp++;
vsespotmens[nsp] = new sportsmen(textimya4.Text, comboBoxstrani.SelectedItem.ToString());
vsekom[nst].sport[2] = vsespotmens[nsp];
nsp++;
vsespotmens[nsp] = new sportsmen(textimya5.Text, comboBoxstrani.SelectedItem.ToString());
vsekom[nst].sport[3] = vsespotmens[nsp];
nsp++;
tn[nst] = treeViewkomandi.Nodes.Add(vsekom[nst].strana);
tn[nst].Nodes.Add(vsekom[nst].sport[0].imya);
tn[nst].Nodes.Add(vsekom[nst].sport[1].imya);
tn[nst].Nodes.Add(vsekom[nst].sport[2].imya);
tn[nst].Nodes.Add(vsekom[nst].sport[3].imya);
nst++;
comboBoxstrani.Items.RemoveAt(comboBoxstrani.SelectedIndex);
textimya1.Clear();
textimya2.Clear();
textimya4.Clear();
textimya5.Clear();
}
else
{
MessageBox.Show("Извините, но вы чтото не сделали. ай-ай-ай");
}
}
private void but_MouseMove(object sender, MouseEventArgs e)
{
but.Image = global::Рыбалка_курсач.Properties.Resources.butup;
}
private void but_Click(object sender, EventArgs e)
{if (nsp > 0)
{
Formsost frm = new Formsost();
frm.Owner = this;
this.Hide();
frm.Show();
}
}
private void Formvvod_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
private void but_MouseLeave(object sender, EventArgs e)
{
but.Image = global::Рыбалка_курсач.Properties.Resources.but;
}
}
public class komanda
{
public string strana;
public int kulov1;
public int kulov2;
public int kulovob;
public int kmesto1;
public int kmesto2;
public int kmestoob;
public int minmestsum;
public sportsmen[] sport;
}
public class sportsmen
{
public string strana;
public string imya;
public int ulov1;
public int ulov2;
public int ulovob;
public int mesto1;
public int mesto2;
public int mestoob;
public int minmestsum;
public sportsmen(string i,string s)
{
imya = i;
strana = s;
}
}
}
Formsost
namespace Рыбалка_курсач
{
public partial class Formsost : Form
{
public Formvvod p;
int vce = 0;
public Formsost()
{
InitializeComponent();
}
private void Formsost_Load(object sender, EventArgs e)
{
p = Owner as Formvvod;
for (int i = 0; i < p.nst; i++)
{
comboBoxkomandi.Items.Add(p.vsekom[i].strana);
}
for (int o = 0; o < p.spvkom; o++)
dataGridViewsorev.Rows.Add(' ', ' ', ' ');
comboBoxkomandi.SelectedIndex = 0;
for (int i = 0; i < p.spvkom; i++)
{
dataGridViewsorev[0, i].Value = p.vsekom[comboBoxkomandi.SelectedIndex].sport[i].imya;
dataGridViewsorev[1, i].Value = p.vsekom[comboBoxkomandi.SelectedIndex].sport[i].ulov1;
dataGridViewsorev[2, i].Value = p.vsekom[comboBoxkomandi.SelectedIndex].sport[i].ulov2;
}
}
private void comboBoxkomandi_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBoxkomandi.SelectedIndex != -1)
{
for (int i = 0; i < p.spvkom; i++)
{
dataGridViewsorev[0, i].Value = p.vsekom[comboBoxkomandi.SelectedIndex].sport[i].imya;
dataGridViewsorev[1, i].Value = p.vsekom[comboBoxkomandi.SelectedIndex].sport[i].ulov1;
dataGridViewsorev[2, i].Value = p.vsekom[comboBoxkomandi.SelectedIndex].sport[i].ulov2;
}
}
}
private void dataGridViewsorev_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
string str = dataGridViewsorev[e.ColumnIndex, e.RowIndex].Value.ToString();
str.Trim();
if (e.ColumnIndex == 1)
{
p.vsekom[comboBoxkomandi.SelectedIndex].sport[dataGridViewsorev.CurrentRow.Index].ulov1 = int.Parse(str);
vce++;
}
else if (e.ColumnIndex == 2)
{
p.vsekom[comboBoxkomandi.SelectedIndex].sport[dataGridViewsorev.CurrentRow.Index].ulov2 = int.Parse(str);
vce++;
}
if (vce == p.nsp * 2)
{
buttonrez.Visible = true;
buttonrez.Focus();
}
dataGridViewsorev[e.ColumnIndex, e.RowIndex].Value = str;
}
private void buttonrez_Click(object sender, EventArgs e)
{
Formrez frm2 = new Formrez();
frm2.Owner = this;
frm2.Show();
buttonrez.Visible = false;
}
private void Formsost_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
private void dataGridViewsorev_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar))
e.Handled = true;
}
private void dataGridViewsorev_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress += dataGridViewsorev_KeyPress;
}
}
}
Formrez
namespace Рыбалка_курсач
{
public partial class Formrez : Form
{
public Formsost r;
public Formrez()
{
InitializeComponent();
}
private void Formrez_Load(object sender, EventArgs e)
{
r = Owner as Formsost;
//MessageBox.Show(r.p.nst.ToString());
dataGridViewrez.Rows.Add("личный зачет");
dataGridViewrez.Rows.Add("командный зачет");
for (int p = 0; p < r.p.nsp; p++)
r.p.vsespotmens[p].ulovob = r.p.vsespotmens[p].ulov1 + r.p.vsespotmens[p].ulov2;
for (int i = 0; i < r.p.nst; i++)
for (int k = 0; k < r.p.spvkom; k++)
{
r.p.vsekom[i].kulov1 += r.p.vsekom[i].sport[k].ulov1;
r.p.vsekom[i].kulov2 += r.p.vsekom[i].sport[k].ulov2;
r.p.vsekom[i].kulovob += r.p.vsekom[i].sport[k].ulovob;
}
int i1;
int i2 = 1;
int i3 = 0;
int ob;
//спортсмены
while (i2 < r.p.nsp+1)
{
ob = 0;
i1 = 0;
while (i1 < r.p.nsp)
{
if (ob < r.p.vsespotmens[i1].ulov1 && r.p.vsespotmens[i1].mesto1 == 0)
{
i3 = i1;
ob = r.p.vsespotmens[i1].ulov1;
}
i1++;
}
r.p.vsespotmens[i3].mesto1 = i2;
i2++;
}
i2 = 1;
i3 = 0;
while (i2 < r.p.nsp + 1)
{
ob = 0;
i1 = 0;
while (i1 < r.p.nsp)
{
if (ob < r.p.vsespotmens[i1].ulov2 && r.p.vsespotmens[i1].mesto2 == 0)
{
i3 = i1;
ob = r.p.vsespotmens[i1].ulov2;
}
i1++;
}
r.p.vsespotmens[i3].mesto2 = i2;
i2++;
}
// команда
//Первый день
i2 = 1;
i3 = 0;
while (i2 < r.p.nst + 1)
{
ob = 0;
i1 = 0;
while (i1 < r.p.nst)
{
if (ob < r.p.vsekom[i1].kulov1 && r.p.vsekom[i1].kmesto1 == 0)
{
i3 = i1;
ob = r.p.vsekom[i1].kulov1;
}
i1++;
}
r.p.vsekom[i3].kmesto1 = i2;
i2++;
}
//второй день
i2 = 1;
i3 = 0;
while (i2 < r.p.nst + 1)
{
ob = 0;
i1 = 0;
while (i1 < r.p.nst)
{
if (ob < r.p.vsekom[i1].kulov2 && r.p.vsekom[i1].kmesto2 == 0)
{
i3 = i1;
ob = r.p.vsekom[i1].kulov2;
}
i1++;
}
r.p.vsekom[i3].kmesto2 = i2;
i2++;
}
// минимальная сумма мест за два дня
for (int p = 0; p < r.p.nsp; p++)
r.p.vsespotmens[p].minmestsum = r.p.vsespotmens[p].mesto1 + r.p.vsespotmens[p].mesto2;
for (int i = 0; i < r.p.nst; i++)
r.p.vsekom[i].minmestsum = r.p.vsekom[i].kmesto1 + r.p.vsekom[i].kmesto1;
//нахождение 1 в общем зачете по спортсменам
i1 = r.p.vsespotmens[0].minmestsum;
i2 = r.p.vsespotmens[0].ulovob;
i3 = r.p.vsespotmens[0].ulov1;
// поиск минимальной суммы
for (int p = 0; p < r.p.nsp; p++)
{
if (i1 > r.p.vsespotmens[p].minmestsum)
i1 = r.p.vsespotmens[p].minmestsum;
}
//всем с минимальной 1 место
for (int p = 0; p < r.p.nsp; p++)
if (i1 == r.p.vsespotmens[p].minmestsum)
{
r.p.vsespotmens[p].mestoob = 1;
}
//поиск максимального улова общего у спортов с первым местом
for (int p = 0; p < r.p.nsp; p++)
if (i2 < r.p.vsespotmens[p].ulovob && r.p.vsespotmens[p].mestoob == 1)
i2 = r.p.vsespotmens[p].ulovob;
// все с первым местом у кого максимальное общего улова остаются
for (int p = 0; p < r.p.nsp; p++)
if (i2 != r.p.vsespotmens[p].ulovob && r.p.vsespotmens[p].mestoob == 1)
{
r.p.vsespotmens[p].mestoob = 0;
}
// поиск максимального улова за первый день из тех у кого первое место
for (int p = 0; p < r.p.nsp; p++)
{
if (i3 < r.p.vsespotmens[p].ulov1 && r.p.vsespotmens[p].mestoob == 1)
i3 = r.p.vsespotmens[p].ulov1;
}
// все кто прошли и это испытание оставляют первое место
for (int p = 0; p < r.p.nsp; p++)
{
if (i3 != r.p.vsespotmens[p].ulov1 && r.p.vsespotmens[p].mestoob == 1)
r.p.vsespotmens[p].mestoob = 0;
}
//нахождение 1 в общем зачете по странам
i1 = r.p.vsekom[0].minmestsum;
i2 = r.p.vsekom[0].kulovob;
i3 = r.p.vsekom[0].kulov1;
// поиск минимальной суммы
for (int p = 0; p < r.p.nst; p++)
{
if (i1 > r.p.vsekom[p].minmestsum)
i1 = r.p.vsekom[p].minmestsum;
}
//всем с минимальной 1 место
for (int p = 0; p < r.p.nst; p++)
if (i1 == r.p.vsekom[p].minmestsum)
{
r.p.vsekom[p].kmestoob = 1;
}
//поиск максимального улова общего у спортов с первым местом
for (int p = 0; p < r.p.nst; p++)
if (i2 < r.p.vsekom[p].kulovob && r.p.vsekom[p].kmestoob == 1)
i2 = r.p.vsekom[p].kulovob;
// все с первым местом у кого максимальное общего улова остаются
for (int p = 0; p < r.p.nst; p++)
if (i2 != r.p.vsekom[p].kulovob && r.p.vsekom[p].kmestoob == 1)
{
r.p.vsekom[p].kmestoob = 0;
}
// поиск максимального улова за первый день из тех у кого первое место
for (int p = 0; p < r.p.nst; p++)
{
if (i3 < r.p.vsekom[p].kulov1 && r.p.vsekom[p].kmestoob == 1)
i3 = r.p.vsekom[p].kulov1;
}
// все кто прошли и это испытание оставляют первое место
for (int p = 0; p < r.p.nst; p++)
{
if (i3 != r.p.vsekom[p].kulov1 && r.p.vsekom[p].kmestoob == 1)
r.p.vsekom[p].kmestoob = 0;
}
//таблица
// личный 1 день
dataGridViewrez.RowCount =2;
for (int i = 0; i < r.p.nsp; i++)
if (r.p.vsespotmens[i].mesto1 == 1)
{
dataGridViewrez[1, 0].Value = r.p.vsespotmens[i].imya.ToString() + "(" + r.p.vsespotmens[i].strana.ToString() + ")";
}
//личный 2 день
for (int i = 0; i < r.p.nsp; i++)
if (r.p.vsespotmens[i].mesto2 == 1)
{
dataGridViewrez[2, 0].Value = r.p.vsespotmens[i].imya.ToString() + "(" + r.p.vsespotmens[i].strana.ToString() + ")";
}
//команды 1 день
for (int i = 0; i < r.p.nst; i++)
if (r.p.vsekom[i].kmesto1 == 1)
{
dataGridViewrez[1, 1].Value = r.p.vsekom[i].strana.ToString() + ":" + r.p.vsekom[i].kulov1;
}
//командный 2 день }
for (int i = 0; i < r.p.nst; i++)
if (r.p.vsekom[i].kmesto2 == 1)
{
dataGridViewrez[2, 1].Value = r.p.vsekom[i].strana.ToString() + ":" + r.p.vsekom[i].kulov2;
}
//личный общий
for (int i = 0; i < r.p.nsp; i++)
if (r.p.vsespotmens[i].mestoob == 1)
{
dataGridViewrez[3, 0].Value = r.p.vsespotmens[i].imya.ToString() + "(" + r.p.vsespotmens[i].strana.ToString() + ")";
}
// командный общий
for (int i = 0; i < r.p.nst; i++)
if (r.p.vsekom[i].kmestoob == 1)
{
dataGridViewrez[3, 1].Value = r.p.vsekom[i].strana.ToString();
}
}
}