Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ЕвгенийГусев
1 / 1 / 0
Регистрация: 17.01.2013
Сообщений: 47
#1

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2013, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структыру.Ошибка в сортировке (C++):

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

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

Ошибка в сортировке - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; int const N = 5; using namespace std; class book{ ...

Ошибка в пирамидальной сортировке - C++
Здравствуйте, подскажите, пожалуйста, где ошибка, сортирует весь массив нормально, кроме одного числа которое находится на 5й позииции, в...

Ошибка при сортировке - C++
При сортировке массива вылетает причем именно на последнем числе сортирую так : for (int i=0;i&lt;count;i++) { if (a&gt;a) { ...

Ошибка в сортировке пузырьком - C++
помогите разобраться в чем заключается ошибка. при выполнении функции происходит ошибка #include &lt;iostream&gt; using namespace...

3
ShadowFirst
23.12.2013, 14:52
  #2

Не по теме:


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

0
zss
Модератор
Эксперт С++
6574 / 6136 / 2021
Регистрация: 18.12.2011
Сообщений: 15,992
Завершенные тесты: 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;
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2013, 19:15
Привет! Вот еще темы с ответами:

Ошибка в сортировке массива - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; using namespace std; const int nmax = 100; //Функция создает...

ошибка в сортировке массива - C++
Здравствуйте, помогите пожалуйста исправить ошибку Жалуется на скобку Задание: Нужен код сортировки массива методом...

Ошибка в сортировке пузырьком - C++
написана программа сортировки пузырьным методом.но когда ввожу числа в массив работает неправильно. вот код с++ #include &lt;iostream&gt; ...

Ошибка в быстрой сортировке - C++
Мне нужно сравнить как минимум три сортировки массива. Т.к. плохо знаю С++ нашла шаблоны. И вот все на что я способна: :D #include...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.