Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
1

Сортировка "пузырьком" массива структур по заданному полю

01.05.2016, 17:13. Просмотров 631. Ответов 13
Метки нет (Все метки)

Нужно отсортировать структуру по фамилии доктора, но что то он не сортирует.

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
void sortDoc(Doctor doctor)
{
    int size;
    ifstream file;
    file.open("doctors.dat", ios::binary | ios::app);
    if (!file) cout << endl << " File can't be opened! " << endl;
    else
    {
        file.seekg(0, ios::end);
        size = file.tellg();
        size = size / sizeof(Doctor);
        file.seekg(0, ios::beg);
        Doctor *doctors = new Doctor[size];
        file.read((char*)doctors, sizeof(Doctor)*size);
        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (doctor.surnameDoctor[j + 1] < doctor.surnameDoctor[j])
                {
                    char temp = doctor.surnameDoctor[j + 1];
                    doctor.surnameDoctor[j + 1] = doctor.surnameDoctor[j];
                    doctor.surnameDoctor[j] = temp;
                }
            }
        }
        file.close();
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2016, 17:13
Ответы с готовыми решениями:

Отсортировать массив структур типа "Znak" по заданному полю
Вот что есть, помогите дальше... Я Ввожу знак зодиака и у меня должно сортировать в том порядке в...

Реализовать поиск в массиве структур "Student" по заданному полю
Я очень мало понимаю в программировании, но лабораторные как-то надо сдавать, учитывая, что препод...

Реализовать поиск в массиве структур "Znak" по заданному полю
Описать структуру с именем znak, содержащую следующие поля: • фамилия, имя; • знак Зодиака;...

Реализовать поиск по заданному полю в массиве структур типа "Student"
не могу понять почему не работает цикл void init?? Срабатывает только один раз(то есть могу ввести...

Реализовать поиск в массиве структур "Student" по заданному полю (файловый ввод/вывод)
Помогите написать программы... 1. Пусть на диске текстовый файл ' Hrupa.txt ' , каждая строка...

13
-ДоМоВоЙ-
149 / 148 / 124
Регистрация: 19.01.2016
Сообщений: 578
Записей в блоге: 1
Завершенные тесты: 1
01.05.2016, 17:17 2
Ascendary, Временная переменная должна быть одного типа с сортируемой ..
C++
1
Doctor temp.surnameDoctor=doctor.surnameDoctor[j + 1];
0
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
01.05.2016, 17:19  [ТС] 3
Цитата Сообщение от -ДоМоВоЙ- Посмотреть сообщение
Временная переменная должна быть одного типа с сортируемой ..
C++
1
char temp = doctor.surnameDoctor[j + 1];
а какой тип у doctor.surnameDoctor[j + 1] ?
0
-ДоМоВоЙ-
149 / 148 / 124
Регистрация: 19.01.2016
Сообщений: 578
Записей в блоге: 1
Завершенные тесты: 1
01.05.2016, 17:30 4
Ascendary,
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (doctor[j+1].surnameDoctor < doctor[j].surnameDoctor)
                {
                    Doctor temp.surnameDoctor = doctor[j+1].surnameDoctor;
                    doctor[j+1].surnameDoctor = doctor[j].surnameDoctor;
                    doctor[j].surnameDoctor= temp.surname;
                }
            }
        }
Добавлено через 3 минуты
Цитата Сообщение от Ascendary Посмотреть сообщение
а какой тип у doctor.surnameDoctor[j + 1] ?
C++
1
Doctor
не
C++
1
doctor.surnameDoctor[j+1];
a
C++
1
doctor[j+1].surnameDoctor
0
01.05.2016, 17:30
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
01.05.2016, 17:38  [ТС] 5
-ДоМоВоЙ-, я так уже пробовал, тогда выдаёт кучу
0
-ДоМоВоЙ-
149 / 148 / 124
Регистрация: 19.01.2016
Сообщений: 578
Записей в блоге: 1
Завершенные тесты: 1
01.05.2016, 17:45 6
Ascendary, выложите весь код, а не только функцию сортировки...

Добавлено через 1 минуту
Ascendary,У вас ошибка... Не doctor а doctors
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (doctors[j+1].surnameDoctor < doctors[j].surnameDoctor)
                {
                    Doctor temp.surnameDoctor = doctors[j+1].surnameDoctor;
                    doctors[j+1].surnameDoctor = doctors[j].surnameDoctor;
                    doctors[j].surnameDoctor= temp.surname;
                }
            }
        }
0
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
01.05.2016, 17:47  [ТС] 7
-ДоМоВоЙ-,
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
#include<iostream>
#include<fstream>
#include<iomanip>
#include <Windows.h>
using namespace std;
struct Doctor
{
    char nameDoctor[30];
    char surnameDoctor[30];
    char personalCodeDoctor[14];
    char specialityDoctor[40];
    unsigned int numberCabinetDoctor; 
};
struct  Patient
{
    char namePatient[30];
    char surnamePatient[30];
    char sexPatient[9]; 
    char personalCodePatient[14];
    char phonePatient[14];
    char diagnosisPatient[40];
};
struct Visit
{
    char surnamePatientVisit[30];
    char surnameDoctorVisit[30]; 
    char dateVisit[13];
    char timeVisit[8];
    char priceVisit[5];
};
 
switch (choise)
                      {
                      case 1:
                      {
                                system("CLS");
                                cout << endl << " Enter the number of doctors, information about what you want to add > ";
                                unsigned int NumberOfDoctors;
                                cin >> NumberOfDoctors;
                                while (cin.fail() || NumberOfDoctors < 1)
                                {
                                    cout << endl << " Entered incorrect value. Number of doctors cant be less than 1 or a symbol! " << endl;
                                    cin.clear();
                                    cin.sync();
                                    cout << " Enter the number of doctors, information about what you want to add > ";
                                    cin >> NumberOfDoctors;
                                }
                                Doctor *arr = new Doctor[NumberOfDoctors];
                                Doctor doctor;
                                for (int i = 0; i < NumberOfDoctors; i++)
                                {
                                    enterDoc(&doctor, i); // ввод докторов
                                    addToFileDoc(doctor); // запись в файл
                                }
                                sort(doctor); // функция сортировки
                                showDataDoc(); // вывод данных о докторах на экран
                                cout << endl << " Data are successfully added to the file! " << endl;
                                delete[] arr;
                                cout << " "; system("PAUSE");
                                break;
                      }
                               .
                               .
                               .
                               .
 
 
 
void sortDoc(Doctor doctor)
{
    int size;
    ifstream file;
    file.open("doctors.dat", ios::binary | ios::app);
    if (!file) cout << endl << " File can't be opened! " << endl;
    else
    {
        file.seekg(0, ios::end);
        size = file.tellg();
        size = size / sizeof(Doctor);
        file.seekg(0, ios::beg);
        Doctor *doctors = new Doctor[size];
        file.read((char*)doctors, sizeof(Doctor)*size);
        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (doctor[j + 1].surnameDoctor < doctor[j].surnameDoctor)
                {
                    Doctor temp.surnameDoctor = doctor[j + 1].surnameDoctor;
                    doctor[j + 1].surnameDoctor = doctor[j].surnameDoctor;
                    doctor[j].surnameDoctor = temp.surnameDoctor;
                }
            }
        }
        file.close();
    }
}
0
-ДоМоВоЙ-
149 / 148 / 124
Регистрация: 19.01.2016
Сообщений: 578
Записей в блоге: 1
Завершенные тесты: 1
01.05.2016, 17:58 8
Ascendary, Я указал вам на ошибку в предыдущем ответе... Ошибка в имине переменной

Добавлено через 4 минуты
Ascendary, а где основная функция?

Добавлено через 1 минуту
Цитата Сообщение от Ascendary Посмотреть сообщение
Doctor *arr = new Doctor[NumberOfDoctors];
Doctor doctor;
Это что такое?
0
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
01.05.2016, 18:05  [ТС] 9
Цитата Сообщение от -ДоМоВоЙ- Посмотреть сообщение
Это что такое?
Объявление динамического массива.
0
-ДоМоВоЙ-
149 / 148 / 124
Регистрация: 19.01.2016
Сообщений: 578
Записей в блоге: 1
Завершенные тесты: 1
01.05.2016, 18:11 10
Ascendary, Это я понял...
Цитата Сообщение от Ascendary Посмотреть сообщение
Doctor *arr = new Doctor[NumberOfDoctors];
Где вот это используется? И для чего выделение памяти???
0
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
01.05.2016, 18:12  [ТС] 11
У меня ещё есть много функций, для добавления, удаления, изменения и тд, код слишком большой, поэтому не хочу скидывать.
0
-ДоМоВоЙ-
149 / 148 / 124
Регистрация: 19.01.2016
Сообщений: 578
Записей в блоге: 1
Завершенные тесты: 1
01.05.2016, 18:14 12
Цитата Сообщение от Ascendary Посмотреть сообщение
У меня ещё есть много функций, для добавления, удаления, изменения и тд, код слишком большой, поэтому не хочу скидывать.
Ну тогда хорошо... Я надеюсь где-то значит нужно... Проблема с сортировкой решена, я так и не понял?
1
Ascendary
0 / 0 / 1
Регистрация: 28.02.2016
Сообщений: 74
01.05.2016, 18:16  [ТС] 13
-ДоМоВоЙ-, да, спасибо ))
0
obivan
Падаван С++
435 / 251 / 86
Регистрация: 11.11.2014
Сообщений: 891
Завершенные тесты: 2
01.05.2016, 18:58 14
Ascendary, если вам нужно по произвольному полю рекомендую создать классы компортары
0
01.05.2016, 18:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2016, 18:58

Сортировка массива структур по заданному полю
Задание под вариантом такое : Упорядочить список студентов по предмету физика, и вывести весь...

Сортировка массива структур по заданному полю
Здравствуйте. Нужна помощь в сортировке. Вот само задание: Составить таблицу, содержащую...

Реализовать функцию поиска по заданному полю в массиве структур "Info", содержащих информацию о жителях города
1) Фамилия+имя / разделенные пробелами на одной строчке 2) Город; 3) Адрес...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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