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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
#1

Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам - C++

22.02.2012, 21:41. Просмотров 1173. Ответов 6
Метки нет (Все метки)

Привет. Прощу помочь с решением задачи на структуру. Я нашел тут на форуме схожую задачу, но она определяет количество отличников, а не отличных оценок. За любую помощь буду премного благодарен.

Вот код:
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
 
#include <iostream>                          //Подключаем библиотеку функций ввода-вывода
#include <string>
#include <conio.h>
 using namespace std;
struct STUDENT{
        char FIO[30]; 
        char group[8]; 
        int ocenki[5];
} ;
//Функция сортировки списка студентов по фамилии в алфавитном порядке
//Входной параметр S - массив записей о студентах
void sortM(STUDENT *S, int N)
{
        STUDENT tmp;                               //Хранит временно данные о студенте (используется в сортировке)
        bool sort = true;                          //Указывает нужно сортировать или нет
        int i;                                     //Счетчик цикла
    //Сортировка методом пузырька
        while (sort)                               //Цикл (пока нужно сортировать)
        {
                sort=false;                            //Делаем предположение, что сортировать уже не нужно
                                for (i=0; i < N-1; i++)                    //Просматриваем все записи минус один
                        if (strcmp(S[i].FIO,S[i+1].FIO)>0) //strcmp - функция сравнения строк, если первая больше второй
                        {
                                tmp=S[i];                      //Меняем эти строки местами
                                S[i]=S[i+1];
                                S[i+1]=tmp;
                                sort=true;                     //Считаем, что нужно дальше сортировать
                        }
        }                                          //Конец цикла (пока нужно сортировать)
}
 
//Функция определения студентов хотя бы с одной пятеркой
//Входной параметр S - массив записей о студентах
void student2(STUDENT *S,int N)
{
                STUDENT *T = new STUDENT[N];                             //Массив "отличников"
        int i,j;                                   //Переменные циклов
        int k = 0;                                 //Количество "отличников" (пока 0)
        for (i=0; i<N; i++)                       //Смотрим по всем записям
        {
                for (j=0; j<5; j++)                    //Смотрим все оценки студента
                        if (S[i].ocenki[j]==5)             //Если нашли пятерку
                        {
                                T[k]=S[i];                     //Добавляем запись о студенте в массив "отличников"
                                k++;                           //Увеличиваем число отличников на 1
                                break;                         //Выходим из цикла по оценкам
                        }
        }
        if (k>0)                                   //Если есть студенты с пятерками
        {
                cout<<endl<<"Studenti, imeuschie p9terki:"<<endl;  //Вывод "Студенты, имеющие пятерки"
 
                for (i=0; i<k; i++)                    //Выводим всех студентов с пятерками
                        cout<<T[i].FIO<<"    "<<T[i].group<<endl;
        }
        else                                       //Если студентов с пятерками не найдено
                cout<<endl<<"Net studentov s p9terkami"<<endl;  //Вывод "Нет студентов с пятерками"
        cout<<"---------------------------"<<endl;
        cout<<"Koli4estvo studentov polu4ivwie p9terki: "<<k;
 delete []T;
}
 
 
//Объявляем функции
//Главная функция
int main()
{
        int N = 0;
        setlocale(LC_CTYPE,"Rus");
cout << "Введите количество студентов: ";
                cin >> N;
 
                STUDENT *S = new STUDENT[N];
 
                //STUDENT M[N];//Массив записей о студентах (N элементов)
        int i,j;                                   //Переменные циклов
 
 
        cout<<"Vvedite informaciu o studentah:"<<endl;  //Вывод "Введите информацию о студентах"
 
        for (i=0; i<N; i++)                       //Цикл по всем записям
        {
                cout<<"Student "<<i+1<<":"<<endl;      //Вывод "Студент 1..10"
                cout<<"FIO: ";                         //Вывод "ФИО"
 
                cin>>S[i].FIO;                         //Ввод ФИО
                cout<<"Gruppa: ";                      //Вывод "Группа"
 
                cin>>S[i].group;                       //Ввод группы
                for (j=0; j<5; j++)                    //Цикл по пяти оценкам
                {
                        cout<<"Ocenka "<<j+1<<": ";        //Вывод "Оценка 1.. 5"
 
                        cin>>S[i].ocenki[j];               //Ввод j-ой оценки
                }
        }
 
 
 
 
        sortM(S,N);                                  //Вызов функции сортировки записей
                                                   //Вывод "Упорядоченный массив записей по ФИО"
        cout<<endl<<"Uporyadochennii massiv zapisei po FIO:"<<endl;
        for (i=0; i<N; i++)
                {//Цикл по всем 10 записям
                                                       //Вывод "ФИО, группа, оценки"
                cout<<S[i].FIO<<"    "<<S[i].group<<"    ";
                                for(int j=0;j<5;j++)
                                        cout<<S[i].ocenki[j]<<"  ";
                                cout<<endl;
                }
        student2(S,N);                               //Вызов функции определения студентов с пятерками
                delete []S;
                
 getch();
}
Вот скриншот не полного результата:
0
Миниатюры
Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам (C++):

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

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

Известны оценки двух учеников по четырём предметам Определить сумму оценок каждого ученика - C++
Известны оценки двух учеников по четырём предметам Определить сумму оценок каждого ученика

Удалить студентов, у которых по всем предметам 2 - C++
Нужно удалить студентов, у которых по всем предметам 2. Затем вывести новый список на экран. Какие=-то косяки опять начались. Может...

Имеется n итоговых оценок студента. Определите, является ли студент неуспевающим (имеются оценки ниже 4) - Delphi
Имеется n итоговых оценок студента. Определите, является ли студент неуспевающим (имеются оценки ниже 4). Delphi 7. В консольном варианте

Имеется n итоговых оценок студента. Определите, является ли студент отличником (все оценки не ниже 9) - Delphi
Имеется n итоговых оценок студента. Определите, является ли студент отличником (все оценки не ниже 9).

6
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
24.02.2012, 12:09  [ТС] #2
Неужели никто даже подсказку не даст.
0
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
25.02.2012, 14:45  [ТС] #3
Тему можно закрыть. Задачу решил.
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
25.02.2012, 17:13 #4
AmaTeRaTsu, решили - выложите решение. Другим оно тоже может быть интересно.
1
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
26.02.2012, 18:14  [ТС] #5
silent_1991, хорошо. Извиняюсь.
Вот код:
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
 
#include <iostream>                          //Подключаем библиотеку функций ввода-вывода
#include <string>
#include <conio.h>
 using namespace std;
struct STUDENT{
        char FIO[30]; 
        char group[8]; 
        int ocenki[5];
} ;
//Функция сортировки списка студентов по фамилии в алфавитном порядке
//Входной параметр S - массив записей о студентах
void sortM(STUDENT *S, int N)
{
        STUDENT tmp;                               //Хранит временно данные о студенте (используется в сортировке)
        bool sort = true;                          //Указывает нужно сортировать или нет
        int i;                                     //Счетчик цикла
    //Сортировка методом пузырька
        while (sort)                               //Цикл (пока нужно сортировать)
        {
                sort=false;                            //Делаем предположение, что сортировать уже не нужно
                                for (i=0; i < N-1; i++)                    //Просматриваем все записи минус один
                        if (strcmp(S[i].FIO,S[i+1].FIO)>0) //strcmp - функция сравнения строк, если первая больше второй
                        {
                                tmp=S[i];                      //Меняем эти строки местами
                                S[i]=S[i+1];
                                S[i+1]=tmp;
                                sort=true;                     //Считаем, что нужно дальше сортировать
                        }
        }                                          //Конец цикла (пока нужно сортировать)
}
 
//Функция определения студентов хотя бы с одной пятеркой
//Входной параметр S - массив записей о студентах
void student2(STUDENT *S,int N)
{
                STUDENT *T = new STUDENT[N];                             //Массив "отличников"
        int i,j, schet=0;                                   //Переменные циклов
        int k = 0;                                 //Количество "отличников" (пока 0)
        for (i=0; i<N; i++)                       //Смотрим по всем записям
        {
                for (j=0; j<5; j++)                    //Смотрим все оценки студента
                        if (S[i].ocenki[j]==5)             //Если нашли пятерку
                        {
                                T[k]=S[i];                     //Добавляем запись о студенте в массив "отличников"
                                k++;                           //Увеличиваем число отличников на 1
                                break;                         //Выходим из цикла по оценкам
                        }
                 for (j=0; j<5; j++)                    //добавил чтоб найти количество пятерок
                        if (S[i].ocenki[j]==5)            
                        schet++;
        }
        if (k>0)                                   //Если есть студенты с пятерками
        {
                cout<<endl<<"Studenti, imeuschie p9terki:"<<endl;  //Вывод "Студенты, имеющие пятерки"
 
                for (i=0; i<k; i++)                    //Выводим всех студентов с пятерками
                        cout<<T[i].FIO<<"    "<<T[i].group<<endl;
        }
        else                                       //Если студентов с пятерками не найдено
                cout<<endl<<"Net studentov s p9terkami"<<endl;  //Вывод "Нет студентов с пятерками"
        cout<<"---------------------------"<<endl;
        cout<<"Koli4estvo studentov polu4ivwie p9terki: "<<k<<endl;
        cout<<"Koli4estvo p9terok polu4ennoi gruppoi: "<<schet<<endl;
 delete []T;
}
 
 
//Объявляем функции
//Главная функция
int main()
{
        int N = 0;
        setlocale(LC_CTYPE,"Rus");
cout << "Введите количество студентов: ";
                cin >> N;
 
                STUDENT *S = new STUDENT[N];
 
                //STUDENT M[N];//Массив записей о студентах (N элементов)
        int i,j;                                   //Переменные циклов
 
 
        cout<<"Vvedite informaciu o studentah:"<<endl;  //Вывод "Введите информацию о студентах"
 
        for (i=0; i<N; i++)                       //Цикл по всем записям
        {
                cout<<"Student "<<i+1<<":"<<endl;      //Вывод "Студент 1..10"
                cout<<"FIO: ";                         //Вывод "ФИО"
 
                cin>>S[i].FIO;                         //Ввод ФИО
                cout<<"Gruppa: ";                      //Вывод "Группа"
 
                cin>>S[i].group;                       //Ввод группы
                for (j=0; j<5; j++)                    //Цикл по пяти оценкам
                {
                        cout<<"Ocenka "<<j+1<<": ";        //Вывод "Оценка 1.. 5"
 
                        cin>>S[i].ocenki[j];               //Ввод j-ой оценки
                }
        }
 
 
 
 
        sortM(S,N);                                  //Вызов функции сортировки записей
                                                   //Вывод "Упорядоченный массив записей по ФИО"
        cout<<endl<<"Uporyadochennii massiv zapisei po FIO:"<<endl;
        for (i=0; i<N; i++)
                {//Цикл по всем 10 записям
                                                       //Вывод "ФИО, группа, оценки"
                cout<<S[i].FIO<<"    "<<S[i].group<<"    ";
                                for(int j=0;j<5;j++)
                                        cout<<S[i].ocenki[j]<<"  ";
                                cout<<endl;
                }
        student2(S,N);                               //Вызов функции определения студентов с пятерками
                delete []S;
                
 getch();
}
На первой картинке: Указано что добавил чтоб найти кол-во пятерок.
На второй картинке: Результат

P.S. Спасибо одному пользователю тут, не знаю кто, именно благодаря его коду смог довести все до ума
2
Миниатюры
Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам   Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам  
agent008
1 / 1 / 0
Регистрация: 15.03.2014
Сообщений: 118
15.03.2014, 19:35 #6
Спасибо работает, но вместо #include <string> надо #include <cstring>
А то не компилятор не узнает функцию strcmp
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
15.03.2014, 19:43 #7
agent008, string и cstring - это разные заголовочные файлы. В файле string расположено объявление библиотечного класса C++ std::string (строго говоря, std::string - всего лиш typedef для std::basic_string<char>, но это сейчас не важно), а в cstring - функции для работы с C-строками (символьными нуль-терминированными массивами). Скорее всего, у автора кода заголовочный файл string включает внутри себя и заголовок cstring, поэтому в результате препроцессирования в исходном коде оказывалось содержимое обоих файлов, но в общем случае стандартом не определяется, какие стандартные заголовочные файлы должны включаться в другие стандартные заголовочные файлы, поэтому правильным решением будет подключать все файлы, символы из которых вы намереваетесь использовать. Даже если вы наверняка знаете, что в вашей реализации стандартной библиотеки файл X включает файл Y, поэтому чтобы пользоваться функционалом из файлов X и Y, достаточно подключить только X, совершенно необязательно, что такой код будет компилироваться другим компилятором с другой реализацией стандартной библиотеки, а значит, такой код становится теоретически непереносимым, чего стоит по возможности избегать.
0
15.03.2014, 19:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2014, 19:43
Привет! Вот еще темы с ответами:

Подсчитать количество удовлетворительных оценок, хороших, отличных и средний балл в группе. - C (СИ)
Дан список студентов и оценка каждого на экзамене (оценки на N экзаменах). Подсчитать количество удовлетворительных оценок, хороших,...

Определить средний балл и подсчитать количество удовлетворительных, хороших и отличных оценок - Pascal
ввести оценки студента по 5 экзаменам. Определить средний балл и подсчитать кол-во удовлетворительных, хороших и отличных оценок. Написать...

Известны оценки каждого из 15 студентов, полученных в сессию на экзаменах по трем предметам. Определить количество двоек по каждому предмету. - Matlab
Известны оценки каждого из 15 студентов, полученных в сессию на экзаменах по трем предметам. Определить количество двоек по каждому...

Определить средний балл оценок по предметам - C#
Помогите с заданием, пожалуйста Даны: Фамилия, Группа, Информатика, История, Физика. Задание: Определить средний балл оценок по физике,...


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

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

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