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

Описать структуру с именем STUDENT - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.69
paxak93
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 28
07.06.2012, 13:12     Описать структуру с именем STUDENT #1
Описать структуру с именем STUDENT, содержащую следующие поля:
 фамилия и инициалы;
 номер группы;
 успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
 ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию номера группы;
 вывод на дисплей фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4.0;
 если таких студентов нет, вывести соответствующее сообщение.


а мне нужно:
Описать структуру с именем STUDENT, содержащую следующие поля:
 фамилия и инициалы;
 номер группы;
 успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
 ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию среднего балла;
 вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5;
 если таких студентов нет, вывести соответствующее сообщение.

помогите, а то у меня не получается.

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
// структуры.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h" // Подключение файла stdafx.h
#include "iostream" // Подключение библиотеки для ввода и вывода
#include "conio.h" // Подключение заголовочного файла для работы с ф-й getch
using namespace std; // Объявление пространства имен
 
void _tmain(){//Объявление головной функции
    const int d_name = 30; //указание размера имени 
    const int kol_oz = 5; //размерность массива оценок
    const int col_zap = 10; //количество структур
 
    struct student{//объявление структуры
        //поля структуры:
        char name1[d_name1];
        char name2[d_name2];
        char name3[d_name3];
        int nom;
        float usp[kol_oz];
    };//окончание обьявления структуры 
    student base[col_zap];//объявление массива сруктур
    //инициализация элементов массива структур через точечной нотации
    for(int i=0;i<col_zap;i++){
    cout << "Vvedite dannye o "<< i+1 <<" studente"<<endl;
    cout << "familiya: "; cin >> base[i].name1;
    cout << "imya "; cin >> base[i].name2;
    cout << "otchestvo "; cin >> base[i].name3;
    cout << "Nomer gr: "; cin >> base[i].nom;
    cout << "usp: "; 
    //отдельный цикл для инициализации массива оценок
    for(int j=0;j<5;j++){
        cout << "vvedite " << j+1 << " ozenku"<< endl;
        cin >> base[i].usp[j];
    }
    }
 
    //упорядочевание:
    student a;//объявление буфферной переменной для последующей перестановки элементов массива структур
    int imin;//объвление целочисленной переменной
    цикл упорядочевания элементов массива структур по возрастанию
    for(int i = 0;i < col_zap;i++){
        imin = i;//берется номер текущего «минимального» элемента
        for(int j = i+1;j<col_zap;j++){//цикл для сравнения с остальными неупорядоченными элементами элементами 
            if(base[j].nom < base[imin].nom) imin = j;//если в результате сравнения находиться меньший элемент его номер заноситься в переменную imin
        }
        //перестановка элементов внутри массива:
        a = base[i];
        base[i] = base[imin];
        base[imin] = a;
    }
//вывод упорядоченных элементов массива структур
    for(int i = 0;i < col_zap;i++){
    cout << base[i].name1 << " " << base[i].name2 << " " << base[i].name3 << " " << base[i].nom << endl;
    }
 
    //больше 4.0
    float s;
    int k = 0;//обнуление счетчик выполнения условия
    cout << "bolshe 4.0" << endl;
    for(int i=0;i<col_zap;i++){//цикл для просмотра каждой структуры
        s = 0;//обнуление суммы оценок для текущей структуры
        for(int j=0;j<kol_oz;j++){//цикл лдя суммирования оценок
            s+=base[i].usp[j];//суммирование
        }
        if(s/kol_oz > 4.0){//проверка среднего значения
            k++;//увеличение счетчика
    cout << base[i].name1 << " " << base[i].name2 << " " << base[i].name3 << " " << base[i].nom << endl;
имени и группы
        }
    }
    if(k == 0) cout << "Studentov co crednim balom > 4.0 net" << endl;//если счетчик равен нулю значит ниодин массив не удовлетворяет условию
    _getch();//ожидание нажатия любой клавиши (что бы программа не закрывалась сразу)
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 13:12     Описать структуру с именем STUDENT
Посмотрите здесь:

C++ описать структуру с именем STUDENT
Описать структуру с именем STUDENT C++
Описать структуру с именем STUDENT C++
C++ описать структуру с именем STUDENT
Описать структуру с именем STUDENT C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
07.06.2012, 13:34     Описать структуру с именем STUDENT #2

Не по теме:

моя любимая тема


Описать структуру с именем Student
paxak93
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 28
09.06.2012, 16:20  [ТС]     Описать структуру с именем STUDENT #3
помогите сделать средний балл по группам

а вот само задание которое сделано:
Описать структуру с именем STUDENT, содержащую следующие поля:
фамилия и инициалы;
номер группы;
успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию среднего балла;
вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5;
если таких студентов нет, вывести соответствующее сообщение.


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
150
151
152
153
154
155
156
157
158
159
160
161
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#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
double srbalgrup(student *,int n); //средний бал по группам
 
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;
}
 
//ищем средний бал по группам
double srbalgrup(student *gr, int n)
{
    ..............
..............
 
}
Вложения
Тип файла: txt inform.txt (460 байт, 72 просмотров)
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
09.06.2012, 17:12     Описать структуру с именем STUDENT #4
Описать структуру с именем Student
paxak93
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 28
09.06.2012, 17:32  [ТС]     Описать структуру с именем STUDENT #5
а мне нужно средний по группам. Можешь объяснить как сделать?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.06.2012, 13:40     Описать структуру с именем STUDENT #6
Что значит средний балл по группам? Находим средний балл для каждой группы, затем складываем эти средние баллы и делим на количество групп? Или нужно найти средний балл для одной группы(тогда немного нелогичный прототип функции, нужно передавать массив, количество элементов в нем, и номер группы, средний балл которой необходимо вычислить)?
paxak93
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 28
10.06.2012, 13:50  [ТС]     Описать структуру с именем STUDENT #7
Цитата Сообщение от diagon Посмотреть сообщение
Что значит средний балл по группам? Находим средний балл для каждой группы, затем складываем эти средние баллы и делим на количество групп? Или нужно найти средний балл для одной группы(тогда немного нелогичный прототип функции, нужно передавать массив, количество элементов в нем, и номер группы, средний балл которой необходимо вычислить)?
в группах есть ученики и у каждого ученика свой средний балл. Мне нужно сделать так: если название групп совпадают их нужно объединить т.е. в одной группе уже может быть несколько учеников, а у каждого ученика есть пять оценок. и вот например если в группе три ученика, тогда нужно выводить средний балл из 15 оценок
paxak93
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 28
10.06.2012, 14:02  [ТС]     Описать структуру с именем STUDENT #8
у 101-ой средний бал должен получится =2

у 304 средний бал ~3,5
Миниатюры
Описать структуру с именем STUDENT  
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.06.2012, 14:20     Описать структуру с именем STUDENT #9
Функция примерно так будет выглядеть(не проверял)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double srbalgrup(student *gr, int n, int k) //k - номер группы
{
    double sum = 0;
    int count = 0;
    
    for (int i = 0; i < n; ++i)
    {
        if (gr->group == k)
        {
            double gr_sum = 0;
            
            for (int j = 0; j < 5; ++j)
                gr_sum += gr->ses[j];
            
            sum += gr_sum / 5;
            ++count;
        }
    }
    
    return sum / count;
}
Просто пускаете эту функцию для всех групп.
Интерфейс написать не могу, ибо тогда придется лезть в винду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2012, 20:16     Описать структуру с именем STUDENT
Еще ссылки по теме:

C++ Описать структуру с именем Student
C++ Описать структуру с именем STUDENT
C++ Описать структуру с именем Student

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

Или воспользуйтесь поиском по форуму:
paxak93
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 28
11.06.2012, 20:16  [ТС]     Описать структуру с именем STUDENT #10
Цитата Сообщение от diagon Посмотреть сообщение
Функция примерно так будет выглядеть(не проверял)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double srbalgrup(student *gr, int n, int k) //k - номер группы
{
    double sum = 0;
    int count = 0;
    
    for (int i = 0; i < n; ++i)
    {
        if (gr->group == k)
        {
            double gr_sum = 0;
            
            for (int j = 0; j < 5; ++j)
                gr_sum += gr->ses[j];
            
            sum += gr_sum / 5;
            ++count;
        }
    }
    
    return sum / count;
}
Просто пускаете эту функцию для всех групп.
Интерфейс написать не могу, ибо тогда придется лезть в винду.
вот что получается:
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#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
double srbalgrup(student *,int n);// прототи функции среднего балла по группе
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); //вызываем функцию для вывода хорошистов
    cout<<endl<<"Средний балл по группам"<<endl;
    srbalgrup(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;
}
//ищем средний балл по группам
double srbalgrup(student *gr, int n)
{
    int k=0;
    double sum = 0;
    int count = 0;
    
    for (int i = 0; i < n; ++i)
    {
        if (gr->group == k)
        {
            double gr_sum = 0;
            
            for (int j = 0; j < 5; ++j)
                gr_sum += gr->ses[j];
            
            sum += gr_sum / 5;
            ++count;
            
        }
    cout<<sum<<endl;
    }   
    return 0;
}
Миниатюры
Описать структуру с именем STUDENT  
Yandex
Объявления
11.06.2012, 20:16     Описать структуру с именем STUDENT
Ответ Создать тему
Опции темы

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