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

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

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

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

20.03.2013, 03:00. Просмотров 782. Ответов 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;
              }
          }
      }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 03:00     Сортировка массива структур
Посмотрите здесь:

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

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

Сортировка массива структур - C++
Здравствуйте! Помогите пожалуйста реализовать сортировку массива структур по полю &quot;date&quot; (все записи должны быть отсортированны по дате)....

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

Сортировка массива структур - C++
Ругается на использование структуры, соответственно не работает вся программа. Задача: отсортировать массив по типу культур. struct...

Сортировка массива структур - C++
void sortByFio() { int i,j; char temp; char temp2; char temp3; for (i = 0; i&lt;len; i++) { for ( i = j+1; j&lt;len; j++) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UnsKneD
алкокодер
154 / 150 / 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);
...
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 14:12     Сортировка массива структур
Еще ссылки по теме:

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

Сортировка массива структур - C++
не могу понять почему не работает. Программа должна сортануть массив из 10 елементов типа Struct. массив я забиваю из файла. есть...

Сортировка массива структур - C++
Есть файл с текстом(this is spartaaaaaa!), нужно посчитать количество повторений каждого символа, вывести все это в консоль, затем...

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

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

Сортировка массива структур - C++
Имеется массив структур, который необходимо отсортировать по числовому ключу. Я написал код, но он не работает, поэтому просьба указать на...


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

Или воспользуйтесь поиском по форуму:
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18
20.03.2013, 14:12  [ТС]     Сортировка массива структур #5
спасибо
Yandex
Объявления
20.03.2013, 14:12     Сортировка массива структур
Ответ Создать тему
Опции темы

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