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

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

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

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

22.02.2012, 21:41. Просмотров 1096. Ответов 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();
}
Вот скриншот не полного результата:
Миниатюры
Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам  
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).

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
24.02.2012, 12:09  [ТС] #2
Неужели никто даже подсказку не даст.
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
25.02.2012, 14:45  [ТС] #3
Тему можно закрыть. Задачу решил.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
25.02.2012, 17:13 #4
AmaTeRaTsu, решили - выложите решение. Другим оно тоже может быть интересно.
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. Спасибо одному пользователю тут, не знаю кто, именно благодаря его коду смог довести все до ума
Миниатюры
Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам   Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам  
agent008
1 / 1 / 0
Регистрация: 15.03.2014
Сообщений: 118
15.03.2014, 19:35 #6
Спасибо работает, но вместо #include <string> надо #include <cstring>
А то не компилятор не узнает функцию strcmp
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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, совершенно необязательно, что такой код будет компилироваться другим компилятором с другой реализацией стандартной библиотеки, а значит, такой код становится теоретически непереносимым, чего стоит по возможности избегать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2014, 19:43
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.03.2014, 19:43
Ответ Создать тему
Опции темы

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