Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 17.01.2013
Сообщений: 47
1

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

23.12.2013, 14:36. Показов 549. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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()
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2013, 14:36
Ответы с готовыми решениями:

Ошибка в сортировке
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; int const N = 5; using...

Ошибка в сортировке
Мне нужно посортировать данные по полю NAME.Код не работает.В чем ошибка? void sort(char...

Ошибка в сортировке
#include &lt;iostream&gt; using namespace std; int main() { int A, c; for (int i = 0; i &lt; 3; i++)...

Ошибка в сортировке
Часть программы я сделал, но сортировка массива выходит кривой, та строка, которая после сортировки...

3
ShadowFirst
23.12.2013, 14:52
  #2

Не по теме:


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

0
Модератор
Эксперт С++
13503 / 10755 / 6409
Регистрация: 18.12.2011
Сообщений: 28,704
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;
0
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;
Это же скока переделывать надо блин....
0
23.12.2013, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2013, 19:15
Помогаю со студенческими работами здесь

Ошибка в быстрой сортировке
Мне нужно сравнить как минимум три сортировки массива. Т.к. плохо знаю С++ нашла шаблоны. И вот...

Ошибка в сортировке пузырьком
написана программа сортировки пузырьным методом.но когда ввожу числа в массив работает неправильно....

Ошибка в элементарной сортировке
//sortirovka n=9; for(flag=false;flag=false;) { flag=false; for(i=0; i&lt;n; i++) {...

Ошибка при сортировке
При сортировке массива вылетает причем именно на последнем числе сортирую так : for (int...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru