С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 18.09.2011
Сообщений: 57

Сортировка в структурах[C++]

22.03.2012, 19:02. Показов 1420. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с сортировкой. Мне нужно отсортировать спортсменов по возрастанию их среднего балла
Я сделал с помощью простой вставки. Сам алгоритм знаю. Но запутался какому массиву, что присваивать.
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#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();
Вот файл
Code
1
2
3
4
5
6
7
8
9
10
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
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2012, 19:02
Ответы с готовыми решениями:

сортировка в структурах
задача определить структур SOTRUDNIKI, которая содержит поля имя,фамилия,пол,зарплата.массив из 10 элементов.организовать ввод дааных с...

Сортировка по алфавиту в структурах C++
Есть задание: создать структуру книг, создать массив из нескольких книг, реализовать печать всех книг, редактирование и сортировку по...

Сортировка по стажу в структурах
Имеется такое условие, ума не приложу как сделать сортировку по стажу, может кто нибудь сделать хотя бы примерный набросок работы...

3
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
22.03.2012, 19:09
вот аналогичное задание в котором сортируются студенты по возрастанию среднего бала

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "iostream"
#include "fstream"
 
using namespace std;
 
struct student 
{
    char name[20];//фамилия студента
    int group; //номер группы
    int  ses[5]; //оценки
};
 
double sort(student *,int n);    // прототип функции сортировки по среднему балу
double horoshist(student *,int n); // прототип функции вывод студентов у которых 4 и 5
 
int main()
{
    setlocale(LC_CTYPE,"Russian"); //русский шрифт в консоле
    int n, i, j; //обьявляем переменные
    cout << "Введите количество структур типа студент - ";
    cin >> n; //число элементов в массиве структур
    
    student *stud1 = new student [n]; //выделение динамической памяти под массив структур
 
    ifstream instr("inform.txt");   //открытие файла для ввода
    if(!instr) //если файл не найден тогда....
    {
        cout<<"File can not be open\n"; //выводим сообщение
        return 0; //выход из программы
    }                                          
 
    cout << endl << "Фамилия\tГруппа\t\t    Оценки" << endl << endl;
    
    //заполнение массива считыванием из файла
    for(i = 0; i < n; i++)
    { 
        instr >> stud1[i].name >> stud1[i].group;
        cout << stud1[i].name << '\t' << stud1[i].group; 
            for(j = 0; j < 5; j++)
            {
                instr >> stud1[i].ses[j];
                cout << '\t' << stud1[i].ses[j];
            }   
            cout << endl;
    }  
    instr.close(); //закрываем файл
 
    cout << endl << "Mассив STUD1 по возрастанию среднего балла" << endl;
    cout << endl << "Фамилия\tГруппа\t\t     Оценки\t\t     Средний бал" << endl << endl;
    sort(stud1, n); //вызываем функцию сортировки
 
    cout << endl << "Фамилии и номера групп для всех студентов, имеющих оценки 4 и 5" << endl;
    cout << endl << "Фамилия\tГруппа" << endl << endl;
    horoshist(stud1, n); //вызываем функцию для вывода хорошистов
 
    delete [] stud1; //очищаем память
    system("pause >> null"); //ждем пока пользователь нажмет любую клавишу
    return 0; //выход с программы
}
 
 
//сортировку делаеи спомощью "Пузырьковой сортировки"
double sort(student *gr, int n)
{
    double s; //перемееная для подсчета суммы балов каждого студента
    double *avg = new double [n]; //выделяем память под массив хранящщего средние балы каждого студента
    
    //находим средний бал каждого студента
    for(int i = 0; i < n; i++)
    {
        s = 0.;
        for(int j = 0; j < 5; j++)
        {
            s += gr[i].ses[j];
            avg[i] = s / 5;
        }
    }
 
    bool flag = true; //обьявляем булевую переменную и даем есть значение "истина"
        
        while(flag) //пока "истина" делаем
        {
            flag = false;  //устанавливаем переменную в "ложь"
                    
            for(int i = 0; i < n - 1; ++i)
            {
                if(avg[i] > avg[i + 1]) //если элемент массива большн следующий элемент, тогда
                {
                    //меняем массивы в структуре местами
                    student x = gr[i];
                    gr[i] = gr[i + 1];
                    gr[i + 1] = x;
                    
                    //а также меняем местами и элементы в массиве средних оценок 
                    double temp = avg[i];
                    avg[i] = avg[i + 1];
                    avg[i + 1] = temp;
           
                    flag = true; //уснанавлюем в "истина"
                }
            }
        }
 
        //выводим на экран отсортированную структуру
        for(int i = 0; i < n; i++)
    { 
        cout << gr[i].name << '\t' << gr[i].group; 
            for(int j = 0; j < 5; j++)
            {
                cout << '\t' << gr[i].ses[j];
                
            }
            cout << "\t" << avg[i]; //выводим на экран средний бал
            cout << endl;
    }  
    delete [] avg; //освобождаем память
    return 0;
}
 
 
//ищем хорошистов
double horoshist(student *gr, int n)
{
    int x, z = 0; //объявляем переменные
 
    for(int i = 0; i < n; i++)
    {
        x = 0;
        for(int j = 0; j < 5; j++)
        {
            
            if(gr[i].ses[j] == 4 || gr[i].ses[j] == 5)
            {
                x++; //считаем количество 4 и 5 у каждого студента
            }
        }
        if (x == 5) //если еоличество 4 и 5 равен 5 тогда...
        {
            cout << gr[i].name << '\t' << gr[i].group << endl; //выводи этих студентов
            z++;//подсчитываем количеств хорошистов
        }
        
    }
    if (z == 0) //если хорошистов нет, тогда ....
        {
            cout << "Среди студентов нет хорошистов" <<endl; //выводим сообщение об этом
        }
    return 0;
}
Разбирайтесь!

Сортировка пузырьком или простым обменом!

Содержимое файла
Ivanov 203 3 4 5 2 3
Petrov 402 4 3 5 4 5
Homenko 303 2 5 4 1 1
Zaletov 101 4 1 1 1 1
Sidorov 304 1 4 5 4 5
Reznik 304 3 3 3 4 4
Rolin 101 4 3 1 1 3
Garmash 304 1 4 3 4 4
Aleshin 222 4 5 4 4 4
Alabysh 453 5 4 3 5 2
Babaev 122 4 5 4 3 4
Bagoley 204 3 4 5 4 3
Belkin 102 2 5 4 3 2
Belokon 342 5 5 5 5 5
Gilyov 354 1 4 3 2 4
Vagin 100 5 3 4 2 2
Volokh 234 4 5 4 4 4
Griazev 176 3 5 2 4 3
Demin 312 5 5 5 5 2
Dulov 423 3 5 4 2 3
1
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 7
28.12.2012, 20:40
помогите отсортировать это задание методом выбора у меня почти такое же задание
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
28.12.2012, 21:06
druger, Вы в функции InsertSort обращаетесь к SrBall как к массиву, хотя это у вас функция.
Вам следует

1. переопределить тип первого параметра InsertSort на Sportsmen[]
2.
C++
1
float x=SrBall[i];
это доллжно быть вычисление среднего балла для текущего спортсмена и должно быть исправлено на:
C++
1
float x= SrBall(Ball[i]);
3. передать в функцию InsertSort массив S

По идее после этого программа заработает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2012, 21:06
Помогаю со студенческими работами здесь

Сортировка в структурах: несоответствие полей
Здравствуйте! В общем есть программа. Полностью рабочая только не правильно выводит Вот код: #include&lt;iostream&gt; ...

Операция new в структурах
Недавно начал изучать С++ и уже первые &quot;трудности&quot; :) Вот задание: 7. Вильям Вингейт (William Wingate) заведует службой анализа рынка...

Условие в структурах
Задан список студентов:Фамилия,год рождения,пол.Вывести студентов мужского пола,отсортированных в алфавитном порядке.Ошибка в vibor.Не...

Строка в структурах. C++
Создал структуру, но она не работает со строкой. После запуска выдаёт ошибку &quot; Вызвано необработанное исключение: нарушение...

Рекурсия в структурах
struct Element { Element *next; Element *prev; List Sub; }; class List { public:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru