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

Отсортировать элементы масс. структуры - C++

Восстановить пароль Регистрация
 
erro1
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 10
14.11.2010, 18:09     Отсортировать элементы масс. структуры #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
#include <iostream.h>
#include <string.h>
#include <conio.h>
 
int k=0,i,j,E=0;
struct tag_fio 
    {
    char first[41]; //surname
    char last[41];  //name
    char otch[41];  //patronymic
    };
struct birth 
    {
    int day;
    int month;
    int year;
    };
struct student 
    {
    int kurs, group;
    int mark[3];
    float fAver; //stud's aver. score
    struct tag_fio fio;
    struct birth dob;
    } *stud; 
        
int main(){
    cout<<"A program for collecting information from the certification card,====\n";
    cout<<"sorting students into groups and displaying the group average score.=\n";
    cout<<"=====================================================================";
    stud = new student[k];
    cout<<endl<<endl<<"Kol-vo studentov - ";cin>>k;
    //function defination
    void input(student *stud,int n);
    //function call
    input(stud,k);
}
void input(student *stud,int n) {
    cout<<endl<<endl<<"Vvedite sled. infu: ";
    cout<<endl<<endl;
    for(i=0;i<k;i++) 
        {
        stud[i].fAver = 0;
        cout<<"Student # "<<i+1<<endl<<endl;
        cout<<"FIO : ";
        cin>>stud[i].fio.first>>stud[i].fio.last>>stud[i].fio.otch;
        cout<<"Datu rojd. : ";
        cin>>stud[i].dob.day>>stud[i].dob.month>>stud[i].dob.year;
        cout<<"Group kurs : "; cin>>stud[i].group>>stud[i].kurs;
        cout<<"Ocenki po 3-em disc. :\n";
        for(j=0;j<3;j++) {
            cin>>stud[i].mark[j];
            stud[i].fAver += stud[i].mark[j]; }
    stud[i].fAver /= 3;
    cout<<stud[i].fAver<<endl;
    }
}
я в ступпоре ибо не имею представления как реализовать фильтрацию (или сортировку) по группам
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2010, 18:09     Отсортировать элементы масс. структуры
Посмотрите здесь:

Отсортировать элементы структуры по алфавиту. C++
C++ Найти максимальный элемент. Отсортировать предшествующие ему элементы по убыванию, а следующие за ним элементы по возрастанию.
C++ Дана матрица. В каждой строке исключить наибольший и наименьший элементы, а среди остальных найти средние арифметические значения и записать их в масс
C++ Отсортировать элементы массива
Сформировать массив данных с помощью структуры. Отсортировать полученный список по полю «год издания» C++
C++ Отсортировать массив из структур по одному из полей структуры любым способом
C++ Отсортировать структуры по зарплатам, по именам.
C++ Как отсортировать объекты из структуры?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.11.2010, 06:34     Отсортировать элементы масс. структуры #2
наверное надо проверять для каждой группы

Код
создать массив средних оценок групп, проинициализировать нулями

начать проверку групп
    начать проверку очередной группы
        создать сумму текущей группы, приравнять к нулю
        начать проверку студентов
            создать счётчик студентов текущей группы, приравнять к нулю
            начать проверку очередного студента
                если студент в текущей группе, прибавить его средний бал к сумме текущей группы
                увеличить счётчик студентов текущей группы
        разделить сумму текущей группы на счётчик студентов текущей группы (он не равен нулю?)
        сохранить результат в массив средних оценок групп
erro1
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 10
15.11.2010, 18:31  [ТС]     Отсортировать элементы масс. структуры #3
наверное надо проверять для каждой группы
Спасибо. Правда сегодня на парах меня осенило, и я сделал немного иначе. Создал 2-мерный массив, в 1-ом столбце я расположил все возможные неповторяющийся группы, а во втором - ихний средний бал. Но программа все равно некорректно работает, например: 6 студентов из груп 2, 2, 2, 5, 1 , 5 ; в 1-ом столбце будет 2 5 1, а во 2-ом бред выходит. (1-ое среднее = среднему баллу первого студента, 2-ое среднее = сумме баллов 2-го и 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
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>
#include <string.h>
#include <conio.h>
#define kol 20
 
int k=0,i,j,E,z;
struct tag_fio 
    {
    char first[41]; //surname
    char last[41];  //name
    char otch[41];  //patronymic
    };
struct birth 
    {
    int day;
    int month;
    int year;
    };
struct student 
    {
    float group;
    int kurs;
    int mark[3];
    float aver; //stud's aver. score
    struct tag_fio fio;
    struct birth dob;
    } *stud; 
        
int main(){
    cout<<"A program for collecting information from the certification card,====\n";
    cout<<"sorting students into groups and displaying the group average score.=\n";
    cout<<"=====================================================================";
    stud = new student[k];
    cout<<endl<<endl<<"Kol-vo studentov - ";cin>>k;
    //function defination
    void input(student *stud,int n);
    void grupAver();
    //function call
    input(stud,k);
    grupAver();
}
void input(student *stud,int n) {
    cout<<endl<<"Vvedite sled. infu: ";
    cout<<endl<<endl;
    for(i=0;i<k;i++) 
        {
        stud[i].aver = 0;
        cout<<endl<<"Student # "<<i+1<<endl;
            /* Дабы не тратить время, эту часть кода игнорим */
    /*  cout<<"FIO : ";
        cin>>stud[i].fio.first>>stud[i].fio.last>>stud[i].fio.otch;
        cout<<"Datu rojd. : ";
        cin>>stud[i].dob.day>>stud[i].dob.month>>stud[i].dob.year;*/
        cout<<"Group kurs : "; cin>>stud[i].group; //>>stud[i].kurs;
        cout<<"Ocenki po 3-em disc. :\n";
        for(j=0;j<3;j++) {
            cin>>stud[i].mark[j];
            stud[i].aver += stud[i].mark[j]; }
    stud[i].aver /= 3;
    cout<<stud[i].aver;
    }
}
void grupAver() {
    float grps[kol][2],E=k;
    for(i=0;i<E;i++){
        for(j=i;j<E;) {
            if(stud[i].group == stud[j].group && i != j) {
                for(z=j;z<E-1;z++) 
                    stud[z].group = stud[z+1].group;
                    --E; 
                    }
            else ++j;
            }
        grps[i][0] = stud[i].group;
        }
    for(i=0;i<E;i++) 
        {
        grps[i][1]=0;
        z=0;
        for(j=0;j<k;j++) 
            {
            if (stud[j].group == grps[i][0])
                {
                grps[i][1]+= stud[j].aver;
                z++;
                }
            }
        grps[i][1] /= z;        
        }
     cout<<"\nSrednii bali studentov :\n";
     cout<<"    Grupa          Bal     ";
     for(i=0;i<E;i++)
     cout<<endl<<"      "<<grps[i][0]<<
     "            "<<grps[i][1]<<endl;
}
Yandex
Объявления
15.11.2010, 18:31     Отсортировать элементы масс. структуры
Ответ Создать тему
Опции темы

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