Форум программистов, компьютерный форум CyberForum.ru

Сортировка массива структур - C++

Восстановить пароль Регистрация
 
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
20.03.2013, 03:00     Сортировка массива структур #1
Дана структура WORKER и массив из 10 стркутур. Нужно 1)сортировать список
2) вывести на экран рабочих чей стаж больше числа введённого с клавы. 2-ое сделал, не получается отсортировать. Пробовал с помощью qsort выдаёт ошибку. Структура считывается с файла. Функция сортировки выделена красным.
C++
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
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
const int n=10;
struct  WORKER
  {
       char fio[50];
       char prof[40];
       int year;
       
  };
  int comp (const void* a, const void* b);
//  long lSize;
  //создание списка(запись в файл)-------------------------------
   void print_dbase(WORKER man)
      {
          FILE *f;
          f=fopen("dbase","wb");
          cout<<"Сведения о сотрудниках\n";
          if (f)
          {
          for (int i=0; i<n; i++)
          {
            cout << " ФИО " << " "; cin >> man.fio;
            cout << " Профессия " <<  " " ; cin >> man.prof;
            cout << " Год поступления на работу " << " "; cin >> man.year;
            cout<<endl;
            fwrite(&man, sizeof(WORKER), 1, f);
          }
           fclose(f);   
            }
     }
     //-------------------------------------------------------
     
     //чтение списка из файла--------------------------------
     void write_dbase(WORKER man)
     {
         FILE *f;
        f=fopen("dbase","rb");
        cout<<"==============================================\n";
      while (fread(&man, sizeof(WORKER), 1, f))
       {
           cout<<"ФИО: "<<man.fio<<endl;
           cout<<"Профессия: "<<man.prof<<endl;
           cout<<"Год поступления на работу: "<<man.year<<endl;
           cout<<endl;
       }
       cout<<"==============================================\n";
       }
//----------------------------------------------------------------------
     
//menu -----------------------------------------------------------------
     int menu()
     {
         int option;
          do {
          cout<<"\nГлавное меню\n";
          cout<<"1- заполнить список\n";
          cout<<"2- вывод списка на экран\n";
          cout<<"3- вывести на экран сотрудников чей стаж меньше n\n";
          cout<<"4- сортировка списка\n"
          cout<<"5- exit\n";
          cin>>option;
     }
     while(!option);
     return option;
    }
    
//стаж------------------------------------------------------------------
    void experience(WORKER man)
    {
         int kol=0,stazh;
         FILE *f;
         f=fopen("dbase","rb");
         cout<<"Введите стаж: ";
         cin>>stazh;
         while (fread(&man, sizeof(WORKER), 1, f))
         {
            if ((2013-man.year)>stazh)
              {
                  cout<<man.fio<<endl;
                  kol++;
              }
         }
         if (kol==0) cout<<"Работников со стажем больше "<<stazh<< " лет(года) нет";
    }
//----------------------------------------------------------------------    
    
//сортировка списка-----------------------------------------------------
 
 
[COLOR="red"]//СОРТИРОВКА//////////////////////////////////////////////////////////
void sort(WORKER man)
{
    FILE *f;
         f=fopen("dbase","rb");
    qsort(man, 3, sizeof(WORKER), comp);
      while (fread(&man, sizeof(WORKER), 1, f))
       {
           cout<<"ФИО: "<<man.fio<<endl;
           cout<<"Профессия: "<<man.prof<<endl;
           cout<<"Год поступления на работу: "<<man.year<<endl;
           cout<<endl;
       }
    int comp(const void* a, const void* b)
{
        const WORKER* k = (const WORKER*)a;
        const WORKER* m = (const WORKER*)b;
        int s = ((k->fio) - (m->fio));
 
        return s;
}
}[/COLOR]
    
//----------------------------------------------------------------------    
    
// main function--------------------------------------------------------
     int main()
      {
          WORKER man;
          while (true)
          {
              switch (menu())
              {
                  case 1: print_dbase(man);     break;
                  case 2:write_dbase(man);      break;
                  case 3:experience(man);       break;
                  case 4:sort(man);             break;
                  case 5:                       return 0;
                 default : cout<<"error\n";     break;
              }
          }
      }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 03:00     Сортировка массива структур
Посмотрите здесь:

C++ Сортировка массива структур
C++ Сортировка массива структур...
Сортировка массива структур C++
Сортировка массива структур C++
C++ Сортировка массива структур
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
20.03.2013, 03:36     Сортировка массива структур #2
Ilnurvampire, А по какому параметру нужно отсортировать?
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
20.03.2013, 06:03  [ТС]     Сортировка массива структур #3
по полю fio
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 88
20.03.2013, 09:15     Сортировка массива структур #4
у вас программе нет массива типа WORKER, который будет сортировать функция qsort.

вот набросок фрагмета с сортировкой
C++
1
2
3
4
5
6
          WORKER *mans;
          mans=new WORKER[n];
          read_from_file(mans);
          sort(mans);
           print_mans(mans);
          delete man;
соответственно переписывается функция sort

C++
1
2
3
4
5
6
void sort(WORKER *mans)
{
...
qsort(man, n, sizeof(WORKER), comp);
...
}
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
20.03.2013, 14:12  [ТС]     Сортировка массива структур #5
спасибо
Yandex
Объявления
20.03.2013, 14:12     Сортировка массива структур
Ответ Создать тему
Опции темы

Текущее время: 06:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru