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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
#1

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

20.03.2013, 03:00. Просмотров 792. Ответов 4
Метки нет (Все метки)

Дана структура 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;
              }
          }
      }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 03:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка массива структур (C++):

Сортировка массива структур через сортировку массива указателей - C++
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста. Код программы: ...

Сортировка массива структур - C++
Господа есть массив структур, необходимо его отсортировать по полю name с помощью функции qsort. Вроде как написал без ошибок, но...

Сортировка массива структур - C++
Нужно создать структуру Student c полями Имя, Номер группы, Оценки (массив из 5 элементов) #include &quot;stdafx.h&quot; using namespace std; ...

Сортировка массива структур - C++
В общем, то что в названии темы, то и не получается. Не хочет присваиваться адрес предыдущей ячейки в массиве stud1.h #include...

Сортировка массива структур - C++
Привет всем ! как отсортировать массив структур ? а то почему не получается ... вот код #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

Сортировка массива структур - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;stdio.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
20.03.2013, 03:36 #2
Ilnurvampire, А по какому параметру нужно отсортировать?
0
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
20.03.2013, 06:03  [ТС] #3
по полю fio
0
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 89
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);
...
}
1
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
20.03.2013, 14:12  [ТС] #5
спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 14:12
Привет! Вот еще темы с ответами:

Сортировка массива структур - C++
Разработать программу, реализующую сортировку массива структур (50 элементов). В качестве элемента массива выбрать структуру,...

Сортировка массива структур - C++
Не могу понять как отсортировать массив структур по убыванию, попробовал несколько алгоритмов,но не получается....программа должна выводить...

Сортировка массива структур - C++
Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN; записи...

Сортировка массива структур - C++
Разьясните пожалуйста в как можно поступить по другому. Не выделяя, как у меня дополнительный массив. #include&lt;iostream&gt; const...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.03.2013, 14:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru