Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bsod
28 / 12 / 2
Регистрация: 30.11.2011
Сообщений: 44
#1

Сортировка списка - C++

24.10.2012, 18:41. Просмотров 532. Ответов 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
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <conio.h>
using namespace std;
struct STUDENT
{
    char FIO[50];
    int day;
    int month;
    int year;
    int group;
    STUDENT *next;
};
STUDENT *phead, *t, *r; //phead - голова списка, t - последний элемент, r - текущий элемент
int reg()
{
    if (phead)
        {
            t->next = new (STUDENT);
            t = t->next;
            cout << "Добавление нового студента:\n\tВведите ФИО студента: ";
            getchar();
            cin.getline(t->FIO, 50);
            cout << "\tВведте год рождения: ";
            cin >> t->year;
            cout << "\tВведите месяц рождения: ";
            cin >> t->month;
            cout << "\tВведите день рождения: ";
            cin >> t->day;
            cout << "\tВведите группу студента: ";
            cin >> t->group;
            t->next = NULL;
        }
    else
        {
            phead = new (STUDENT);
            t = phead;
            cout << "Добавление нового студента:";
            cout << "\n\tВведите ФИО студента: ";
            getchar();
            cin.getline(t->FIO, 50);
            cout << "\tВведте год рождения: ";
            cin >> t->year;
            cout << "\tВведите месяц рождения: ";
            cin >> t->month;
            cout << "\tВведите день рождения: ";
            cin >> t->day;
            cout << "\tВведите группу студента: ";
            cin >> t->group;
            t->next = NULL;
        }
return 0;
} 
int output()
{
    cout << "Вывод списка студентов\n\n";
    if (!phead) {cout << "Список пуст"; return 0;}
    r = phead;
    while (r)
        {
            cout << "ФИО: ";
            cout << r->FIO;
            cout << "\nДата рождения: " << r->day << '.' << r->month << '.' << r->year;
            cout << "\nГруппа: " << r->group;
            cout << "\n\n";
            r = r->next;
        }
return 0;
}
int del()
{
    int num;
    cout << "Удаление студентов по заданной группе\n";
    if (!phead) {cout << "\nСписок пуст"; return 0;}
    cout << "Введите группу: ";
    cin >> num;
    STUDENT *tmp = 0;
    r = phead;
 
    while (r)
    {
        STUDENT *next = r->next;
        if (phead->group == num) 
            {
                tmp = phead;
                phead = phead->next;
                delete tmp;
            }
        else if (r->group == num)
            {
                if (tmp) tmp->next = next;
                delete r;
            }
        else
            {
                 tmp = r;
            }
        r = next;
    }
    return 0;
}
int sort()
{
}
void main()
    {
        setlocale (LC_ALL, ".1251");
        int menu;
label:
        system ("cls");
        cout << "Студенты";
        cout << "\n\tФункции: ";
        cout << "\n\n\t 1 - Добавить нового студента";
        cout << "\n\t 2 - Вывод всех студентов на экран";
        cout << "\n\t 3 - Удалить всех студентов с заданной группой";
        cout << "\n\t 4 - Сортировать по возрасту";
        cout << "\n\t 0 - Выход";
        cout << "\n\nEnter: ";
            cin >> menu; system ("cls");
            switch(menu)
            {
                case 1: reg(); break;
                case 2: output(); break;
                case 3: del(); break;
                case 4: sort(); break;
                case 0: exit(0); break;
                default: cout << "\nОшибка ввода"; break;
            }
        cout << "\n\n";
        system ("pause");
        goto label;
    }
заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 18:41     Сортировка списка
Посмотрите здесь:

Сортировка списка C++
Сортировка списка C++
C++ Сортировка списка
C++ Сортировка списка
Сортировка списка C++
Сортировка списка C++
C++ Сортировка списка
C++ Сортировка списка
"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка C++
Сортировка списка C++
Сортировка списка C++
C++ Сортировка списка

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bsod
28 / 12 / 2
Регистрация: 30.11.2011
Сообщений: 44
28.10.2012, 15:01  [ТС]     Сортировка списка #2
уже сделал сам
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
02.11.2012, 13:09     Сортировка списка #3
Bsod, сделали - поделитесь результатами, они могут оказаться полезны другим пользователям форума.
Bsod
28 / 12 / 2
Регистрация: 30.11.2011
Сообщений: 44
02.11.2012, 21:05  [ТС]     Сортировка списка #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
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
void year_sort()
    {
    STUDENT *a, *b, *tmp; //а - это tmp->next, b - это tmp->next->next
    bool f;
    do
    {
        f = false;
        if (phead->next && phead->year < phead->next->year)
            {
                a = phead->next;
                phead->next = phead->next->next;
                a->next = phead;
                phead = a;
                f = true;
            } //перестановка первых двух элементов
        tmp = phead;
        while(tmp->next && tmp->next->next)
        {
            a = tmp->next;
            b = tmp->next->next;
            if (a->year < b->year)
            {
                tmp->next=b;
                a->next = b->next;
                b->next = a;
                f = true;
            }
            tmp = tmp->next;
        } 
    } while(f); //перестановка всех остальных элементов
    }
void month_sort() //с сортировкой по месяцам и дням аналогично
    {
    STUDENT *a, *b, *tmp;
    bool f;
    do
    {
        f = false;
        if (phead->next && phead->month < phead->next->month && phead->year == phead->next->year)
            {
                a = phead->next;
                phead->next = phead->next->next;
                a->next = phead;
                phead = a;
                f = true;
            }
        tmp = phead;
        while(tmp->next && tmp->next->next)
        {
            a = tmp->next;
            b = tmp->next->next;
            if (a->month < b->month && a->year == b->year)
            {
                tmp->next=b;
                a->next = b->next;
                b->next = a;
                f = true;
            }
            tmp = tmp->next;
        }
    } while(f);
    }
void day_sort()
    {
    STUDENT *a, *b, *tmp;
    bool f;
    do
    {
        f = false;
        if (phead->next && phead->day < phead->next->day && phead->year == phead->next->year && phead->month == phead->next->month)
            {
                a = phead->next;
                phead->next = phead->next->next;
                a->next = phead;
                phead = a;
                f = true;
            }
        tmp = phead;
        while(tmp->next && tmp->next->next)
        {
            a = tmp->next;
            b = tmp->next->next;
            if (a->day < b->day  && a->year == b->year && a->month == b->month)
            {
                tmp->next=b;
                a->next = b->next;
                b->next = a;
                f = true;
            }
            tmp = tmp->next;
        }
    } while(f);
    }
//сортировка по возрасту
int sort()
{
    if (!phead) {cout << "Список пуст\n"; return 0;}
    year_sort();
    month_sort();
    day_sort();
    t = phead;
    while (t) t = t->next;
cout << "Список отсортирован\n";
return 0;
}
Yandex
Объявления
02.11.2012, 21:05     Сортировка списка
Ответ Создать тему
Опции темы

Текущее время: 18:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru