• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Сортировка В Структураъх[c++]

  • Автор темы Guest
  • Дата начала
G

Guest

Помогите с сортировкой. Мне нужно отсортировать спортсменов по возрастанию их среднего балла
Я сделал с помощью простой вставки. Сам алгоритм знаю. Но запутался какому массиву, что присваивать.
Вот код
C++:
#include<iomanip.h>
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>

ifstream Fin;
ofstream Fout;
const int m=6;
struct Sportsmen
{
char Fam[11];
char Dolgn[14];
float Ball[m];
};
void input (Sportsmen &T)
{
Fin>>T.Fam>>T.Dolgn;
for (int j=0; j<m; j++)
Fin>>T.Ball[j];
}
void output (Sportsmen T)
{
Fout<<setw(10)<<T.Fam<<" "<<setw(15)<<T.Dolgn;
for (int j=0; j<m; j++)
Fout<<setw(4)<<T.Ball[j];
Fout<<endl;
}

float SrBall (Sportsmen T)
{
float Sr=0;
for (int j=0; j<m; j++)
Sr+=T.Ball[j];
return Sr/m;
}
void InsertSort (float Ball[],int m,Sportsmen T)
{
for (int i=1; i<m; i++)
{
float x=SrBall[i];
for (int j=i-1; j>=0 && SrBall[j]>x; j++)
SrBall[j+1]=SrBall[j];
SrBall[j+1]=x;
}
}

void main ()
{
Sportsmen S[50];
Fin.open("Z:\\STRUCT\\DATA.cpp");
if (Fin.fail())
{
cout<< "\n input file is not open \n";
exit(1);
}
int k=0;
while (!Fin.eof())
input (S[k++]);
k--;
Fin.close();
InsertSort(SrBall,m);
Fout.open("Z:\\STRUCT\\SORT.txt");
if (Fout.fail())
{
cout <<"\n created file is not open\n";
exit(1);
}
for (int i=0; i<k; i++)
output (S[i]);
Fout.close();
Вот файл
Код:
Ololoev swimer 20 15 18 19.5 17 20
Troler troling 20 19 17 20 14 20
Djigurda sport_dancer 15 14 10 5 7 3.5
Mentov footballer 5.5 4 2 1 1 1
Ravshan skier 3 8 6 12 16 14
Djamshut bobsledder 3 3 1 2 2.5 1.5
Putin karatist 19 20 19 13 9 8
Mevdedev judoist 18.5 17.5 19.5 11 4 20
Makarov athlete 13 15 11.5 14.5 9 18
Syvorov biathlete 7 0 3 9 8 2
 
G

Guest

Попробуй так:
C++:
#include<iomanip.h>
#include<fstream.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>

ifstream Fin;
ofstream Fout;
const int m=6;
struct Sportsmen
{
char Fam[11];
char Dolgn[14];
float Ball[m];
};
void input (Sportsmen &T)
{
Fin>>T.Fam>>T.Dolgn;
for (int j=0; j<m; j++)
Fin>>T.Ball[j];
}
void output (Sportsmen T)
{
Fout<<setw(10)<<T.Fam<<" "<<setw(15)<<T.Dolgn;
for (int j=0; j<m; j++)
Fout<<setw(4)<<T.Ball[j];
Fout<<endl;
}

float SrBall (Sportsmen T)
{
float Sr=0;
for (int j=0; j<m; j++)
Sr+=T.Ball[j];
return Sr/m;
}
void InsertSort (Sportsmen T[], int countSportsmen)
{
for (int i=1; i<countSportsmen; i++)
{
Sportsmen temp = T[i];
for(int j = i - 1; j >= 0 && SrBall(T[j]) > SrBall(temp); j--)
T[j + 1] = T[j];

T[j + 1] = temp;
}
}

void main ()
{
Sportsmen S[50];
Fin.open("D:\\DATA.txt");
if (Fin.fail())
{
cout<< "\n input file is not open \n";
exit(1);
}
int k=0;
while (!Fin.eof())
input (S[k++]);
k--;

Fin.close();
InsertSort(S, k);
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!