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

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

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

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

22.02.2012, 21:41. Просмотров 1059. Ответов 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++
C++ Количество символов, отличных от латинских букв и пробелов
Подсчитать в вводимой строке количество введенных символов, отличных от пробела. C++
C++ Определить произведение отрицательных элементов массива и количество отличных от 5
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AmaTeRaTsu
 Аватар для AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
24.02.2012, 12:09  [ТС]     Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам #2
Неужели никто даже подсказку не даст.
AmaTeRaTsu
 Аватар для AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
25.02.2012, 14:45  [ТС]     Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам #3
Тему можно закрыть. Задачу решил.
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
25.02.2012, 17:13     Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам #4
AmaTeRaTsu, решили - выложите решение. Другим оно тоже может быть интересно.
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2014, 19:43     Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам
Еще ссылки по теме:

Удалить студентов, у которых по всем предметам 2 C++
Определить количество элементов массива, отличных от последнего элемента и их суммы C++
Реализовать функцию без параметров, определяющую количество символов, отличных от пробела C++
В целочисленном массиве определить количество элементов отличных от последнего C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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, совершенно необязательно, что такой код будет компилироваться другим компилятором с другой реализацией стандартной библиотеки, а значит, такой код становится теоретически непереносимым, чего стоит по возможности избегать.
Yandex
Объявления
15.03.2014, 19:43     Воспользовавшись записью СТУДЕНТ определите количество отличных оценок, полученных группой по всем предметам
Ответ Создать тему
Опции темы

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