Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58

Отсортировать группы студентов в порядке убывания средней успеваемости

10.11.2015, 17:34. Показов 5094. Ответов 5
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Сама формулировка задачи: Массив записей содержит информацию о результатах сдачи зимней сессии: фамилия, шифр группы, оценки по четырем предметам. Написать программу, которая вводит эту информацию и печатает шифры групп в порядке убывания средней успеваемости.
Программу я написал, но преподаватель сказал исправить, чтобы после ввода информации о группе, программа спрашивала "продолжить ввод или вывести результат". Сам принцип я вроде понял, но не знаю как правильно написать. Пожалуйста помогите.
Вот код:
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
struct student {
    string f, g;
    int b[4],kol;
    float sr, srob;
};
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    
    student st[100],s;
    int kolgroop=1;
    bool t = false;
    
    //Ввод количества групп, проверка на ввод
    cout << "Введите количество групп (не более 100)" << endl;
    do {
        cin.clear();
        cin.sync();             
        cin >> kolgroop;
        t = false;
        if ((kolgroop < 1) || (kolgroop > 100)) { cout << "Ошибка ввода. Повторите попытку!" << endl;
                    t = true;
                }
                if (cin.fail()) cout << "Ошибка ввода. Повторите попытку!" << endl;
                } while (cin.fail() || t);
   
    //Заполнение шифра группы, количества студентов в группе, проверка на ввод
    for (int k = 0; k < kolgroop; k++) {
        cout << "--------------------------------------------" << endl;
        cout << "Введите шифр группы № " << k+1 << endl;
        cin >> st[k].g;
        cout << "Введите количество студентов в группе " << st[k].g << "( не более 50) " << endl;
        st[k].kol=1;
        st[k].srob=0;
 
        do {
                cin.clear();
                cin.sync();             
                cin >> st[k].kol;
                t = false;
                if ((st[k].kol < 0) || (st[k].kol > 50)) {
                    cout << "Ошибка ввода. Повторите попытку!" << endl;
                    t = true;
                }
                if (cin.fail()) {
                    cout << "Ошибка ввода. Повторите попытку!" << endl;
                }
            } while (cin.fail() || t);
        //Ввод фамилии и результатов экзаменов, проверка на ввод
        for (int i = 0; i < st[k].kol; i++) {
        cin.clear();
        cin.sync();
        st[i].sr = 0;
        cout << "------------------------------------" << endl;
        cout << "Ввод данных о " << i+1 << " студенте" << endl;
        cout << "Введите фамилию" << endl;
        cin >> st[i].f;
        for (int j = 0; j < 4; j++) {
            cout << "Введите результат " << j+1 << " экзамена (от 2 до 5)" << endl;
            st[i].b[j] = 2;
            do {
                cin.clear();
                cin.sync();             
                cin >> st[i].b[j];
                t = false;
                if ((st[i].b[j] < 2) || (st[i].b[j] > 5)) {
                    cout << "Ошибка ввода. Повторите попытку!" << endl;
                    t = true;
                }
                if (cin.fail()) {
                    cout << "Ошибка ввода. Повторите попытку!" << endl;
                }
            } while (cin.fail() || t);
            //Нахождение средней успеваемости у одного студента
            st[i].sr += st[i].b[j];
        }   
        st[i].sr=st[i].sr/4;
        st[k].srob +=st[i].sr;
        }
        //Нахождение средней успеваемости среди группы
        st[k].srob = st[k].srob/ st[k].kol;
    }
    cout << "--------------------------------------------" << endl;
    //Сортировка по убыванию методом пузырька
    cout << "Шифры групп в порядке убывания средней успеваемости" <<endl;
    for (int k = 0; k < kolgroop-1; k++)
     for (int j = k+1; j < kolgroop; j++)
        if (st[k].srob<st[j].srob) {s=st[j]; st[j]=st[k];st[k]=s;}
        
        
        //Вывод результата на экран
        for (int k = 0; k < kolgroop; k++)
        cout << st[k].g << ": " <<st[k].srob <<endl;
        
    _getch();
 
    return 0;
}
Буду очень благодарен.

Добавлено через 22 часа 11 минут
Никто не хочет помочь?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.11.2015, 17:34
Ответы с готовыми решениями:

Вывести журнал успеваемости студентов группы в алфавитном порядке
Нужно написать код для решения следующей задачи Имеются сведения об успеваемости студентов факультета, который включают фамилию и...

Вывести номера групп в порядке убывания средней успеваемости их студентов
В массиве содержится информация о зимней сессии. Сведения о каждом студенте содержат следующие данные: Фамилию(до 12 символов),номер группы...

Файл: Отображать номера групп в порядке убывания средней успеваемости их студентов
В файле данных содержится информация об итогах зимней сессии. О каждом студенте известны: &lt;ФИО &gt;, &lt;номер группы &gt;,...

5
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
10.11.2015, 18:56
Продолжить ввод чего? Там же введено уже сколько групп и студенты по каждой.
0
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
16.11.2015, 10:41  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Продолжить ввод чего? Там же введено уже сколько групп и студенты по каждой.
продолжить ввод информации о след. группе. Препод сказал, якобы мы не знаем, сколько у нас всего будет групп, поэтому после ввода информации о группе, программа должна спрашивать "ввести информацию о еще одной группе и посчитать среднюю успеваемость". То, что я уже ввел сколько групп - это неправильно. Мы заведомо не знаем сколько их.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.11.2015, 15:25
Ну переделай цикл по такому типу:
C++
1
2
3
4
5
6
7
8
9
10
    while (true)
    {
        cout << "Введите шифр группы № " << endl;
 
        // ввод шифра, ввод студентов
 
        cout << "Ещё одна группа? (1 - да, 2 - нет): ";
        cin >> ch;
        if (ch == 2) break;
    }
1
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 58
20.11.2015, 10:49  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Ну переделай цикл по такому типу:
C++
1
2
3
4
5
6
7
8
9
10
    while (true)
    {
        cout << "Введите шифр группы № " << endl;
 
        // ввод шифра, ввод студентов
 
        cout << "Ещё одна группа? (1 - да, 2 - нет): ";
        cin >> ch;
        if (ch == 2) break;
    }
так?
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
// prog5.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
struct student {
    string f, g;
    int b[4],kol;
    float sr, srob;
};
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    
    student st[1000],s;
    int kolgroop;
    bool t = false;
    
    //Ввод количества групп, проверка на ввод
    //cout << "Введите количество групп (не более 100)" << endl;
   // do {
    //  cin.clear();
        //cin.sync();               
        //cin >> kolgroop;
        //t = false;
        //if ((kolgroop < 1) || (kolgroop > 100)) { cout << "Ошибка ввода. Повторите попытку!" << endl;
                //  t = true;
                //}
                //if (cin.fail()) cout << "Ошибка ввода. Повторите попытку!" << endl;
                //} while (cin.fail() || t);}
   
    //Заполнение шифра группы, количества студентов в группе, проверка на ввод
    for (int k = 0; k < kolgroop; k++) {
        while (true)
        {
            cout << "--------------------------------------------" << endl;
            cout << "Введите шифр группы № " << k + 1 << endl;
            cin >> st[k].g;
            cout << "Введите количество студентов в группе " << st[k].g << endl;
            st[k].kol = 1;
            st[k].srob = 0;
 
 
            //Ввод фамилии и результатов экзаменов, проверка на ввод
            for (int i = 0; i < st[k].kol; i++) {
                cin.clear();
                cin.sync();
                st[i].sr = 0;
                cout << "------------------------------------" << endl;
                cout << "Ввод данных о " << i + 1 << " студенте" << endl;
                cout << "Введите фамилию" << endl;
                cin >> st[i].f;
                for (int j = 0; j < 4; j++) {
                    cout << "Введите результат " << j + 1 << " экзамена (от 2 до 5)" << endl;
                    st[i].b[j] = 2;
                    cout << "Ввести информацию о еще одной группе? (1 - да, 2 - нет): ";
                    cin >> ch;
                    if (ch == 2) break;
                }
            }
        }
 
            //Нахождение средней успеваемости у одного студента
            st[i].sr += st[i].b[j];
        }   
        st[i].sr=st[i].sr/4;
        st[k].srob +=st[i].sr;
        }
        //Нахождение средней успеваемости среди группы
        st[k].srob = st[k].srob/ st[k].kol;
    }
    cout << "--------------------------------------------" << endl;
    //Сортировка по убыванию методом пузырька
    cout << "Шифры групп в порядке убывания средней успеваемости" <<endl;
    for (int k = 0; k < kolgroop-1; k++)
     for (int j = k+1; j < kolgroop; j++)
        if (st[k].srob<st[j].srob) {s=st[j]; st[j]=st[k];st[k]=s;}
        
        
        //Вывод результата на экран
        for (int k = 0; k < kolgroop; k++)
        cout << st[k].g << ": " <<st[k].srob <<endl;
        
    _getch();
 
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.11.2015, 22:34
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
    int k, ch;
    bool t = false;
 
    for (k = 0, ch = 1; ch != 2; ++k)
    {
            cout << "--------------------------------------------" << endl;
            cout << "Введите шифр группы № " << k + 1 << endl;
            cin >> st[k].g;
            cout << "Введите количество студентов в группе " << st[k].g << endl;
            st[k].kol = 1;
            st[k].srob = 0;
 
 
            //Ввод фамилии и результатов экзаменов, проверка на ввод
            for (int i = 0; i < st[k].kol; i++) {
                cin.clear();
                cin.sync();
                st[i].sr = 0;
                cout << "------------------------------------" << endl;
                cout << "Ввод данных о " << i + 1 << " студенте" << endl;
                cout << "Введите фамилию" << endl;
                cin >> st[i].f;
                for (int j = 0; j < 4; j++) {
                    cout << "Введите результат " << j + 1 << " экзамена (от 2 до 5)" << endl;
                    st[i].b[j] = 2;
                }
            }
 
            //Нахождение средней успеваемости у одного студента
            st[i].sr += st[i].b[j];
        }   
        st[i].sr=st[i].sr/4;
        st[k].srob +=st[i].sr;
        }
        //Нахождение средней успеваемости среди группы
        st[k].srob = st[k].srob/ st[k].kol;
 
        cout << "Ввести информацию о еще одной группе? (1 - да, 2 - нет): ";
        cin >> ch;
 
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.11.2015, 22:34
Помогаю со студенческими работами здесь

Ввести с клавиатуры фамилии, имена студентов группы в любом порядке и отсортировать их
Ввести с клавиатуры фамилии, имена студентов группы в любом порядке. Записать их в таблицу, отсортировать фамилии по алфавиту и вывести на...

Написать программу анализа средней успеваемости четырех студентов
Написать программу анализа средней успеваемости четырех студентов по четырем предметам за сессию на основе структурного типа данных. ...

Программа учета успеваемости студентов группы за сессию
Разработать программу учета успеваемости студентов группы за сессию. Данные должны распологаться в файле. Программа должна позволять...

Построить круговую диаграмму успеваемости студентов группы по ТА
78. Построить круговую диаграмму успеваемости студентов группы по ТА.

Вывести список студентов в выходной текстовый файл в порядке убывания оценок студентов
Во входном текстовом файле находится информация о студентах: фамилия, имя и оценка - целое число от 2 до 5 (в отдельных строках). Вывести...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru