Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
1

Найти информацию о студентах каждой группы родившихся в один и тот же месяц и год

07.04.2019, 08:58. Показов 2797. Ответов 5
Метки нет (Все метки)

Дан массив содержащий данные о студентах( Группа, ФИО, дата рождения) . Найти и вывести всех студентов каждой группы родившихся в один и тот же месяц и год.
Массив данных я составил, но как найти всех студентов в каждой группе с одинаковой датой рождения не пойму
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2019, 08:58
Ответы с готовыми решениями:

Найти двух девушек, родившихся в один день, месяц, год
Массив из 30 записей, с датой рождения и ещё чем-то. Найти двух девушек, родившихся в один день,...

Из списка студентов группы где приведён год рождения вывести студентов родившихся в заданный год
Из списка студентов группы где приведён год рождения, вывести студентов родившихся в заданный год

Вывести информацию на экран и в текстовый файл о студентах, родившихся в заданном месте
Создайте файл записей, содержащий определенное количество записей, каждая из которых содержит:...

Вывести информацию о людях, родившихся в месяц,название которого введено с клавиатуры
Даны сведения :фамилия, имя, знак зодиака, дата рождения (массив из трех чисел).Вывести информацию...

5
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
07.04.2019, 17:04 2
Я, например (не знаю, как другие) - пока не телепат. Код в студию.
0
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
07.04.2019, 19:41  [ТС] 3
Krokodil9798, вот
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
#include "pch.h"
#include <iostream>
#include <windows.h>
#include <iomanip>
 
using namespace std;
struct date//Структура даты рождения
{
    int d, m, y;
};
struct students//Структура студента
{
    char name[70];
    char group[40];
    date date;
};
void show(students *student, int n);
void sort(students *studentt, int n);
void showIf(students *student, int n);
int main()
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
    int buff;
    int n = 0;
    cout << " сколько студентов записать в таблицу?" << endl;
    cin >> n;
    students student[100];
    for (int i = 0; i < n; i++)
    {
 
        cout << "Группа: ";
        cin >> student[i].group;
 
        cout << "ИМЯ: ";
        cin >> student[i].name;
 
 
        cout << "ДАТА(день,месяц,год) ";
        cin >> student[i].date.d;
        cin >> student[i].date.m;
        cin >> student[i].date.y;
    }
    sort(student, n);
    show(student, n);
    showIf(student, n);
}
 
void sort(students *student, int n)
{
    int i, fl;
    students t;
    do
    {
        fl = 0; n--;
        for (i = 0; i < n; i++)
            if (student[i].group > student[i + 1].group)
            {
                t = student[i];
                student[i] = student[i + 1];
                student[i + 1] = t;
                fl = 1;
            }
    }
    while (fl == 1);
    cout << "Сортировка выполнина" << endl;
}
void show(students *student, int n)
{
        cout << "  |------------------------------------------------------------------|\n";
        cout << "  |                                |            |   Дата  рождения   |\n";
        cout << "  |       Фамилия   Инициалы       |   Группа   |--------------------|\n";
        cout << "  |                                |            | День | Месяц | Год |\n";
        cout << "  |------------------------------------------------------------------|\n";
        for (int i = 0; i < n; i++)
        {
            cout << "  | " << left << setw(30) << student[i].name << " | " << setw(10) << student[i].group << " | " << setw(2) << student[i].date.d << "   |  " << setw(2) << student[i].date.m << "   |" << setw(4) << student[i].date.y << " |\n";
        }
        cout << "  |------------------------------------------------------------------|\n";
}
void showIf(students *student, int n)// функция которая даолжна вывести студентов с одинаковой датой рождения
{
    cout << "  |------------------------------------------------------------------|\n";
    cout << "  |                                |            |   Дата  рождения   |\n";
    cout << "  |       Фамилия   Инициалы       |   Группа   |--------------------|\n";
    cout << "  |                                |            | День | Месяц | Год |\n";
    cout << "  |------------------------------------------------------------------|\n";
    int k = 0;
    for(int j=0;j<n-1;j++,k++)
    for (int i = 1+k; i < n; i++)
    {
        if(student[j].date.m== student[i].date.m)
        cout << "  | " << left << setw(30) << student[i].name << " | " << setw(10) << student[i].group << " | " << setw(2) << student[i].date.d << "   |  " << setw(2) << student[i].date.m << "   |" << setw(4) << student[i].date.y << " |\n";
    }
    cout << "  |------------------------------------------------------------------|\n";
}
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
07.04.2019, 20:40 4
Лучший ответ Сообщение было отмечено DrKappa как решение

Решение

DrKappa, Вы молодец, шли верно. Я немного исправил и дополнил Ваш код

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
void showIf(students *student, int n)// функция которая даолжна вывести студентов с одинаковой датой рождения
{
    cout << "  |------------------------------------------------------------------|\n";
    cout << "  |                                |            |   Дата  рождения   |\n";
    cout << "  |       Фамилия   Инициалы       |   Группа   |--------------------|\n";
    cout << "  |                                |            | День | Месяц | Год |\n";
    cout << "  |------------------------------------------------------------------|\n";
 
    //Используем вспомогательный массив для избежания вывода тех студентов, кого уже вывели
    int * checker = new int[n];
    for(int i=0;i<n;++i)
        checker[i] = 0;
 
    //Проходим по массиву студентов
    for(int i=0;i<n;++i)
    {
        //Если этого студента ещё не выводили
        if(!checker[i])
        {
            //Признак того, что студент под индексом i тоже должен быть напечатан в конце проверки
            bool iStudentMustBePrinted=false;
 
            //Ищем студентов, с такой же датой рождения, как и у него
            for (int j = 0; j < n; ++j)
            {
                //Если это не тот же проверяемой студент и он ещё не проверялся - проверяем его с i-тым на совпадение дат
                if(!checker[j] && i!=j && student[i].date.m== student[j].date.m && student[i].date.y== student[j].date.y)
                { 
                    //Выводим данные j-того студента
                    cout << "  | " << left << setw(30) << student[j].name << " | " << setw(10) << student[j].group << " | " << setw(2) << student[j].date.d << "   |  " << setw(2) << 
                        student[j].date.m << "   |" << setw(4) << student[j].date.y << " |\n";
 
                    //Указываем, что этого студента мы уже выводили
                    ++checker[j];
 
                    //В конце проверки напечатаем i-го студента
                    iStudentMustBePrinted = true;
                }
            }
 
             //Если мы должны печатать i-го студента
             if(iStudentMustBePrinted)
             {
                  //Печатаем его данные
                  cout << "  | " << left << setw(30) << student[i].name << " | " << setw(10) << student[i].group << " | " << setw(2) << student[i].date.d << "   |  " << setw(2) << 
                        student[i].date.m << "   |" << setw(4) << student[i].date.y << " |\n";
 
                   //Указываем, что этого студента мы уже выводили
                  ++checker[i];
             }
        }
    }
    cout << "  |------------------------------------------------------------------|\n";
}
1
2 / 2 / 0
Регистрация: 01.10.2018
Сообщений: 210
07.04.2019, 20:43  [ТС] 5
Krokodil9798, Спасибо за помощь.
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
07.04.2019, 20:48 6
Цитата Сообщение от DrKappa Посмотреть сообщение
Krokodil9798, Спасибо за помощь.
Незачто) Блок с 42-й по 50-ю строку в моём коде лучше оформьте так:
C++
1
2
3
4
5
6
7
//Если мы должны печатать i-го студента
if(iStudentMustBePrinted)
    cout << "  | " << left << setw(30) << student[i].name << " | " << setw(10) << student[i].group << " | " << setw(2) << student[i].date.d << "   |  " << setw(2) << 
        student[i].date.m << "   |" << setw(4) << student[i].date.y << " |\n";
 
//Указываем, что этого студента мы уже выводили
++checker[i];
Так Вы избежите лишних проверок даты при проходах во внутренних циклах.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2019, 20:48

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ввести информацию о 10 студентах группы
Ввести информацию о 10 студентах группы. Информация содержит фамилию, имя, отчество студента, год...

Ввести из файла информацию о K студентах группы
Информация содержит ФИО студента, год рождения, четыре оценки за экзамены последней сессии....

Массив структур содержит информацию о студентах группы
/*Массив структур содержит информацию о студентах группы: в первом поле стоит фамилия, во втором...

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

Описать структуру студенты, содержащую информацию о студентах группы
Описать структуру студенты, содержащую информацию о студентах группы: фамилия, имя, отчество, год...

Известен год рождения каждого человека из группы. Определить число людей, родившихся до 1985 и число после 1990 г.
Известен год рождения каждого человека из группы. Определить число людей, родившихся до 1985г. и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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