72 / 3 / 1
Регистрация: 05.01.2020
Сообщений: 131
1

Сортировка в структуре

18.02.2020, 18:40. Показов 1497. Ответов 8
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно отсортировать структуру по дате рождения
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
#include <iostream>
#include <windows.h>
#include <math.h>
 
using namespace std;
 
struct gr
{
    int chislo, month, god;
};
 
struct NOTE
{
    char familia[100];
    INT64 nomer;
    gr styd;
}; NOTE Styd; NOTE zxc;
 
void printinfo(const NOTE Styd[],int i)    //Функция вывода данных
{
    cout << "Ф.И.О.: " << Styd[i].familia;
    cout << endl << "Номер Телефона: " << Styd[i].nomer;
    cout << endl << "Дата рождения: " << Styd[i].styd.chislo << "." << Styd[i].styd.month << "." << Styd[i].styd.god;
}
 
int main()
{
    int x,z=0,exc=0,i=0;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите количество студентов: ";
    cin >> x;
    NOTE* Styd = new NOTE[x];
    system("cls");
    
    
    for (int i = 0; i < x; i++)
    {
        cin.ignore();
        cout << "Введите Ф.И.О.: ";
        gets_s(Styd[i].familia,100);
        cout << "Введите номер телефона: ";
        cin >> Styd[i].nomer;
        cout << endl << "Введите день рождения: ";                   //Заполнение структур
        cin >> Styd[i].styd.chislo;
        cout << endl << "Введите месяц рождения: ";
        cin >> Styd[i].styd.month;
        cout << endl << "Введите год рождения: ";
        cin >> Styd[i].styd.god;
        system("cls");
        if (Styd[i].nomer <= 0 || Styd[i].styd.chislo <= 0 || Styd[i].styd.chislo > 31 || Styd[i].styd.month <= 0 || Styd[i].styd.month > 12 || Styd[i].styd.god <= 1920 || Styd[i].styd.god > 2020)
        {
            cout << "Некорректно введены данные"<<endl;
            z = 1;
            i = x;
        }
    }
        if(z==1)
        { }
        else {
 
            for (int i = 0; i < x; i++)
            {
                printinfo(Styd, i);
                cout << endl;
            }
            cout << "Отсортированные: " << endl;
            for (int i = 0; i < x - 1; i++)
            {
                for (int j = 0; j < i; i++)
                {
                    if (Styd[j].styd.god <= Styd[j++].styd.god && Styd[j].styd.month <= Styd[j++].styd.month && Styd[j].styd.chislo < Styd[j++].styd.chislo)
                    {
                        zxc = Styd[j];
                        Styd[j] = Styd[j++];              //Предположительно сортировка
                        Styd[j++] = zxc;
                    }
                }
            }
            for (int i = 0; i < x; i++)
            {
                printinfo(Styd, i);
                cout << endl;
            }
 
            
        }
 
    system("pause");
    delete[]Styd;
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2020, 18:40
Ответы с готовыми решениями:

Сортировка в структуре
Нужно считать в структуру информацию из файла, и отсортировать по зарплате. В файле записана...

Сортировка в структуре
По заданию нужно ввести данные в структуре, отсортировать по цене (от наименьшей к наибольшей) и...

Сортировка в структуре
Надо отсоритровать структуру по параметру &quot;Телефон&quot; Листал форум, вроде все написано правильно,...

Сортировка в структуре
Структура: struct Worker { string Name; int Year; ...

8
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
18.02.2020, 18:46 2
Цитата Сообщение от Zeta788 Посмотреть сообщение
Мне нужно отсортировать структуру по дате рождения
Цитата Сообщение от Zeta788 Посмотреть сообщение
if (Styd[j].styd.god <= Styd[j++].styd.god && Styd[j].styd.month <= Styd[j++].styd.month && Styd[j].styd.chislo < Styd[j++].styd.chislo)
C++
1
if (std::tie(Styd[j].styd.god, Styd[j].styd.month, Styd[j].styd.chislo) < std::tie(Styd[j + 1].styd.god, Styd[j + 1].styd.month, Styd[j + 1].styd.chislo))
https://en.cppreference.com/w/... /tuple/tie
1
72 / 3 / 1
Регистрация: 05.01.2020
Сообщений: 131
18.02.2020, 18:54  [ТС] 3
Здравствуйте, не очень понял
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
18.02.2020, 18:56 4
Цитата Сообщение от Zeta788 Посмотреть сообщение
Здравствуйте, не очень понял
Условие в цикле сортировки поменяй, как я показал
0
72 / 3 / 1
Регистрация: 05.01.2020
Сообщений: 131
18.02.2020, 19:03  [ТС] 5
Не помогло, можно ли вы вывести в нужном порядке поменяв индекс ? Например вывести не 1 2 3 а 3 1 2
0
Just Do It!
4009 / 2384 / 638
Регистрация: 23.09.2014
Сообщений: 7,580
Записей в блоге: 2
18.02.2020, 20:38 6
дел
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
18.02.2020, 21:10 7
Цитата Сообщение от Zeta788 Посмотреть сообщение
Не помогло, можно ли вы вывести в нужном порядке поменяв индекс ? Например вывести не 1 2 3 а 3 1 2
В смысле, не помогло?
0
Just Do It!
4009 / 2384 / 638
Регистрация: 23.09.2014
Сообщений: 7,580
Записей в блоге: 2
18.02.2020, 22:05 8
Лучший ответ Сообщение было отмечено Zeta788 как решение

Решение

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В смысле, не помогло?
там не только в ифе дело

Zeta788,
вот потестите, а то мне лень каждый раз вводить и тем более писать свой тест.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <windows.h>
#include <math.h>
 
using namespace std;
 
struct gr
{   int chislo, month, god;
    bool operator>(const gr& o)
    {   bool a = god    == o.god;
        bool b = month  == o.month;
        bool c = chislo >  o.chislo;
        return (god > o.god) || (a&&(month > o.month)) || (a&&b&&c);
    }
};
 
struct NOTE
{   char familia[100];
    INT64 nomer;
    gr styd;
};
NOTE Styd;
NOTE zxc;
 
void printinfo(const NOTE Styd[],int i)    //Функция вывода данных
{   cout << "Ф.И.О.: " << Styd[i].familia;
    cout << endl << "Номер Телефона: " << Styd[i].nomer;
    cout << endl << "Дата рождения: " << Styd[i].styd.chislo << "." <<
         Styd[i].styd.month << "." << Styd[i].styd.god;
}
 
int main()
{   int x,z=0,exc=0,i=0;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите количество студентов: ";
    cin >> x;
    NOTE* Styd = new NOTE[x];
    system("cls");
 
 
    for (int i = 0; i < x; i++)
    {   cin.ignore();
        cout << "Введите Ф.И.О.: ";
        cin.getline(Styd[i].familia, 100);
        cout << "Введите номер телефона: ";
        cin >> Styd[i].nomer;
        cout << endl <<
             "Введите день рождения: ";                   //Заполнение структур
        cin >> Styd[i].styd.chislo;
        cout << endl << "Введите месяц рождения: ";
        cin >> Styd[i].styd.month;
        cout << endl << "Введите год рождения: ";
        cin >> Styd[i].styd.god;
        system("cls");
        if (Styd[i].nomer <= 0 || Styd[i].styd.chislo <= 0 || Styd[i].styd.chislo > 31
                || Styd[i].styd.month <= 0 || Styd[i].styd.month > 12
                || Styd[i].styd.god <= 1920 || Styd[i].styd.god > 2020)
        {   cout << "Некорректно введены данные"<<endl;
            z = 1;
            i = x;
        }
    }
    if(z==1)
    { }
    //else
    {
        for (int i = 0; i < x; i++)
        {   printinfo(Styd, i);
            cout << endl;
        }   cout << endl;
        cout << "Отсортированные: " << endl;
        for     (int i = 0; i < x-1;   i++)
        {   for (int j = 0; j < x-1-i; j++)
            {   if ( Styd[j].styd > Styd[j+1].styd)
                {   zxc       = Styd[j];
                    Styd[j]   = Styd[j+1];        //Предположительно сортировка
                    Styd[j+1] = zxc;
                }
            }
        }
        for (int i = 0; i < x; i++)
        {   printinfo(Styd, i);
            cout << endl;
        }
    }
 
    system("pause");
    delete[]Styd;
    return 0;
}
1
72 / 3 / 1
Регистрация: 05.01.2020
Сообщений: 131
19.02.2020, 18:16  [ТС] 9
Спасибо всем
1
19.02.2020, 18:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2020, 18:16
Помогаю со студенческими работами здесь

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

Сортировка данных в структуре
Написал код для структуры, содержащей список фамилий, имен, номеров телефона, дней рождения Нужно...

Сортировка данных в Структуре С++
Доброго времени суток, дорогие форумчане! Возникла следующая проблема. Нужно отсортировать...

Сортировка данных в структуре
Здравствуйте, как отсортировать структуру по количеству детей в семье struct Department1 {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru