-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsource.cpp
More file actions
156 lines (154 loc) · 4.61 KB
/
Copy pathsource.cpp
File metadata and controls
156 lines (154 loc) · 4.61 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <iostream>
#include <iomanip>
#include <string>
#include "Header.h"
using namespace std;
struct Date
{
int day;
int month;
int year;
};
Date birthDay[10];
struct Student
{
string name;
Date birthDay;
char id[6];//номер зачётной книжки
};
Student group[10] =
{ "Алексей",4,8,2002,"00034",
"Иван",5,2,2002,"00008",
"Павел",9,10,2001,"00001",
"Рома",12,12,2003,"00235",
"Серёжа",23,11,2005,"00095",
"Василий",12,10,2003,"00036",
"Лев",19,12,2000,"00045",
"Пётр",23,5,2001,"00005",
"Ксюша",9,7,2000,"10983",
"Вова",12,11,2008,"00010",
};
ostream& operator<< (ostream& out, Student& person) //перегрузка для вывода
{
out << setw(8)<<person.name << setw(7)<< person.birthDay.day << "." << setw(2) <<person.birthDay.month << "." << setw(4)<< person.birthDay.year << setw(10)<< person.id;
return out;
}
bool cmp1(Student a, Student b) //функция для сравнения даты рождения студентов
{
if (a.birthDay.year > b.birthDay.year)
return 1;
else
{
if (a.birthDay.year < b.birthDay.year)
return 0;
else
{
if (a.birthDay.month > b.birthDay.month)
return 1;
else
{
if (a.birthDay.month < b.birthDay.month)
return 0;
else
{
if (a.birthDay.day > b.birthDay.day)
return 1;
else
return 0;
}
}
}
}
}
bool cmp2(Student a, Student b) { return (strcmp(a.id, b.id) == 1); } //функция для сравнения номера зачётной книжки студентов
bool cmp3(Student a, Student b) { return (a.name > b.name); } //функция для сортировки группы по алфавиту
template <typename T>
void change(T& a, T& b) //меняем элементы массива местами
{
T d = a;
a = b;
b = d;
}
int Menu()
{
int act;
cout << "1- Вывод группы" << endl;
cout << "2- Сортировка группы от старшего к младшему" << endl;
cout << "3- Сортировка по возрастанию номера зачётной книжки студента" << endl;
cout << "4- Сортировка по алфавиту, начиная с А" << endl;
cout << "5- Закончить работу" << endl;
cout << "Выберите действие" << endl;
cin >> act;
while (cin.fail()) {//исключение зацикливания в случае ввода недопустимых символов
cout << "Ошибка ввода. Повторите ввод\n";
cin.clear();//сброс в потоке флага ошибки
cin.ignore(10, '\n');//извлечение из буфера потока введенных символов
cin >> act;//повторный ввод
}
return act;
}
int main()
{
while (true)
{
int O;
int iter = 0;
int per = 0;
int l = 10; //количество человек в группе
system("chcp 1251> nul");
switch (Menu())
{
case 1:
{
for (int i = 0; (i < l); i++)
cout << group[i] << endl;
}
break;
case 2:
{
cout << "Каким способом выполнить сортировку?" << endl << "1. Метод пузырька" << endl << "2. Метод выбора" << endl;
cin >> O;
if (O == 1)
MPV(group, l, cmp1, iter, per);
else
MVV(group, l, cmp1, iter, per);
for (int i = 0; (i < l); i++)
cout << group[i] << endl;
cout << "Количество итераций " << iter << " Количество перестановок " << per << endl;
}
break;
case 3:
{
cout << "Каким способом выполнить сортировку?" << endl << "1. Метод пузырька" << endl << "2. Метод выбора" << endl;
cin >> O;
if (O == 1)
MPV(group, l, cmp2, iter, per);
else
MVV(group, l, cmp2, iter, per);
for (int i = 0; (i < l); i++)
cout << group[i] << endl;
cout << "Количество итераций " << iter << " Количество перестановок " << per << endl;
}
break;
case 4:
{
cout << "Каким способом выполнить сортировку?" << endl << "1. Метод пузырька" << endl << "2. Метод выбора" << endl;
cin >> O;
if (O == 1)
MPV(group, l, cmp3, iter, per);
else
MVV(group, l, cmp3, iter, per);
for (int i = 0; (i < l); i++)
cout << group[i] << endl;
cout << "Количество итераций " << iter << " Количество перестановок " << per << endl;
}
break;
case 5:
{
return 0;
}
break;
}
system("PAUSE");
}
}