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

Сортировка массива объектов, созданных с помощью класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.83
One_X
 Аватар для One_X
0 / 0 / 3
Регистрация: 16.12.2010
Сообщений: 48
13.11.2011, 21:33     Сортировка массива объектов, созданных с помощью класса #1
Ниже приведен мой код программы описывающий "телефонный справочник", в котором каждый объект описан с помощью класса. Нужно дополнить программу: 1) Чтобы объекты Note myNote[k]; были упорядоченны по трем первым цифрам номера телефона; 2) Вывод информации о человеке, чья фамилия введена с клавиатуры (соответственно с помощью функции void Show())

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
#include <iostream>
#include <locale.h>
#include <conio.h>
using namespace std;
 
class Note
{
    char *name; // имя
    char *surname; // фамилия
    int data[3]; // дата рождения
    int number; // номер телефона
 
    public:
 
    Note(int n=20) // Конструктор
        {
        // Выделение памяти:
        name=new char[n];
        surname=new char[n];
        // Ввод данных:
        cout<<" Имя: "; cin>>name;
        cout<<" Фамилия: "; cin>>surname;
        cout<<" Дата рождения: ";
        for (int j=0; j<3; j++)
            cin>>data[j]; // Вводим дату через пробел
        cout<<" Номер: "; cin>>number;
        cout<<endl;
        }
    void Show() // Вывод информации на экран
        {
        cout<<" Имя: "<<name<<endl;
        cout<<" Фамилия: "<<surname<<endl;
        cout<<" Дата рождения: ";
        for (int j=0; j<3; j++)
            {
            cout<<data[j];
            if(j<2)cout<<"."; // разделитель даты
            }
        cout<<endl<<" Номер: "<<number<<endl;
        }
    ~Note() // Деструктор
        {
        // Освобождение выделенной памяти:
        delete []name;
        delete []surname;
        }
};
 
int main()
{   
    setlocale(LC_ALL,"Russian"); // Руссификация
    
    int const k=3;
    Note myNote[k];
    
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2011, 21:33     Сортировка массива объектов, созданных с помощью класса
Посмотрите здесь:

Создание Массива Объектов класса C++
C++ Узнать размер (количество) массива объектов класса
C++ Сортировка массива объектов класса
C++ Вызов метода для всех созданных объектов
C++ Создание массива объектов класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
13.11.2011, 21:37     Сортировка массива объектов, созданных с помощью класса #2
Цитата Сообщение от One_X Посмотреть сообщение
Ниже приведен мой код программы описывающий "телефонный справочник", в котором каждый объект описан с помощью класса. Нужно дополнить программу: 1) Чтобы объекты Note myNote[k]; были упорядоченны по трем первым цифрам номера телефона; 2) Вывод информации о человеке, чья фамилия введена с клавиатуры (соответственно с помощью функции void Show())

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
#include <iostream>
#include <locale.h>
#include <conio.h>
using namespace std;
 
class Note
{
    char *name; // имя
    char *surname; // фамилия
    int data[3]; // дата рождения
    int number; // номер телефона
 
    public:
 
    Note(int n=20) // Конструктор
        {
        // Выделение памяти:
        name=new char[n];
        surname=new char[n];
        // Ввод данных:
        cout<<" Имя: "; cin>>name;
        cout<<" Фамилия: "; cin>>surname;
        cout<<" Дата рождения: ";
        for (int j=0; j<3; j++)
            cin>>data[j]; // Вводим дату через пробел
        cout<<" Номер: "; cin>>number;
        cout<<endl;
        }
    void Show() // Вывод информации на экран
        {
        cout<<" Имя: "<<name<<endl;
        cout<<" Фамилия: "<<surname<<endl;
        cout<<" Дата рождения: ";
        for (int j=0; j<3; j++)
            {
            cout<<data[j];
            if(j<2)cout<<"."; // разделитель даты
            }
        cout<<endl<<" Номер: "<<number<<endl;
        }
    ~Note() // Деструктор
        {
        // Освобождение выделенной памяти:
        delete []name;
        delete []surname;
        }
};
 
int main()
{   
    setlocale(LC_ALL,"Russian"); // Руссификация
    
    int const k=3;
    Note myNote[k];
    
    _getch();
    return 0;
}
Чтобы отсортировать массив, нужно вызвать стандартный алгоритм std::sort. Чтобы он сортировал ваш массив по трем первым цифрам номера, вам нужно 1) либо перегрузить оператор < для вашего лкасса, то есть написать оператор-функцию operator >, 2) либо создать функциональный объект, который будет осуществлять сравнении элементов вашего массива по заданному критерию, и вызывать алгоритм std::sort, который имеет форму с функционалом.
One_X
 Аватар для One_X
0 / 0 / 3
Регистрация: 16.12.2010
Сообщений: 48
14.11.2011, 10:57  [ТС]     Сортировка массива объектов, созданных с помощью класса #3
Не представляю как это сделать.
Bers
14.11.2011, 11:01
  #4

Не по теме:

у меня Сыроежка со Страуструпом осациируется. Он нихира не отдаёт себе отчета, что имеет дело с новичками, и лечит им таким языком, который можно понять только если ты уже итак в теме

One_X
 Аватар для One_X
0 / 0 / 3
Регистрация: 16.12.2010
Сообщений: 48
15.11.2011, 17:33  [ТС]     Сортировка массива объектов, созданных с помощью класса #5
Проверте пожалуйста программу.

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
#include <iostream>
#include <locale.h>
#include <conio.h>
using namespace std;
 
class Note
{
    char *name; // имя
    char *surname; // фамилия
    int data[3]; // дата рождения
    int number; // номер телефона
 
    public:
    Note(int n=20) // Конструктор
        {
        // Выделение памяти:
        name=new char[n];
        surname=new char[n];
        // Ввод данных:
        cout << " Имя: "; cin >> name;
        cout << " Фамилия: "; cin >> surname;
        cout << " Дата рождения: ";
        for (int j=0; j<3; j++)
            cin >> data[j]; // Вводим дату через пробел
        cout << " Номер: "; cin >> number;
        cout << endl;
        }
 
    void Show() const// Вывод информации на экран
        {
        cout <<"\n Имя: "<<name<<endl;
        cout <<" Фамилия: "<<surname<<endl;
        cout <<" Дата рождения: ";
        for (int j=0; j<3; j++)
            {
            cout<<data[j];
            if(j<2)cout<<"."; // разделитель даты
            }
        cout<<endl<<" Номер: "<<number<<endl;
        }
    
    int sort(Note, Note); // Прототип функции, осуществляющей сортировку по номеру телефона
    void poisk(char*, Note, int, int); // Прототип функции, осуществляющей поиск по фамиилии
 
    ~Note() // Деструктор
        {
        // Освобождение выделенной памяти:
        delete []name;
        delete []surname;
        }
};
 
int Note::sort(Note a, Note b)
{
    if(a.number > b.number) return 1;
}
 
void Note::poisk(char *_surname, Note abc, int i, int kol)
{   
    static int c=0;
    cout << " '"<< _surname << "' and '" << abc.surname <<"'"<< endl;
    if(_surname == abc.surname)
        {
        c++;
        return abc.Show();
        }
    else if((c == 0)&&(i == kol-1)) cout << " Человек не найден!";
}
 
int main()
{   
    setlocale(LC_ALL,"Russian"); // Руссификация
    
    int const kol=3; // Количество человек
    cout << "Вводим данные:\n\n";
    Note myNote[kol];
 
// Сортировка объектов
for(int i=0; i<kol; i++)
{
    for(int i=0; i<kol-1; i++)
        if(myNote[i].sort(myNote[i], myNote[i+1]))
        {
        Note d = myNote[i];
        myNote[i] = myNote[i+1];
        myNote[i+1] = d;
        }
}
 
// Вывод отсортированных объектов
for(int i=0; i<kol; i++)
    myNote[i].Show();
 
// Поиск по фамилии
char _surname[20];
cout << " Поиск по фамилии: ";
cin >> _surname;
    
for(int i=0; i<kol; i++)
    myNote[i].poisk(_surname, myNote[i], i, kol);
 
    _getch();
    return 0;
}
One_X
 Аватар для One_X
0 / 0 / 3
Регистрация: 16.12.2010
Сообщений: 48
16.11.2011, 18:48  [ТС]     Сортировка массива объектов, созданных с помощью класса #6
Всё, сам сделал, вопрос закрыт.
Yandex
Объявления
16.11.2011, 18:48     Сортировка массива объектов, созданных с помощью класса
Ответ Создать тему
Опции темы

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