Форум: Форум C++Разное
Новые темы: 00
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отсортируйте файл по должности пирамидальной сортировкой.
 
 автор: jgplsl   (16.03.2017 в 12:55)   письмо автору
733 байт
 
 

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

#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;
}

  Ответить  
 
 автор: Елена Метрохина   (06.09.2019 в 17:32)   письмо автору
 
   для: jgplsl   (16.03.2017 в 12:55)
 

Благодарю за скрипт! Немного доработали, реализовали функционал здесь, заказчик остался доволен.
Если еще интересуетесь, могу поделиться доработанной версией.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования