0 / 0 / 0
Регистрация: 12.06.2021
Сообщений: 27
1

Сортировка структуры по полю из файла

16.10.2021, 15:57. Показов 333. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Моя программа должна сортировать структуру по третьему полю 4 видами сортировки(вставками, выбором, обменом, гномья), однако в файлах с отсортированным массивом структур появляются какие-то рандомные огромные числа, входной файл(massivez.txt) и файлы вывода, которые у меня получились после работы программы(1-4.txt), прилагаю. Помогите, пожалуйста. Насколько я понимаю, проблема происходит в момент считывания структуры из файла в массив.
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include <iostream>
#include <vector>
#include <random>
#include <fstream>
#include <ctime>
#include <iomanip>
 
using namespace std;
struct ORDER
{
    int ad;
    int ad2;
    int sum;
};
 
 
int counter, counter1, counter2, counter3;
double duration, duration1, duration2, duration3;
void Vst1(ORDER* s, int n) {
    cout << "Элементов: " << n << "\n";
    const clock_t start = clock();
    counter = 0;
    for (int i = 1; i < n; i++) {
        for (int j = i; j > 0 && s[j - 1].sum > s[j].sum; j--) {
            counter++;
            int tmp = s[j - 1].sum;
            s[j - 1].sum = s[j].sum;
            s[j].sum = tmp;
        }
    }
    duration = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
    cout << "\nСортировка простыми вставками\nВремя: " << duration;
    cout << "\nПерестановок: " << counter << endl;
}
void Obm1(ORDER* s, int n) {
    const clock_t start = clock();
    counter1 = 0;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = (n - 1); j > i; j--)
        {
            if (s[j - 1].sum > s[j].sum)
            {
                counter1++;
                int temp = s[j - 1].sum;
                s[j - 1].sum = s[j].sum;
                s[j].sum = temp;
            }
        }
    }
    duration1 = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
    cout << "\nСортировка простым обменом\nВремя: " << duration1;
    cout << "\nПерестановок: " << counter1 << endl;
}
void Vib1(ORDER* s, int n) {
    const clock_t start = clock();
    counter2 = 0;
    for (int i = 0; i < n - 1; ++i)
    {
        int small = i;
        for (int current = i + 1; current < n; ++current)
        {
            if (s[current].sum < s[small].sum) {
                counter2++;
                small = current;
            }
        }
        swap(s[i].sum, s[small].sum);
    }
    duration2 = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
    cout << "\nСортировка простым выбором\nВремя: " << duration2;
    cout << "\nПерестановок: " << counter2 << endl;
}
void Gno1(ORDER* s, int n) {
    const clock_t start = clock();
    int i = 1;
    int j = 2;
    counter3 = 0;
    while (i < n)
    {
        if (s[i - 1].sum <= s[i].sum) { i = j; counter3++; j++; }
        else
        {
            counter3++;
            int t = s[i].sum;
            s[i].sum = s[i - 1].sum; s[i - 1].sum = t;
            i--;
            if (i == 0) { i = j; counter3++; j++; }
        }
    }
    duration3 = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
    cout << "\nГномья сортировка\nВремя: " << duration3;
    cout << "\nПерестановок: " << counter3 << endl;
}
 
int main() {
    setlocale(LC_ALL, "rus");
    int n,com;
    cout << "Количество элементов массива: ";
    cin >> n;
    vector <int> array;
    again:
    cout << "1. Записи\n2. Числовой массив\n";
    cin >> com;
    if (com == 1) {
        if (n > 25) { cout << "Максимальное количество записей - 25"; goto again; }
        ORDER* base = new ORDER[n];
        ifstream in11("massivez.txt");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < 3; j++) {
                if (j == 0) {
                    in11 >> base[j].ad;
                }
                if (j == 1) {
                    in11 >> base[j].ad2;
                }
                if (j == 2) {
                    in11 >> base[j].sum;
                }
            }
        }
        in11.close();
        Vst1(base, n);
        ofstream out1("1.txt");
        for (int i = 0; i < n; i++)
            out1 << base[i].ad << " "<< base[i].ad2 << " " << base[i].sum << " \n";
        out1 << "\n";
        out1.close();
        array.clear();
        ifstream in1("massivez.txt");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < 3; j++) {
                if (j == 0) {
                    in1 >> base[j].ad;
                }
                if (j == 1) {
                    in1 >> base[j].ad2;
                }
                if (j == 2) {
                    in1 >> base[j].sum;
                }
            }
        }
        in1.close();
        Obm1(base, n);
        ofstream out3("2.txt");
        for (int i = 0; i < n; i++)
            out3 << base[i].ad << " " << base[i].ad2 << " " << base[i].sum << " \n";
        out3 << "\n";
        out3.close();
        array.clear();
        ifstream in2("massivez.txt");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < 3; j++) {
                if (j == 0) {
                    in2 >> base[j].ad;
                }
                if (j == 1) {
                    in2 >> base[j].ad2;
                }
                if (j == 2) {
                    in2 >> base[j].sum;
                }
            }
        }
        in2.close();
        Vib1(base, n);
        ofstream out4("3.txt");
        for (int i = 0; i < n; i++)
            out4 << base[i].ad << " " << base[i].ad2 << " " << base[i].sum << " \n";
        out4 << "\n";
        out4.close();
        array.clear();
        ifstream in3("massivez.txt");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < 3; j++) {
                if (j == 0) {
                    in3 >> base[j].ad;
                }
                if (j == 1) {
                    in3 >> base[j].ad2;
                }
                if (j == 2) {
                    in3 >> base[j].sum;
                }
            }
        }
        in3.close();
        Gno1(base, n);
        ofstream out5("4.txt");
        for (int i = 0; i < n; i++)
            out5 << base[i].ad << " " << base[i].ad2 << " " << base[i].sum << " \n";
        out5 << "\n";
        out5.close();
        ofstream outs("stats.txt");
        outs << "Количество элементов: " << n << "\nНазвание: Вставками\nВремя: " << duration << "\nПерестановок: " << counter << "\nНазвание: Обменом\nВремя: " << duration1 << "\nПерестановок: " << counter1 << "\nНазвание: Выбором\nВремя: " << duration2 << "\nПерестановок: " << counter2 << "\nНазвание: Гномья\nВремя: " << duration3 << "\nПерестановок: " << counter3 << endl;
        outs << "\n";
        outs.close();
        return 0;
}
Вложения
Тип файла: txt massivez.txt (329 байт, 0 просмотров)
Тип файла: txt 1.txt (332 байт, 0 просмотров)
Тип файла: txt 2.txt (327 байт, 0 просмотров)
Тип файла: txt 3.txt (322 байт, 0 просмотров)
Тип файла: txt 4.txt (317 байт, 0 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2021, 15:57
Ответы с готовыми решениями:

Сортировка структуры по полю Tag и по полю Eng
Есть структура: struct _1C { string Tag; string Rus; string Eng; _1C(const string &amp;Tag,...

Сортировка по полю структуры
Всем привет,есть следующие задание заполнить информацию о студентах группы,а потом отсортировать по...

Сортировка по полю структуры
Задание звучит так - отсортировать и вывести на экран группы студентов по убыванию среднего балла...

Сортировка структуры по полю
Здравствуйте, пытаюсь реализовать алгоритм k-средних по этому математическому описанию Проблема...

0
16.10.2021, 15:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2021, 15:57
Помогаю со студенческими работами здесь

Сортировка структуры по полю
Есть структура типа СТУДЕНТ с полями: *фио *группа *массив из пяти чисел (оценки) Необходимо...

Сортировка пузырьком по полю структуры
Проверьте весь код и главная проблема печатает одни нули #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt;...

Сортировка по заданному полю структуры
Вот моя программа... не могу понять почему не работает сортировка по дате... #include&lt;locale.h&gt;...

Сортировка по структуры по полю ФИО
О ГУРУ программирования! Помогите мне решить задачу. Нужно отсортировать структуру по полю FIO. Но...

Сортировка по полю структуры в массиве указателей на структуры
Добрый день: У меня выдается ошибка error C2664: 'int (Movie &amp;,Movie &amp;,SortParam)': cannot...

Сортировка структуры по полю
Здравствуйте, пишу программу по структурам, нужно отсортировать структуру по одному полю(winrate),...

Сортировка по структуры по полю ФИО
О ГУРУ программирования! Помогите мне решить задачу. Нужно отсортировать структуру по полю FIO. Но...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru