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

Помощь по задаче(структура, двойная сортировка) - C++

Восстановить пароль Регистрация
 
roman_stuffy
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 31
22.03.2013, 22:30     Помощь по задаче(структура, двойная сортировка) #1
В общем, парни, совсем запутался и запарился) нужна помощь по этой задаче:
11. Сформировать массив структур, каждый элемент которого содержит следующие поля:
• шифр подразделения, содержащий не более трёх символов (вво-дим);
• фамилия, имя, отчество (вводим);
• год рождения (вводим);
• образование, например, 0 – неоконченное базовое, 1 – базовое, 2 – общее среднее и т. д. (вводим).
Для заданного подразделения, шифр которого вводим, рассортировать сотрудников сна¬чала по образованию, а затем по возрасту. Информация об остальных сотрудниках должна следовать в том же порядке, что и в исходном массиве.

Проблемы сейчас в выводе, в двойной сортировке, со связью структуры с сортировкой(что-то в она не видит массив х как структуру)

Вот практически весь код. но кое-где выскакивают ошибки непонятные, кое-где не знаю, как реализовать...
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
//worker.h
#ifndef WORKER_H
#define WORKER_H
 
const int MAX_MEN=5; // MAX_MEN   - количество сотрудников
int NEEDSHIFR=0,     // NEEDSHIFR - интересуемый вводимый шифр
    k=0;             // k - для кол-ва записей с интересующим шифром
 
struct MYDATE // MYDATE - структура даты 
{
    char day;
    char month;
    int  year;
};
 
struct WORKER // WORKER - структура сотрудников
{
    int  shifr;
    char name[20];
    int  birth;
    int  aduc;
 
};
 
class CLASS_WORKERS
{
private:
    WORKER x[MAX_MEN]; // x[MAX_MEN] - массив записей
    bool  SH[c];       // SH[c]      - массив для "правда" или "ложь"
public:
    void Input();
    void Sort (int,int);
    void Print();
 
}
#endif
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
//worker.cpp
#include <iostream>
#include <windows.h>
#include "worker.h"
;
using namespace std;
 
HANDLE hOUTPUT = GetStdHandle(STD_OUTPUT_HANDLE);
 
void CLASS_WORKERS::Input()
{
    cout<<"Введите данные сотрудников :"<<endl;
    for(int i=0;i<MAX_MEN; ++i)  //i - счётчик цикла
    {
        cout<<"Сотрудник №"<<(i+1)<<endl;
 
        cout<<"Шифр: ";
        cin>>x[i].shifr;
        cout<<endl;
 
        cout<<"ФИО: ";
        cin>>x[i].name;
        cout<<endl;
 
 
        cout<<"Дата рождения: ";
        cin>>x[i].birth;
        cout<<endl;
 
        cout<<"Образование: ";
        cin>>x[i].aduc;
        cout<<endl;
        
        cout<<"Введите интересуемый вас шифр:"<<endl;       
        cin>>NEEDSHIFR;
 
        int const  ;      
        for(int p=0;p<MAX_MEN;++p)  //p - счётчик цикла
        {
            if(x[p].shifr == NEEDSHIFR ) 
            {
                k=k++;
                SH[p]=1;
            }   
            else
            {
                SH[p]=0;
            }
        }
    }
 
 
 
}
 
void CLASS_WORKERS::Print()
{
    for(int i=0;i<MAX_MEN; ++i)
    {
        SetConsoleTextAttribute(hOUTPUT,FOREGROUND_GREEN);
        cout<<"Сотрудник №"<<(i+1)<<endl;
        SetConsoleTextAttribute(hOUTPUT,FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN );
        
    }
 
    
}
 
void Sort(int size)
{
    int tmp, i, j;
 
    for(i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (x[j+1].aduc < x[j].aduc) 
            {
                tmp = x[j+1].aduc; 
                x[j+1].aduc = x[j].aduc; 
                x[j].aduc = tmp;
            }
        }
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//main.cpp
#include <iostream>
#include "worker.h"
;
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE,".1251"); // для вывода текста на русском языке
    
    CLASS_WORKERS b;
    
    b.Input();
    //b.Sort();
    b.Print();
    
 
return 0;
}
перед "using namespace std" стоят ";", потому что без них выскакивает ошибка.

Заранее всем огромное спасибо)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mindz
 Аватар для Mindz
7 / 7 / 1
Регистрация: 31.01.2010
Сообщений: 51
22.03.2013, 23:36     Помощь по задаче(структура, двойная сортировка) #2
Изврат конечно, но есть подозрения что точки запятой не хватает после определения класса CLASS_WORKERS.Могу конечно ошибаться.
roman_stuffy
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 31
22.03.2013, 23:55  [ТС]     Помощь по задаче(структура, двойная сортировка) #3
Цитата Сообщение от Mindz Посмотреть сообщение
Изврат конечно, но есть подозрения что точки запятой не хватает после определения класса CLASS_WORKERS.Могу конечно ошибаться.
точно. спасибо большое. просто только что начал изучать классы и структуры.
Mindz
 Аватар для Mindz
7 / 7 / 1
Регистрация: 31.01.2010
Сообщений: 51
23.03.2013, 16:54     Помощь по задаче(структура, двойная сортировка) #4
Попробуем сейчас что нить придумать.

Добавлено через 16 часов 54 минуты
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
#include <stdio.h>
#include <cstdlib>
#include <string.h>
 
#define MAXELEMENTS 5
#define MAXLENGTHCODE 3
 
typedef struct Date
{
  unsigned int day,
               month,
               year;
} _date_t;
 
typedef struct Worker
{
  char _code[MAXLENGTHCODE];
  char  _firstName[20];
  char  _lastName[20];
  unsigned int _education;
  _date_t _dob;
 
} _worker_t;
 
void _sorting( _worker_t * );
 
int main()
{  
  _worker_t _Massive[MAXELEMENTS];
 
  printf( "%s", "Enter the data of the worker.\n" );
 
  for ( size_t index = 0; index < MAXELEMENTS; index++ ) {
       printf( "%s", "\nEnter the code division: " );
       scanf( "%s", _Massive[index]._code );
       printf( "%s", "\nEnter the first name: " );
       scanf( "%s", _Massive[index]._firstName );
       printf( "%s", "\nEnter the last name: " );
       scanf( "%s", _Massive[index]._lastName );
       printf( "%s", "\nEnter the education of worker:\n 0 - Unfinished base\n 1 - Base\n 2 - Middle\n 3 - Unfinished high\n 4 - High\n Input: " );
       scanf( "%u", &_Massive[index]._education );
       printf( "%s", "\nEnter the dob of worker - format day month year(30 2 1902): " );
       scanf( "%u %u %u", &_Massive[index]._dob.day, &_Massive[index]._dob.month, &_Massive[index]._dob.year );
  }
 
  _sorting( _Massive );
 
  system("PAUSE");
 
  return EXIT_SUCCESS;
}
 
void _sorting( _worker_t *_pt )
{
  char divCode[MAXLENGTHCODE];
  _worker_t _tmp;
 
  printf( "%s","Just enter a code division: " );
  scanf( "%s", divCode );
 
  /************education sorting***********/
 
  for ( size_t i = 0; i <= MAXELEMENTS/2; i++ ) {
       if ( strcmp( _pt[i]._code, divCode ) == 0 ) {
           for ( size_t j = MAXELEMENTS - 1; j >= MAXELEMENTS/2; j--  ) {
                if( _pt[i]._education > _pt[MAXELEMENTS/2]._education || _pt[j]._education < _pt[MAXELEMENTS/2]._education ) {
                   _tmp = _pt[i];
                   _pt[i] = _pt[j];
                   _pt[j] = _tmp;
                }
           }
       }
  }
}
Грубовато конечно.
roman_stuffy
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 31
23.03.2013, 20:47  [ТС]     Помощь по задаче(структура, двойная сортировка) #5
Mindz, есть успехи?
Yandex
Объявления
23.03.2013, 20:47     Помощь по задаче(структура, двойная сортировка)
Ответ Создать тему
Опции темы

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