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

Список студентов (структуры) - C++

Восстановить пароль Регистрация
 
astronomydomine
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 3
29.06.2014, 14:01     Список студентов (структуры) #1
Вводится список студентов (Ф.И.О., номер группы, оценка). Найти номер группы, в которой у всех студентов вместе наибольший средний балл.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2014, 14:01     Список студентов (структуры)
Посмотрите здесь:

C++ Структуры: Вывести список из 10 студентов с наибольшим количеством пропусков
C++ Структуры: На основе данных входного файла составить список студентов
Программа выводит неверный ответ (дан массив структур, содержащий сведения об успеваемости студентов - вывести список неуспевающих студентов) C++
C++ Создание структуры Список студентов
Структуры. Составить список студентов в произвольной последовательности, а вывести на экран по группам C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,159
Завершенные тесты: 1
29.06.2014, 14:27     Список студентов (структуры) #2
См. например,
Программирование с использованием файлов: список студентов
astronomydomine
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 3
29.06.2014, 15:00  [ТС]     Список студентов (структуры) #3
Проблема в том, что мне надо посчитать среднее арифметическое оценок студентов в каждой группе, а я не знаю изначально, какие номера групп вводятся, сколько их, сколько студентов в каждой группе...
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
29.06.2014, 15:52     Список студентов (структуры) #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
//структура, которая хранит данные о нашем студенте
struct student
{
    string student_name;
    short int group_number;
    short int mark;
 
    student(string student_name_, short int group_number_, short int mark_) : student_name(student_name_), group_number(group_number_), mark(mark_) {};
    ~student(){};
};
 
//функция, чтоб мы смогли отсортировать наших студентов по группам
bool compare_students(student s1, student s2)
{
    return s1.group_number < s2.group_number;
}
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
 
    vector<student> students;
    short int number_of_students = 0;
 
    cout << "Введите кол-во студентов: ";
    cin >> number_of_students;
 
    //вводим студентов
    for (int i = 1; i <= number_of_students; i++)
    {
        string buff_s1, buff_s2, buff_s3;
        short int buff_i1;
        short int buff_i2;
 
        cout << "Студент N" << i << endl;
        cout << "Ф.И.О : "; cin >> buff_s1 >> buff_s2 >> buff_s3;
        cout << "Номер группы : "; cin >> buff_i1;
        cout << "Оценка студента : "; cin >> buff_i2;
 
        student buff = { buff_s1 + ' ' + buff_s2 + ' ' + buff_s3, buff_i1, buff_i2 };
        students.push_back(buff);
        cout << endl;
    }
 
    int marks = 0;
    int max_mark = 0;
    int current_group = 0;
    int group_with_h_mark = 0;
 
    //сортируем по группам
    sort(students.begin(), students.end(), compare_students);
 
    //прохожусь по каждой группе и нахожу её суммарную оценку, если она больше изначальной оценки( = 0 )
    //то тогда это значение становится максимальным, и при этом сохраняю номер группы, чтоб вывести его в конце
    current_group = students[0].group_number;
    for_each(students.begin(), students.end(), [&marks, &max_mark, &current_group, &group_with_h_mark](student s)
    {
        if (current_group != s.group_number)
        {
            if (max_mark < marks) {max_mark = marks; group_with_h_mark = current_group;}
            current_group = s.group_number;
            marks = 0;
        }
        marks += s.mark;
    });
 
    cout << "Группа сумма оценок в которой больше остальных: " << group_with_h_mark << endl;
 
    system("PAUSE");
    return 0;
}
Добавлено через 48 минут
Если надо среднее арифметическое, то тогда добавь еще одну переменную, которая будет считать кол-во студентов, добавь вычисление marks/кол-во учащихся перед проверкой, и не забудь поменять типы данных int на float. Так же не забудь её обнулять, там же где и marks.
Yandex
Объявления
29.06.2014, 15:52     Список студентов (структуры)
Ответ Создать тему
Опции темы

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