С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
1

Нужно сделать сортировку по дате рождения, по убыванию

07.12.2015, 14:18. Показов 3263. Ответов 11

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
#include "stdafx.h" 
#include <iostream> 
using namespace std;
#include <clocale> 
#include <conio.h> 
#include <string> //Модуль для строк
 
struct note     //Создаем структуру!
{
    string fam; //здесь будет храниться фамилия (нахрена звездочки?)
    string name; //имя
    double phone;//телефон  
    int day; //den'
    int month; // Месяц 
    int year; //год
};
 
void vvod_dan(note *a, int k=7) //ИМХО, лучше принимать длину массива - ну ок чё
{
    for (int i = 0; i < k; ++i)
    {
        cout << "Пришёл чувак под номером: " << i << endl;
        cout << "Напишите фамилию ";
        cin >> a[i].fam;
        cout << "Напишите имя ";
        cin >> a[i].name;
        cout << "Напишите телефон ";
        cin >> a[i].phone;
        cout << "Напишите день рождения ";
        cin >> a[i].day;
        cout << "Напишите месяц рождения ";
        cin >> a[i].month;
        cout << "Напишите год рождения ";
        cin >> a[i].year;
    }
    
    
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    note *BD;
    const int kol = 7;
 
    BD = new note[kol];
 
    vvod_dan(BD, kol);
 
    for (int i = 0; i < kol; i++)
        cout << "человек под номером-" << i << ": фамилия " << BD[i].fam << " имя " << BD[i].name << "Его телефон: " << BD[i].phone << "Дата рождения" << BD[i].day << "." << BD[i].month << "." << BD[i].year << endl;
 
    delete[]BD;
 
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2015, 14:18
Ответы с готовыми решениями:

Как сделать сортировку по дате в массивве объединений
Оформлены в виде массива объединений. Написать программу, которая вводит данные в память машины в...

Нужно было написать квадрат Пифагора по дате рождения, как исправить?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;math.h&quot; using namespace std; int main() {...

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

как сделать сортировку по дате?
Простой алгоритм от меньшей даты к большей... и воторой вопрос как посчитать количество дней с...

11
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.12.2015, 14:21 2
Где сортировка-то? Хоть какая-то.
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
07.12.2015, 14:31  [ТС] 3
Я пробовал вот это засунуть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if ((a.year[j]) >(a.year[j + 1]))
            {
                int tmp;                                                    
                tmp = a.year[j];
                a[j] = a.year[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
07.12.2015, 14:38 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = 0; i < 9-1; i++)
    {
        for (int j = 0; j < 9-i-1; j++)
        {
            if ((a.year[j]) >(a.year[j + 1]))
            {
                int tmp;                                                    
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
07.12.2015, 14:57  [ТС] 5
Цитата Сообщение от Dimension Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = 0; i < 9-1; i++)
    {
        for (int j = 0; j < 9-i-1; j++)
        {
            if ((a.year[j]) >(a.year[j + 1]))
            {
                int tmp;                                                    
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
}
Он выдает ошибку на а в строке
if ((a.year[j]) >(a.year[j + 1])) -выражение должно иметь тип класса
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.12.2015, 22:33 6
Лучший ответ Сообщение было отмечено Sonnik73 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < 9-1; i++)
    {
        for (int j = 0; j < 9-i-1; j++)
        {
            if (a[j].year > a[j + 1].year || (a[j].year == a[j + 1].year && (a[j].month > a[j + 1].month || (a[j].month == a[j + 1].month && a[j].day > a[j + 1].day))))
            {
                std::swap(a[j], a[j + 1]);
            }
        }
    }
}
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
08.12.2015, 00:40  [ТС] 7
Попробуйте скомпилировать, он без ошибки просто закрывается
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
// Стрeктуры.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h" 
#include <iostream> 
using namespace std;
#include <clocale> 
#include <conio.h> 
#include <string> //Модуль для строк
 
struct note     //Создаем структуру!
{
    string fam; //здесь будет храниться фамилия (нахрена звездочки?)
    string name; //имя
    double phone;//телефон  
    int day; //den'
    int month; // Месяц 
    int year; //год
};
 
void vvod_dan(note *a, int k = 8) //ИМХО, лучше принимать длину массива - ну ок чё
{
    for (int i = 0; i < k; ++i)
    {
        cout << "Пришел человек под номером: " << i << endl;
        cout << "Напишите фамилию ";
        cin >> a[i].fam;
        cout << "Напишите имя ";
        cin >> a[i].name;
        cout << "Напишите телефон ";
        cin >> a[i].phone;
        cout << "Напишите день рождения ";
        cin >> a[i].day;
        cout << "Напишите месяц рождения ";
        cin >> a[i].month;
        cout << "Напишите год рождения ";
        cin >> a[i].year;
    }
 
    for (int i = 0; i < 9 - 1; i++)
    {
        for (int j = 0; j < 9 - i - 1; j++)
        {
            if (a[j].year > a[j + 1].year || (a[j].year == a[j + 1].year && (a[j].month > a[j + 1].month || (a[j].month == a[j + 1].month && a[j].day > a[j + 1].day))))
            {
                std::swap(a[j], a[j + 1]);
            }
        }
    }
}
 
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    note *BD;
    const int kol = 7;
 
    BD = new note[kol];
 
    vvod_dan(BD, kol);
 
    for (int i = 0; i < kol; i++)
        cout << "человек под номером-" << i << " : фамилия " << BD[i].fam << " имя " << BD[i].name << " Его телефон: " << BD[i].phone << " Дата рождения " << BD[i].day << "." << BD[i].month << "." << BD[i].year << endl;
 
    delete[]BD;
 
    _getch();
    return 0;
}
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.12.2015, 01:27 8
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
#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <string>
#include <tuple>
#include <vector>
/////////////////////////////////////////////////////////////////////////////// 
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////// 
struct  T_note 
{
    //-------------------------------------------------------------------------
    T_note
        (
            int     year,
            int     month,
            int     day    
        )
        :
        year_   ( year  ),
        month_  ( month ),
        day_    ( day   )
    {}
    //-------------------------------------------------------------------------
    int     year_; 
    int     month_;
    int     day_;     
    //-------------------------------------------------------------------------
    bool    operator<   ( T_note    const   &   t )
    {
        return      std::make_tuple(    year_,      month_,     day_    )
                <   std::make_tuple(    t.year_,    t.month_,   t.day_  );
    }
    //-------------------------------------------------------------------------
    friend  std::ostream    &   operator<<
        (
            std::ostream            &   ostr,
            T_note          const   &   note
        )
    {
        ostr    <<  note.year_      <<  '\t'
                <<  note.month_     <<  '\t'
                <<  note.day_       <<  '\t';
 
        return  ostr;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////  
typedef std::vector     < T_note    >   T_notes;
///////////////////////////////////////////////////////////////////////////////  
template< class  T_cont >
void    print( T_cont   const   &   cont )
{
    std::copy
        (
            cont.begin                                      (),
            cont.end                                        (),
            std::ostream_iterator< T_cont::value_type >     ( std::cout, "\n" )
        );
}
///////////////////////////////////////////////////////////////////////////////  
int     main()
{
    std::locale::global(std::locale(""));
 
    T_notes     notes   =   {
                                T_note  (   2000,   1,  10  ),
                                T_note  (   2000,   1,  20  ),
 
                                T_note  (   2000,   2,  10  ),
                                T_note  (   2000,   2,  20  ),
 
                                T_note  (   2001,   1,  10  ),
                                T_note  (   2001,   1,  20  ),
 
                                T_note  (   2001,   2,  10  ),
                                T_note  (   2001,   2,  20  )
                            };
 
    std::random_shuffle
        (
            notes.begin     (),
            notes.end       ()
        );
 
    std::cout   <<  "Случайнo:"
                <<  std::endl;
 
    print( notes );
 
    std::sort
        (
            notes.begin     (),
            notes.end       ()
        );
 
    std::cout   <<  std::endl
                <<  "После сортировки:"
                <<  std::endl;
 
    print( notes );
    system("pause");
}
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
08.12.2015, 01:37 9
Sonnik73, с размером то определитесь ,создаете 7 ,передаете 8 ,в сортировке вообще 9
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
08.12.2015, 01:38  [ТС] 10
Мне нужно что бы 8 человек было
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
08.12.2015, 01:48 11
тогда пишите везде 8
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
08.12.2015, 01:57  [ТС] 12
Исправил, работает сейчас затестирую по все параметрам)

Добавлено через 3 минуты
Спасибо всем, сортирует, вот что получилось
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
// Стрeктуры.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h" 
#include <iostream> 
using namespace std;
#include <clocale> 
#include <conio.h> 
#include <string> //Модуль для строк
 
struct note     //Создаем структуру!
{
    string fam; //здесь будет храниться фамилия (нахрена звездочки?)
    string name; //имя
    double phone;//телефон  
    int day; //den'
    int month; // Месяц 
    int year; //год
};
 
void vvod_dan(note *a, int k = 8) //ИМХО, лучше принимать длину массива - ну ок чё
{
    for (int i = 0; i < k; ++i)
    {
        cout << "Пришел человек под номером: " << i << endl;
        cout << "Напишите фамилию ";
        cin >> a[i].fam;
        cout << "Напишите имя ";
        cin >> a[i].name;
        cout << "Напишите телефон ";
        cin >> a[i].phone;
        cout << "Напишите день рождения ";
        cin >> a[i].day;
        cout << "Напишите месяц рождения ";
        cin >> a[i].month;
        cout << "Напишите год рождения ";
        cin >> a[i].year;
    }
 
    for (int i = 0; i < 8 - 1; i++)
    {
        for (int j = 0; j < 8 - i - 1; j++)
        {
            if (a[j].year > a[j + 1].year || (a[j].year == a[j + 1].year && (a[j].month > a[j + 1].month || (a[j].month == a[j + 1].month && a[j].day > a[j + 1].day))))
            {
                std::swap(a[j], a[j + 1]);
            }
        }
    }
}
 
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    note *BD;
    const int kol = 8;
 
    BD = new note[kol];
 
    vvod_dan(BD, kol);
 
    for (int i = 0; i < kol; i++)
        cout << "человек под номером-" << i << " : фамилия " << BD[i].fam << " имя " << BD[i].name << " Его телефон: " << BD[i].phone << " Дата рождения " << BD[i].day << "." << BD[i].month << "." << BD[i].year << endl;
 
    delete[]BD;
 
    _getch();
    return 0;
}
0
08.12.2015, 01:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2015, 01:57
Помогаю со студенческими работами здесь

Сделать сортировку пациентов по дате
Добрый день ,помогите сделать сортировку пациентов по дате с 2017 ,он выводит и старые записи...

Как сделать сортировку по дате
Я не сильна в знании HTML языка, помогите пожалуйста... У меня идет сортировка новостей по...

Как сделать сортировку по дате
В базе хранятся даты(xx/xx/xxxx).Но есть и пустые поля. Какой нужен запрос , чтобы эти даты...

Сделать сортировку по дате издания
всем приятного впемени суток! есть программка которая каряво работает( записывает данные...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru