Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: jgplsl (16.03.2017 в 12:55) В файле содержатся данные о сотрудниках предприятия: должность,фамилия, дата рождения (день, месяц, год), стаж работы, зарплата. Отсортируйте файл по должности с помощью пирамидальной сортировки. Помогите пожалуйста, теории на занятиях не было, а самостоятельно к сожалению не могу понять метод сортировки и применить его на данный шаблон.
#include<iostream> #include<fstream> #include<string> #include<vector> #include<iomanip> #include<cmath> using namespace std; ifstream in("input.txt"); ofstream out("output.txt"); struct date{//объявляем тип - структуру с датой int dd, mm, yy; }; struct people{//объявляем тип - структуру с данными о человеке string Dol;//Должность string Surname; //фамилия date DateOfBirth; //дата рождения int Salary, Stag; //зарплата, стаж }; date Str_to_Date(string str){//из строки в дату date x; string temp = str.substr(0, 2);//в temp записываем часть строки с днем из даты рождения (ДР) x.dd = atoi(temp.c_str());//переводим строку temp в число-день temp = str.substr(3, 2);//в temp записываем часть строки с месяцем из даты рождения (ДР) x.mm = atoi(temp.c_str());//переводим строку temp в число-месяц temp = str.substr(6, 4);//в temp записываем часть строки с годом из даты рождения (ДР) x.yy = atoi(temp.c_str()); //переводим строку temp в число-год return x; } vector<people> inFile(){//функция считывает из файла данные о людях и возвращает вектор из people в качестве результата vector<people> x; people temp; while(in.peek() != EOF){ in >> temp.Dol; in >> temp.Surname;//считывается фамилия string tmp;//объявляем строку для считывания даты рождения in >> tmp;//считываем строку с датой рождения (ДР) temp.DateOfBirth = Str_to_Date(tmp); // переводим строку с ДР в структуру ДР in >> temp.Stag;//считываем стаж in >> temp.Salary;//считываем зарплату x.push_back(temp); //добавляем человека temp в вектор x } return x; // возвращаем вектор из людей как результат функции } void print(people x){//функция выводит данные о человеке х в файл out << setw(15) << left << x.Dol; out << setw(10) << left << x.Surname;// setw(10)- 10 позиций для фамилии, left - выравнивание по левому краю if (x.DateOfBirth.dd < 10) out << left << '0' << x.DateOfBirth.dd << '.';//если день в ДР <10, то добавляем 0, например, 02 else out << left << x.DateOfBirth.dd << '.'; if (x.DateOfBirth.mm < 10) out << '0' << x.DateOfBirth.mm << '.';//если месяц в ДР <10, то добавляем 0, например, 02 else out << x.DateOfBirth.mm << '.'; out << left << setw(6) << x.DateOfBirth.yy;//на год отводится 6 позиций, выравнивание по левому краю out << left << setw(4) << x.Stag ; out << left << setw(10) << x.Salary << endl;//на запрлату отводится 10 позиций, выравнивание по левому краю } bool operator < (people a, people b){//переопределяем оператор < для сравнения двух людей a и b в соотвествии с условием if (a.Surname < b.Surname) return true; if (a.Surname == b.Surname && a.DateOfBirth.yy < b.DateOfBirth.yy) return true; if (a.Surname == b.Surname && a.DateOfBirth.yy == b.DateOfBirth.yy && a.Salary < b .Salary) return true; return false; } void Heap_sort(vector<people> &x) ??????????????????????????? ??????????????????????? ????????????????????????? ??????????????????????????? int main(){ vector<people> x; x = inFile(); Heap_sort(x); for(int i = 0; i < x.size(); i++) print(x[i]); return 0; }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: