Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2017, 12:22   #1
bartle96
 
Регистрация: 25.11.2014
Сообщений: 9
По умолчанию Помогите с сортирвокой!

Нужно написать программу сортировки

Работа обязательно с файлами. В файле содержатся данные о сотрудниках предприятия: фамилия, должность, дата
рождения (день, месяц, год), стаж работы, зарплата (не менее 20 человек). В новый файл вывести данные, отсортированные по какому-либо ключу (в зависимости от номера задания). Вывод в новом файле ОБЯЗАТЕЛЬНО должен быть
отформатирован.
Сначала по одному ключу, потом по другому означает сравнения вида:
if(a[i].key1 < a[j].key1 || (a[i].key1 == a[j].key1 && a[i].key2 < a[j].key2))


Сначала по зарплате, потом по году рождения, потом по стажу работы с помощью сортировки выбором


Вот что я навоял,

Код:
//============================================================================
// Name        : 6.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iomanip>
#include <cstdlib>

using namespace std;



ifstream in("input.txt");
ofstream out("output.txt");

 struct date{//
	int dd, mm, yy;
 };

 struct people{//
 string Surname; //
 date DateOfBirth; //
 int Salary; //
 };

 date Str_to_Date(string str ){//
 date x;
 string temp = str.substr(0, 2);//
 x.dd = atoi(temp.c_str()) ;
 temp = str.substr(3, 2);//
 x.mm = atoi(temp.c_str());
 temp = str.substr(6, 4);
 x.yy = atoi(temp.c_str()) ;
 return x;
 }

vector<people> inFile(){
vector<people> x;
 people temp;
 while(in.peek() != EOF){
 in >> temp.Surname;
 string tmp;
 in >> tmp;
 temp.DateOfBirth = Str_to_Date(tmp);
 in >> temp.Salary;
 x.push_back(temp);
 }

 return x;
}


void print(people x){
  out << setw(10) << left << x.Surname;
  if(x.DateOfBirth.dd < 10) out << left << '0' << x.DateOfBirth.dd << '.';

  else out << left << x.DateOfBirth.dd << '.';
  if(x.DateOfBirth.mm < 10) out << '0' << x.DateOfBirth.mm << '.';

  else out << x.DateOfBirth.mm << '.';
  out << left << setw(6) << x.DateOfBirth.yy;
  out << left << setw(10) << x.Salary << endl;
 }




bool operator < (people a, people 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 stupid_sort(vector<people> &x){

for(int i=0; i<x.size() - 1;)
if(x[i + 1] < x[i]){
 swap(x[i], x[i + 1]);
 i = 0;
 }
 else i++;
 }



void stupid_sort2 (vector<people> &x){

	int size = x.size();

int step = x.size() / 2;//инициализируем шаг.
   while (step > 0)//пока шаг не 0
   {
     for (int i = 0; i < (size - step); i++)
               {
                   int j = i;
                   //будем идти начиная с i-го элемента
                   while (j >= 0 && x[j] > x[j + step])
                   //пока не пришли к началу массива
                   //и пока рассматриваемый элемент больше
                   //чем элемент находящийся на расстоянии шага
                   {
                       //меняем их местами
                       int temp = x[j];
                       x[j] = x[j + step];
                       x[j + step] = temp;
                       j--;
                   }
               }
               step = step / 2;//уменьшаем шаг
           }

}





 int main(){
  vector<people> x;
  x = inFile() ;
  stupid_sort2(x);
  for(int i= 0; i < x.size(); i++)
	  print(x[i]) ;
  return 0;
 }
Вложения
Тип файла: txt input (1).txt (314 байт, 149 просмотров)
bartle96 вне форума Ответить с цитированием
Старый 17.03.2017, 12:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

зачем очередная тема? чем старые не угодили?

Цитата:
Вот что я навоял,
А в прошлых говорили, что код дали. Когда вы соврали?
p51x вне форума Ответить с цитированием
Старый 17.03.2017, 13:07   #3
bartle96
 
Регистрация: 25.11.2014
Сообщений: 9
По умолчанию

Кто соврал? Это сам писал, но я не могу сделать нужную сортировку
Очень прошу помочь
bartle96 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод нужен срочно помогите ) в течение 2 часов от Паскаля на Турбо СИ нужно помогите Жанибек Помощь студентам 14 01.04.2015 17:23
Помогите создать програму для роботы с файлами, пожалуйста помогите нужно очень срочно Сергей Человек Фриланс 3 06.07.2009 19:30
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! VisTBacK Помощь студентам 6 19.09.2008 13:44