Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- using namespace std;
- struct student {
- public:
- student() : fullname(L"-"), group(L"-"), point(0) { };
- student(wstring _fullname, wstring _group, double _point) : fullname(_fullname), group(_group), point(_point) { };
- student(const student &);
- ~student();
- void input();
- void output()const;
- student operator =(const student &);
- friend bool operator==(const student &, const student &);
- friend bool operator!=(const student &, const student &);
- void check_double(const wstring);
- wstring fullname;
- wstring group;
- double point;
- };
- void ru();
- void uswap(student &, student &);
- void quick_sort(student *, const size_t, const size_t);
- int main() {
- ru();
- student ivanov = student(L"Иванов Игорь Филиппович", L"115а", 4.12);
- student petrov = student(L"Петров Аркадий Егорович", L"114в", 4.27);
- student sidorova = student(L"Сидорова Наталья Петровна", L"119г", 4.81);
- if (ivanov == petrov) wcout << L"Иванов и Петров совпадают\n";
- if (petrov != sidorova) wcout << L"Петров и Сидорова не совпадают\n";
- const size_t size = 6;
- student students[size];
- students[0] = ivanov;
- students[1] = petrov;
- students[2] = sidorova;
- for (size_t n = 3; n < size; n++) students[n].input();
- wcout << L"\n\t\t\tИсходный список студентов:\n\n";
- for (size_t n = 0; n < size; n++) students[n].output();
- quick_sort(students, 0, size - 1);
- wcout << L"\n\t\t Отсортированный список студентов:\n\n";
- for (size_t n = 0; n < size; n++) students[n].output();
- wcout << L"\n\t\t\t Вывод пустого объекта:\n\n";
- student unknown;
- unknown.output();
- cin.get();
- return 0;
- }
- student::~student() {
- group = fullname = L"";
- point = 0;
- }
- student::student(const student & _student) {
- this->fullname = _student.fullname;
- this->group = _student.group;
- this->point = _student.point;
- }
- student student::operator=(const student & _student) {
- this->fullname = _student.fullname;
- this->group = _student.group;
- this->point = _student.point;
- return *this;
- }
- bool operator==(const student & _left, const student & _rigth) {
- bool flag;
- if (_left.fullname == _rigth.fullname && _left.group == _rigth.group && _left.point == _rigth.point) flag = true;
- else flag = false;
- return flag;
- }
- bool operator!=(const student & _left, const student & _rigth) {
- return !(_left == _rigth);
- }
- void student::input() {
- wcout << L"Введите ФИО студента: "; getline(wcin, fullname);
- wcout << L"Введите группу: "; getline(wcin, group);
- check_double(L"Введите средний балл: ");
- system("cls");
- }
- void student::output()const {
- wchar_t v = L' ';
- streamsize accuracy = 2, fio = 48, grp = 8, pnt = 6;
- wcout << v << left << setw(fio) << fullname
- << right << setw(grp) << group
- << right << setw(pnt) << fixed << setprecision(accuracy) << point << endl;
- }
- void student::check_double(const wstring _msg) {
- do {
- wcout << _msg; cin >> point;
- if (cin.good() && point >= 0 && point <= 5) break;
- else {
- cin.clear();
- cin.ignore(80,'\n');
- wcout << L"\aВы ошиблись!\n";
- }
- } while (true);
- fflush(stdin);
- }
- void quick_sort(student * _students, const size_t _beg, const size_t _end) {
- int n = (int)_beg, m = (int)_end;
- student mid;
- mid.fullname = _students[(_beg + _end) >> 1].fullname;
- do {
- while (_students[n].fullname < mid.fullname && n < (int)_end) ++n;
- while (_students[m].fullname > mid.fullname && m > (int)_beg) --m;
- if (n <= m) {
- if (n < m) uswap(_students[n], _students[m]);
- ++n;
- --m;
- }
- } while (n <= m);
- if ((int)_beg < m) quick_sort(_students, _beg, m);
- if (n < (int)_end) quick_sort(_students, n, _end);
- }
- void uswap(student & _a, student & _b) {
- student temp = _a;
- _a = _b;
- _b = temp;
- }
- void ru() {
- wcout.imbue(locale("rus_rus.866"));
- wcin.imbue(locale("rus_rus.866"));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement