Форум программистов, компьютерный форум CyberForum.ru

Структыру.Ошибка в сортировке - C++

Восстановить пароль Регистрация
 
ЕвгенийГусев
1 / 1 / 0
Регистрация: 17.01.2013
Сообщений: 47
23.12.2013, 14:36     Структыру.Ошибка в сортировке #1
1.Описать структуру с именем STUDENT, содержащую следующие поля:
• NAME – фамилия и инициалы;
• GROUP – номер группы;
• SES - успеваемость (массив из пяти элементов).
2. Написать программу, выполняющую следующие действия :
• ввод с клавиатуры данных в массив STUD1, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию содержимого поля GROUP;
• вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4,0;
• если таких нет, вывести соответствующее сообщение.

После сортировки групп по возрастанию номера групп каджого студента не совпадают с тем что заполняется в начала...Т.е я пишу допустим фамилию Иванов а номер группы 5, а потом напишу еще студента у которого будет номер 1 получается что у Иванова будет 1ый номер
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
#include <iostream.h>
#define IND 10        // ДЛЯ КОЛ- ВА СТРУКТУР 
#define SIND 5         // ДЛЯ КОЛ- ВА ОЦЕНОК 
// ОПРЕДЕЛЕНИЕ СТРУКТУРЫ STUDENT
struct Student
{
        char family[IND];
        int numgroup;
        int eval[SIND];
};
// ВВОД ДАННЫХ О СТУДЕНТАХ
void input(Student &stud,int ind);
// ВЫЧИСЛЕНИЕ СРЕДНЕГО БАЛЛА ИЗ ПЯТИ ОЦЕНОК 
float mid_eval(Student &stud);
 
    int main()
{
Student stud[10];//   МАССИВ ИЗ ДЕСЯТИ СТРУКТУР
 
        int count_loop = 0;// МЕТКА ЕСЛИ СРЕДНИЙ БАЛЛ ХОТЬ У ОДНОГО СТУДЕНТА > 4.0 
 
        float mideval[IND];  //   МАССИВ ДЛЯ СРЕДНЕГО БАЛЛА КАЖД.СТУДЕНТА
 
for(int i = 0;i < IND;i++)
    {
        // ВВОД  ДАННЫХ
        input( stud[i],i);
        // СРАЗУ  ВЫЧИСЛЯЕМ СРЕДНИЙ БАЛ  И ЗАНОСИМ В МАССИВ 
        mideval[i] = mid_eval(stud[i]);
        // ЕСЛИ ЕСТЬ  БАЛ > 4.0  ПЛЮСУЕМ МЕТКУ 
if(mideval[i] > 4.0) count_loop += 1;
    }
 
//           SORTIROVKA GRUP
        //
 
          cout << endl << "Sortirovka grup" << endl;
// СОРТИРУЕМ ГРУППЫ ПО НОМЕРУ  
     
for(int i = 0; i < IND; ++i)
    {
 
        int tmp = 0;
        int pos = i;
        tmp = stud[i].numgroup;
for(int j = i + 1; j < IND; ++j)
        {
if (stud[j].numgroup < tmp)
           {
               pos = j;
               tmp = stud[j].numgroup;
           }
        }
        stud[pos].numgroup = stud[i].numgroup;
        stud[i].numgroup = tmp;
        // ВЫВОД ДАННЫХ  
        cout << endl << "Nomer gruppi\t" << stud[i].numgroup <<"\tfamilia\t"<<stud[i].family <<"\tsredniy bal\t"<< mideval[i] << endl;
    }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{
        cout << endl ;
        cout << endl << "Sredniy bal > 4.0" << endl;
        // ЕСЛИ МЕТКА БОЛЬШЕ НУЛЯ -  таких студентов нет - вывести соответствующее сообщение
if(count_loop > 0)
        for(int i = 0; i < IND; ++i) {
                if(mideval[i] > 4.0){
                    // ВЫВОД ДАННЫХ  
        cout  <<"Familiya " << stud[i].family << "\tsredniy bal\t" << mideval[i] << endl;
                        }
                    }
        else cout << "\t\tnikto ne nabral" << endl;
 
system("pause");
return 0;
}
    // ВВОД ДАННЫХ О СТУДЕНТАХ
void input(Student &stud,int ind){
        cout << endl << "Familia studenta  " << (ind + 1) << "\t";
        cin >> stud.family;
        cout << "Nomer  gruppi:  ";
        cin >> stud.numgroup;
        cout << "Vvedite 5 ocenok:" << endl;
        for(int i = 0;i < SIND;i++)
        cin >> stud.eval[i];
 
}
// ВЫЧИСЛЕНИЕ СРЕДНЕГО БАЛЛА ИЗ ПЯТИ ОЦЕНОК 
// ДЛЯ КАЖДОГО СТУДЕНТА  
float mid_eval(Student &stud){
        float m_eval = 0;
for(int i = 0; i < SIND;i++){
        m_eval += stud.eval[i];}
        m_eval /= SIND;
    return m_eval;  // ВЕРНУТЬ СРЕДНИЙ БАЛЛ В  MAIN()
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2013, 14:36     Структыру.Ошибка в сортировке
Посмотрите здесь:

Ошибка в сортировке\выводе массива C++
C++ Ошибка в порязрядной сортировке?!
Ошибка в задаче по сортировке массива в C++ C++ Builder
C++ Ошибка в сортировке
Ошибка в сортировке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
23.12.2013, 14:52
  #2

Не по теме:


Вы случаем не с одного учебного заведения?
Описать структуру с именем STUDENT

zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
23.12.2013, 15:12     Структыру.Ошибка в сортировке #3
Кроме
C++
1
2
 stud[pos].numgroup = stud[i].numgroup;
        stud[i].numgroup = tmp;
Надо сделать также перестановки и для .familia и для .eval
Учтите только, что это массивы!
Кстати, поскольку динамического выделения памяти у Вас нет,
то может сработать такой вариант
C++
1
2
3
4
 Student Stmp;
Stmp= stud[pos];
stud[pos] = stud[i];
stud[i] = Stmp;
ЕвгенийГусев
1 / 1 / 0
Регистрация: 17.01.2013
Сообщений: 47
23.12.2013, 19:15  [ТС]     Структыру.Ошибка в сортировке #4
Цитата Сообщение от zss Посмотреть сообщение
Кроме
C++
1
2
 stud[pos].numgroup = stud[i].numgroup;
        stud[i].numgroup = tmp;
Надо сделать также перестановки и для .familia и для .eval
Учтите только, что это массивы!
Кстати, поскольку динамического выделения памяти у Вас нет,
то может сработать такой вариант
C++
1
2
3
4
 Student Stmp;
Stmp= stud[pos];
stud[pos] = stud[i];
stud[i] = Stmp;
Это же скока переделывать надо блин....
Yandex
Объявления
23.12.2013, 19:15     Структыру.Ошибка в сортировке
Ответ Создать тему
Опции темы

Текущее время: 04:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru