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

Задача со структурами

27.04.2021, 17:06. Показов 511. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться, поправьте если ход мыслей у меня неправильный. Ниже все опишу.
Надеюсь хоть кто-нибудь ответит. :c
Собственно, есть задача:
Составить список учебной группы, включающий N человек. Для каждого студента указать: фамилию и имя, дату рождения (год, месяц и число) оценки за сессию (от 3 до 5 экзаменов). Информацию о каждом студенте оформить в виде структуры, а совокупность структур объединить в массив. Составить программу, которая обеспечивает ввод полученной информации, ее просмотр в виде таблицы, а также вывод информации на экран монитора согласно конкретному варианту. В случае если в группе нет студентов с требуемыми данными, выдать соответствующее сообщение.
Вывести анкетные данные студентов, получивших по предмету информатика оценку «отлично».


По условию в задаче нужно поставить оценку от 3 до 5 экзаменам. Поэтому надо, чтобы юзер с консоли мог выбрать предметы и написать оценку.

Я так понимаю нужно создать структуру и инициализировать строковые переменные в ней названиями предметов:
C++
1
2
3
4
5
6
7
8
struct subjects 
{
char info[25] = "Информатика";
char math[25] = "Математика";
char phys[25] = "Физика";
char phyl[25] = "Философия";
char kult[25] = "Культурология";
};
После чего вкладываем в структуру с информацией о студенте:
C++
1
2
3
4
5
6
7
8
9
struct student
{
char surname[25];
char name[25];
date birthday;
short countex;
subjects exams;
short marks[5];
};
И собственно доходим до ввода этих данных:
C++
1
2
3
4
5
6
7
cout << "Количество экзаменов " << i + 1 << " студента: (от 3 до 5)" << endl;
cin >> studs[i].countex;
while (studs[i].countex < 3 || studs[i].countex>5)
{
cout << "Ошибка. Повторите ввод количества экзаменов: "; cin >> studs[i].countex; 
 
cout << "Выберите  " << studs[i].countex << " экзамена " << i + 1 << " студента: " << endl;
И тут у меня начинаются проблемы... я пытался сделать так:
1. Объявлял новый одномерный динамический массив размерностью studs[i].countex (ко-во экзаменов), в который будут записываться предметы(и походу тут главный косяк)
2. Прописывал цикл for (int j = 0; j < studs[i].countex; j++), чтобы юзер выбирал только нужное количество предметов.
3. Внутри цикла с помощью оператора switch и функции _getche() юзер выбирает числом (Информатика -1, Мат -2 и тд)
4. В case прописывается *имя массива*[*номер ячейки*] = *название массива с инфой о студенте*[i].exams.*название элемента структуры с предметами, соответствующий выбранному* (studs[i].exams.info)

По факту, хрень какую-то делаю...
И дальше еще нужно, чтобы каждому предмету юзер мог прописать оценку. И вывести тех, у кого оценка по отдельному элементу будет 5. Второй день уже сижу((
Как правильно будет опишите хотя бы, пожалуйста?

Добавлено через 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
struct date
            {
                short day;
                short month;
                short year;
            };
    
            struct subjects 
            {
                char info[25] = "Информатика";
                char math[25] = "Математика";
                char phys[25] = "Физика";
                char phyl[25] = "Философия";
                char kult[25] = "Культурология";
            };
            struct student
            {
                char surname[25];
                char name[25];
                date birthday;
                short countex;
                subjects exams;
                short marks[5];
            };
            
            system("chcp 1251 > nul");
            SetConsoleCP(1251);
            SetConsoleCP(1251);
            int N = 0;
            cout << "Введите количество студентов: "; cin >> N;
            while (N <= 0)
            {
                cout << "Ошибка. Повторите ввод: "; cin >> N;
            }
            student* studs;
            studs = new student[N];
            // Заполнение
            for (int i = 0; i < N; i++)
            {
                cout << "Фамилия " << i + 1 << " студента: " << endl;
                cin >> studs[i].surname;
                cout << "Имя " << i + 1 << " студента: " << endl;
                cin >> studs[i].name;
                cout << "Дата рождения " << i + 1 << " студента: (день, месяц, год) " << endl;
                cin >> studs[i].birthday.day >> studs[i].birthday.month >> studs[i].birthday.year;
                cout << "Количество экзаменов " << i + 1 << " студента: (от 3 до 5)" << endl;
                cin >> studs[i].countex;
                while (studs[i].countex < 3 || studs[i].countex>5)
                {
                    cout << "Ошибка. Повторите ввод количества экзаменов: "; cin >> studs[i].countex;
                    
                }
 
                cout << "Выберите " << studs[i].countex << " экзамена " << i + 1 << " студента: " << endl;          
                
 
            }
            // Вывод
            cout << endl;
            cout << setw(25) << "Фамилия:";
            cout << setw(25) << "Имя:";
            cout << setw(15) << "Дата рождения:";
            
            cout << setw(10) << "Оценки:";
            cout << endl;
            for (int i = 0; i < N; i++)
            {
                cout << setw(25) << studs[i].surname;
                cout << setw(25) << studs[i].name;
                cout << setw(2) << " " << setfill('0') << setw(2) << studs[i].birthday.day << "/" << setw(2) << studs[i].birthday.month << "/" << studs[i].birthday.year << setfill(' ') << setw(4) << " ";
                for (int j = 0; j < studs[i].countex; j++)
                {
                    cout << setw(2) << studs[i].marks[j];
                }
                cout << endl;
            }
Добавлено через 7 минут
Аналогичные задачи на форуме требуют выводить данные студентов с лучшими оценками по определенному предмету, но перечень их известен заранее. В моем случае предметы нужно выбирать юзеру.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2021, 17:06
Ответы с готовыми решениями:

Задача со структурами
Всем привет. Сидел, решал задачу, столкнулся с такой проблемой, что при попытке редактировать данные ( меню 3) не работает изменение данных...

Задача со структурами
На вход дается список фамилий студентов, их курс и группа. Не используя библиотеку &lt;vector&gt;, нужно вывести самые длинные фамилии для...

Задача на работу со структурами
Помогите пожалуйста. Нужно создать указатель на структуру WORKER в динамической памяти #include &lt;iostream&gt; #include...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2021, 17:06
Помогаю со студенческими работами здесь

Задача со структурами и работой с файлами
Надо написать программу, которая сможет поменять параметры структур в файле. Условие такое: В файле находятся данные про пациентов...

Задача со структурами
Не выходит сделать задание с структурами. Необходимо вводить поля структуры для каждого объекта, для того что бы остановить ввод нужно...

Задача со структурами
задача: Кто лучше учится в группе - мальчики или девочки? нужно по 5 фамилий со стороны и у каждого одна средняя оценка

Задача со структурами
Здравствуйте! Делал вот эту задачу: создать структуру, которая содержит сведения о месячной зарплате рабочих завода. Каждая запись...

Задача с структурами
Нужна помощь. Завтра надо сдать, а я новый год закончил отмечать только Создать структуру Человек с: имя, фамилия, дата рождения,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru