Автор Тема: найти победителей  (Прочитано 2169 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bernuLLLi

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
найти победителей
« : 25 Мая 2011, 18:14:34 »
имеются сведения о спортсменах-лыжниках: фамилия, результат(сек), страна.
1.создать линейный однонаправленный список(очередь)
2.распечатать список
3.вывести сведения о победителях, занявших три первых места
4.удалить сведения обо всех спортсменах заданной страны и определить их количество
5.уничтожить список, освободив выделенную под него память
6.создать меню, позволяющее многократно выбирать функции

помогите найти победителей(1, 2, 3 места), не могу условие написать


#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<string.h>
class sport
{public:
char f[20],str[20];int r;
sport *next;
sport();};
sport::sport()
{next=NULL;}

class spisok:public sport
{
public:
sport *first,*tek,*last;
int kol;
spisok();
void sozd();
void prosmotr();
void win();
void ud();
void udalenie();};

spisok::spisok()
{first=tek=last=NULL;
kol=0;}

void spisok::sozd()
{cout<<"esli vse - *"<<endl;
do
{tek=last;
last=new sport;
kol++;
cout<<"vvedite family: "<<endl;
cin>>last->f;
if(strcmp(last->f,"*")!=0)
{cout<<"vvedite rezul'tat & strany: "<<endl;
cin>>last->r>>last->str;
last->next=NULL;
if(first==NULL)first=last;
else tek->next=last;
}}
while(strcmp(last->f,"*")!=0);
cout<<"spisok sozdan"<<endl;}

void spisok::prosmotr()
{if(kol==0)
cout<<"spisok ne sozdan!";
else cout<<"vivod spiska: "<<endl<<endl;
tek=first;
while(tek)
{cout<<tek->f<<setw(10)<<tek->r<<setw(10)<<tek->str<<endl;
tek=tek->next;}}

void spisok::ud()
{sport *p;int s=0;char st[20];cout<<"vvedite strany:"<<endl;cin>>st;
tek=first;
while(tek)
{p=tek;
tek=tek->next;
if(strcmp(tek->str,st)==0)
{s++;p->next=tek->next;
delete tek;
tek=p->next;}
}
cout<<"udaleno!"<<endl<<"kol-vo="<<s<<endl;}


void spisok::win()
??  как найти победителя?


void spisok::udalenie()
{tek=first;
while(first)
{tek=first;first=tek->next;delete tek;}
cout<<"spisok ydalen"<<endl;}


void main()
{spisok ad;
int e;clrscr();
do
{cout<<endl;
cout<<" "<<endl;
cout<<"1-sozdanie"<<endl;
cout<<"2-vivod"<<endl;
cout<<"3-win"<<endl;
cout<<"4-ydalenie (strana)"<<endl;
cout<<"5-ydalenie"<<endl;
cout<<"6-vihod"<<endl;
cout<<" "<<endl;
cout<<"vvedite #punkta"<<endl;
cin>>e;
switch(e)
{case 0:break;
case 1:ad.sozd();break;
case 2:ad.prosmotr();break;
case 3:ad.win();break;
case 4:ad.ud();break;
case 5:ad.udalenie();break;
default:cout<<"error!";
}}
while(e>0);}

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
Re: найти победителей
« Ответ #1 : 25 Мая 2011, 19:48:45 »
Имеем массивы - фамилия F, результат(сек) S, страна C n наблюдений.
Когда массив готов выделяем массивы для трёх F3, S3, C3 по 3 наблюдения и индекс WHO(3) - номера победителей в списке.
Фамилии и страны при поиске по результату переносятся вместе с ним.
1. Претендент на первое место S(1) с F(1), C(1)
[F3(1)=F(1) S3(1)=S(1) C3(1)=C(1) WHO(1)=1]. В цикле ищем лучшего и ставим его с индексом (его номером в основном списке). Найден.
2. Претендент на второе место, если WHO(1) не первый в списке, то его S(1) с F(1), C(1) иначе второго.
В цикле ищем лучшего пропуская выбраного на первое место [WHO(1)=номер рекордсмена]  и ставим его с индексом. Найден второй.
3. Точно так же, но проверять на пропуск выбранных два. И не забыть при запуске не взять первого и второго.
Удачи.

 

Подсчет циклов в Паскале, найти корни уравнения методом половинного деления

Автор Anastasia_Right

Ответов: 1
Просмотров: 5777
Последний ответ 10 Октября 2011, 18:42:03
от holloloh
Найти ошибки в программе, составить блок-схему алгоритма, Паскаль

Автор Murmansk

Ответов: 27
Просмотров: 14034
Последний ответ 22 Февраля 2010, 18:52:06
от InfStudent
Java Script. Правьте, плиз, две программы, не могу найти ошибку..

Автор Round

Ответов: 5
Просмотров: 6704
Последний ответ 02 Апреля 2010, 18:31:07
от Round
Дан текстовый файл со строками. Найти повторяющиеся слова и заменить

Автор bifshtex

Ответов: 7
Просмотров: 8426
Последний ответ 08 Января 2010, 21:10:33
от InfStudent
Помогите найти ошибку в программе на С++ (диффур второго порядка)

Автор artecovez

Ответов: 1
Просмотров: 6325
Последний ответ 27 Апреля 2010, 19:38:10
от Данила