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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ игра "жизнь." http://www.cyberforum.ru/cpp-beginners/thread813349.html
Здравствуйте, форумчане, я новенький по этому возможно буду ошибаться и говорить глупости. Но надеюсь вы таки мне поможете в понимании моментов в которых возникают сложности. В книге "Этюды для программистов" Ч.Уэзерелла, первым заданием является задача которая звучит так :(привожу в вложении так как условия только в формате изображений) Всего чего мне удалось добиться, так это вывода...
C++ как переделать массив что бы не было его остановки и как добавить индекс Такая вот задача найти индекс максимального элемента массива , вот мой код что тут не так и что следует добавить ? и почему у меня индекс вообще н правильно считает ? #include<iostream> #include<locale> using std::cout; using std::cin; using std::swap; using std::endl; #include<iomanip> using std::setw; http://www.cyberforum.ru/cpp-beginners/thread813346.html
C++ Как подключить openGL к своей программе?
везде написано, что она входит в состав windows. Пишу код в microsoft visual C++ 2010 express. Как мне туда подключить openGL ? Пишу openGL-овский код: glClearColor(1.0, 1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); glutDispayFunc(display); и мне IDE все это подчеркивает и говорит, что не знает, что это такое :(
C++ Ошибка в функции, связанная с использованием памяти
Все доброго времени суток. Помогите, пожалуйста, найти ошибку в моей функции: #include <wchar.h> #include "functions.h" // файл с прототипами функций wchar_t* cleanwchar_t out, const wchar_t in) { int n = wcslen(in);
C++ Составить Задачю по теме: Обработка символьной и строковой информации http://www.cyberforum.ru/cpp-beginners/thread813341.html
Результаты вступительных экзаменов в вуз предоставлены в виде списка из N строк, в каждой строке которого записаны фамилия студента и оценки по каждому из M экзаменов. Фамилия и оценки разделены пробелами. Например: Иванов 4 5 Соколова 3 5 Сидоров 2 5 Петров 5 5 Дроздова 4 2 Определить количество абитуриентов, сдавших хотя бы один экзамен на "двойку". Вывести фамилии таких учеников....
C++ Динамические массивы Даны целое число n и последовательность действительных чисел r1, r2, ..., rn, среди которых заведомо есть как отрицательные, так и положительные. Получить x1*y1+...+xs*ys, где x1, ..., xp - отрицательные члены последовательности r1, r2, ..., rn, взятые в порядке их следования, y1, ..., yq - положительные члены, взятые в обратном порядке. Все массивы в программе должны быть динамическими ... подробнее

Показать сообщение отдельно
Ilnurvampire
1 / 1 / 0
Регистрация: 26.10.2012
Сообщений: 18

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

20.03.2013, 03:00. Просмотров 753. Ответов 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;
              }
          }
      }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru