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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
#1

Упорядочить элементы структуры - C++

02.12.2013, 22:01. Просмотров 1265. Ответов 33
Метки нет (Все метки)

Необходимо составить структуру, сделать сортировку по признаку, по убыванию или возрастанию...
Вот код:
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct Man
{
    string fio;
    int date;
    double stat,weight;
    char gen;
};
 
void Init(Man *people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i].fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i].date;
        cout <<"Введите рост человека: ";
        cin >>people[i].stat;
        cout <<"Введите вес человека: ";
        cin >>people[i].weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i].gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
 
void Print(Man *people,int n)
{
    fstream file;
    file.open("people.txt",ios::app);
    if (file)
    {   
        for (int i=0;i<n;i++)
        {
            file <<"\n"<<"ФИО человека      : "<<people[i].fio<<"\n";
            file <<"Год рождения      : "<<people[i].date<<"\n";
            file <<"Рост              : "<<people[i].stat<<"\n";
            file <<"Вес               : "<<people[i].weight<<"\n";
            file <<"Пол               : "<<people[i].gen<<"\n";
        }
                
    }
    else cout <<"Файл не может быть открыт или создан!";
    file.close();
}
 
void Display(Man *people, int n)
{
    for(int i=0;i<n;i++)
        {
            cout <<"\nФИО человека      : "<<people[i].fio<<"\n";
            cout <<"Год рождения      : "<<people[i].date<<"\n";
            cout <<"Рост              : "<<people[i].stat<<"\n";
            cout <<"Вес               : "<<people[i].weight<<"\n";
            cout <<"Пол               : "<<people[i].gen<<"\n";
        }
}
 
Man* Sort(Man *people, int n, int z, int priz)
{
    int k;
    Man buff;
    if (z==0)
        switch (priz)
    {
    case (0):{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k].weight > people[j].weight)
                k=j;
        }
        buff.fio=people[i].fio;
        buff.date=people[i].date;
        buff.stat=people[i].stat;
        buff.weight=people[i].weight;
        buff.gen=people[i].gen;
        people[i].fio=people[k].fio;
        people[i].date=people[k].date;
        people[i].stat=people[k].stat;
        people[i].weight=people[k].weight;
        people[i].gen=people[k].gen;
        people[k].fio=buff.fio;
        people[k].date=buff.date;
        people[k].stat=buff.stat;
        people[k].weight=buff.weight;
        people[k].gen=buff.gen;
    }
             }break;
    case (1):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].stat > people[j].stat)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }
             }break;
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].date < people[j].date)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }            
             }break;
    }
    if (z==1)
        switch (priz)
        {
    case (0):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].weight < people[j].weight)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }
             }break;
    case (1):{
      for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].stat < people[j].stat)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }
             }break;
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].date > people[j].date)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }            
             }break;
    }
return people;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n,poss,poss1,i;
    cout <<"Введите количество человек: ";
    cin >>n;
    Man* people = new Man[n];
    Man tmp;
    Init(people,n);
    lab:system("cls");
    cout <<"\nВыберите:";
    cout <<"\n0---------->Вывод на экран";
    cout <<"\n1---------->Вывод в файл";
    cout <<"\n2---------->Сортировка";
    cout <<"\n3---------->Выход!";
    cout <<"\n---->";cin >>poss;
    switch (poss)
    {
    case (0):
        Display(people,n);
        system("pause");
        break;
    case (1):
        Print(people,n);
        break;
    case (2):{
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По возростанию";
        cout <<"\n1---------->По убыванию";
        cout <<"\n---->";cin >>poss;
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По Возрасту";
        cout <<"\n1---------->По Росту";
        cout <<"\n2---------->По Весу";
        cout <<"\n---->";cin >>poss1;
        people=Sort(people,n,poss,poss1);
        break;
             }
    case (3):
        exit(0);
        system("pause");
        break;
    }
    goto lab;
    return 0;
}
Сортирует правильно только лишь по росту... хотя алгоритм везде одинаковый...Помогите кто может пожалуйста.

Добавлено через 12 минут
Вот куча ошибок при компиляции в Release:
Код
1>------ Построение начато: проект: Lab_rab11, Конфигурация: Release Win32 ------
1>Построение начато 02.12.2013 22:37:10.
1>InitializeBuildStatus:
1>  Обращение к "Release\Lab_rab11.unsuccessfulbuild".
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  Lab_rab11.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(57): error C2011: vc_attributes::YesNoMaybe: переопределение типа "enum"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(57): см. объявление "vc_attributes::YesNoMaybe"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(67): error C2011: vc_attributes::AccessType: переопределение типа "enum"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(67): см. объявление "vc_attributes::AccessType"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(81): error C2011: vc_attributes::Pre: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(81): см. объявление "vc_attributes::Pre"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(78): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(112): error C2011: vc_attributes::Post: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(112): см. объявление "vc_attributes::Post"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(109): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(143): error C2011: vc_attributes::FormatString: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(143): см. объявление "vc_attributes::FormatString"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(155): error C2011: vc_attributes::InvalidCheck: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(155): см. объявление "vc_attributes::InvalidCheck"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(152): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(165): error C2011: vc_attributes::Success: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(165): см. объявление "vc_attributes::Success"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(176): error C2011: vc_attributes::PreBound: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(176): см. объявление "vc_attributes::PreBound"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(173): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(186): error C2011: vc_attributes::PostBound: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(186): см. объявление "vc_attributes::PostBound"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(183): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(196): error C2011: vc_attributes::PreRange: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(196): см. объявление "vc_attributes::PreRange"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(193): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(208): error C2011: vc_attributes::PostRange: переопределение типа "struct"
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(208): см. объявление "vc_attributes::PostRange"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(205): error C3094: repeatable: анонимное использование не допускается
1>          predefined C++ attributes (compiler internal)(147): см. объявление "repeatable"
1>          атрибут может быть применен только к: 'class', 'struct'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(245): error C2370: SA_Yes: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(245): см. объявление "SA_Yes"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(246): error C2370: SA_No: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(246): см. объявление "SA_No"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(247): error C2370: SA_Maybe: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(247): см. объявление "SA_Maybe"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(250): error C2370: SA_NoAccess: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(250): см. объявление "SA_NoAccess"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(251): error C2370: SA_Read: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(251): см. объявление "SA_Read"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(252): error C2370: SA_Write: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(252): см. объявление "SA_Write"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(253): error C2370: SA_ReadWrite: переопределение; другой класс хранения
1>          c:\program files\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(253): см. объявление "SA_ReadWrite"
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.53
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 =========
Помогите разобраться кто нибудь..Пожалуйста

Добавлено через 1 минуту
При этом в Debug компилируется... Но с уже названной проблемой

Добавлено через 1 час 20 минут
Неужели никто даже предположение высказать не может)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 22:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Упорядочить элементы структуры (C++):

Упорядочить записи структуры по фамилии - C++
Помогите сделать пожалуйста. Дана структура. Нужно сделать упорядочивание по фамилии . Заранее, спасибо. #include &lt;iostream&gt; #include...

Упорядочить номера маршрутов по возрастанию (структуры) - C++
Помогите пожалуйста как упорядочить номера маршрутов по возрастанию?? #include &lt;iostream&gt; #include &lt;string.h&gt; #include...

Упорядочить элементы массива в порядке возрастания, все элементы больше нуля увеличить в 3 раза - C++
Помогите пожалуйста Нужна прога: Есть массив X(n). Упорядочить его элементы в порядке возрастания, все элементы больше нуля...

Упорядочить элементы массива, располагая в первой его половине элементы, стоявшие на четных позициях - C++
Есть массив: int main() { setlocale(LC_ALL,&quot;RUSSIAN&quot;); int array; int i, n, k, min, sumabs = 0, minabs = 0; ...

В одномерном массиве все отрицательные элементы заменить нулями и упорядочить элементы массива по убыванию - C++
В одновимірному масиві всі від’ємні елементи замінити нулями і впорядкувати елементи масиву за спаданням.

Найти минимальный и максимальный элементы массива и упорядочить элементы по убыванию, стоящие между ними, методом «пузырька». - C++
Привет ВСЕМ!!! Обратите вниминие на эту задачку, ПЛЗ!!! =) Можно и без метода &quot; пузырька&quot;!!! Дан массив А(40). Найти минимальный и...

33
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
02.12.2013, 23:47 #16
Вот так будет гораздо элегантней:
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
Man** Sort(Man **people, int n, int z, int priz)
{
    int k;
    Man* buff;   
    switch (priz) //по умолчанию
    {
    case (0):
{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k]->weight > people[j]->weight)
                k=j;
        }
        buff=people[i];        
        people[i]=people[k];        
        people[k]=buff;
      
    }
break;
}
     case (1):
{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->stat > people[j]->stat)
                    k=j;
            }
        buff=people[i];        
            people[i]=people[k];        
            people[k]=buff;            
        }
        break;
}
    case (2):
{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->date < people[j]->date)
                    k=j;
            }
            buff=people[i];        
            people[i]=people[k];        
            people[k]=buff;     
            
        }            
      break;      
}
if (z==1)
{
   Man **pep2=new Man*[n];
   for(int i=0;i<n;i++) pep2[i]=people[n-i-1];
  delete []people;
  people=pep2;
}
return people;
}
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
02.12.2013, 23:54  [ТС] #17
Цитата Сообщение от Algoritmer Посмотреть сообщение
Вот так будет гораздо элегантней:
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
Man** Sort(Man **people, int n, int z, int priz)
{
    int k;
    Man* buff;   
    switch (priz) //по умолчанию
    {
    case (0):
{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k]->weight > people[j]->weight)
                k=j;
        }
        buff=people[i];        
        people[i]=people[k];        
        people[k]=buff;
      
    }
break;
}
     case (1):
{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->stat > people[j]->stat)
                    k=j;
            }
        buff=people[i];        
            people[i]=people[k];        
            people[k]=buff;            
        }
        break;
}
    case (2):
{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->date < people[j]->date)
                    k=j;
            }
            buff=people[i];        
            people[i]=people[k];        
            people[k]=buff;     
            
        }            
      break;      
}
if (z==1)
{
   Man **pep2=new Man*[n];
   for(int i=0;i<n;i++) pep2[i]=people[n-i-1];
  delete []people;
  people=pep2;
}
return people;
}
Малость не допонял строки 59 и тд, и возвращаемое значение Man* а **people не даст ли это ошибку?
0
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
03.12.2013, 00:06 #18
Но тогда придется скоректировать всё остальное
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
void Init(Man **people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
        people[i]=new Man; 
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i]->fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i]->date;
        cout <<"Введите рост человека: ";
        cin >>people[i]->stat;
        cout <<"Введите вес человека: ";
        cin >>people[i]->weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i]->gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
Во всех остальных местах просто при обращении к полям структуры меняем точки на стрелочки
Ну и конечно же изменения в ф-ции main()
C++
1
2
 Man** people = new Man*[n];
    Man* tmp;
Добавлено через 1 минуту
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Малость не допонял строки 59 и тд, и возвращаемое значение Man* а **people не даст ли это ошибку?
даст. Читайте последнее сообщение

Добавлено через 9 минут
Не сразу понял вопрос ... Если речь идет о строке 59 в моем коде
C++
1
Man **pep2=new Man*[n];
, то ошибки никакой не будет. Ведь мы объявляем указатель на массив уазателей и создаем его
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
03.12.2013, 10:53  [ТС] #19
Спасибо буду пробовать) Только завтра... На сегодня хватит так и голову сломать можно)...
Вопрос про компиляцию в Release закрыт, так как перенес в новый проект и скомпилировалось собако... А вот сортировка (кстати при количестве элементов из 3х шт, сортировка работает по всем полям и по убыванию и по возрастанию) так и не работает (работает только по полю stat) в чем проблема остаётся для меня загадкой)
Все заранее спасибо за Помощь!)

Добавлено через 9 часов 23 минуты
_up

Добавлено через 1 час 14 минут
Итак вот опробованы код:
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct Man
{
    string fio;
    int date;
    double stat,weight;
    char gen;
};
 
void Init(Man **people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i]->fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i]->date;
        cout <<"Введите рост человека: ";
        cin >>people[i]->stat;
        cout <<"Введите вес человека: ";
        cin >>people[i]->weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i]->gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
 
void Print(Man **people,int n)
{
    fstream file;
    file.open("people.txt",ios::app);
    if (file)
    {   
        for (int i=0;i<n;i++)
        {
            file <<"\n"<<"ФИО человека      : "<<people[i]->fio<<"\n";
            file <<"Год рождения      : "<<people[i]->date<<"\n";
            file <<"Рост              : "<<people[i]->stat<<"\n";
            file <<"Вес               : "<<people[i]->weight<<"\n";
            file <<"Пол               : "<<people[i]->gen<<"\n";
        }
                
    }
    else cout <<"Файл не может быть открыт или создан!";
    file.close();
}
 
void Display(Man **people, int n)
{
    for(int i=0;i<n;i++)
        {
            cout <<"\nФИО человека      : "<<people[i]->fio<<"\n";
            cout <<"Год рождения      : "<<people[i]->date<<"\n";
            cout <<"Рост              : "<<people[i]->stat<<"\n";
            cout <<"Вес               : "<<people[i]->weight<<"\n";
            cout <<"Пол               : "<<people[i]->gen<<"\n";
        }
}
 
void Sort(Man **people, int n, int z, int priz)
{
    int k;
    Man* buff;
    switch (priz)
    {
    case (0):{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k]->weight > people[j]->weight)
                k=j;
        }
        buff=people[i];
        people[i]=people[k];
        people[k]=buff;
    }
             break;}
    case (1):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->stat > people[j]->stat)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }
             break;}
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->date < people[j]->date)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }            
             break;}
    }
    if (z==1)
    {
        Man** pep2=new Man*[n];
        for (int i=0;i<n;i++)
            pep2[i]=people[n-i-1];
        delete []people;
        people=pep2;
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n,poss,poss1,i;
    cout <<"Введите количество человек: ";
    cin >>n;
    Man** people = new Man*[n];
    Man* tmp;
    Init(people,n);
    lab:system("cls");
    cout <<"\nВыберите:";
    cout <<"\n0---------->Вывод на экран";
    cout <<"\n1---------->Вывод в файл";
    cout <<"\n2---------->Сортировка";
    cout <<"\n3---------->Выход!";
    cout <<"\n---->";cin >>poss;
    switch (poss)
    {
    case (0):
        Display(people,n);
        system("pause");
        break;
    case (1):
        Print(people,n);
        break;
    case (2):{
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По возростанию";
        cout <<"\n1---------->По убыванию";
        cout <<"\n---->";cin >>poss;
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По Возрасту";
        cout <<"\n1---------->По Росту";
        cout <<"\n2---------->По Весу";
        cout <<"\n---->";cin >>poss1;
        Sort(people,n,poss,poss1);
        break;
             }
    case (3):
        exit(0);
        system("pause");
        break;
    }
    goto lab;
    return 0;
}
Стало элегантней согласен) Но вот только где -то тут есть косяк работы с указателями...
Компилятор дает ошибку сражу же на этой строке:
C++
1
people[i]->fio=Mas_Char;
Ошибка1:
Необработанное исключение в "0x00067246" в "Lab_Rab11_01.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde5".
указывает сюда:
_Elem *_Myptr()
{ // determine current pointer to buffer for mutable string
return (this->_BUF_SIZE <= this->_Myres ? this->_Bx._Ptr
: this->_Bx._Buf);
}
из библиотеки xstring
С этими ошибками было бы тоже хорошо разобраться...

Добавлено через 2 минуты
Законспектировал ввод ФИО думал там ошибка типов или что нить в этом роде:
Легче не стало :
Необработанное исключение в "0x55132258 (msvcp100d.dll)" в "Lab_Rab11_01.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcdcded".
0
newbie666
Заблокирован
03.12.2013, 10:58 #20
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde5".
эта ошибка говорит об обращение к не инициализированным данным, скорее всего у тебя указатель в лажу какую то указывает )))
1
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
03.12.2013, 11:11  [ТС] #21
Цитата Сообщение от newbie666 Посмотреть сообщение
эта ошибка говорит об обращение к не инициализированным данным, скорее всего у тебя указатель в лажу какую то указывает )))
Спасибо) Ну а где именно?) Там ошибка в самом начале должна быть, я вот только некрена не вижу...
С вашим кодом посидел немного разобрался, согласен работать так намного удобней) Буду разбираться. И вот вопрос по первым моим вопросам у вас случайно идей не появилось)? Ведь там по алгоритму все верно, по полю stat программа все ровно сортируе, а вот по другим полям непонятка... Хотя все один в один, в чем может быть дело???)
0
newbie666
Заблокирован
03.12.2013, 11:14 #22
эээх ладно ща компильну твой код
1
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
03.12.2013, 11:19  [ТС] #23
C++
1
Man** people = new Man*[n];
вот инициализация памяти, я же правильно понимаю?
C++
1
Init(people,n);
за ним идет вызов функции, все же вроде верно...

Добавлено через 3 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
эээх ладно ща компильну твой код
Вы вот этот код скомпилируйте пожалуйста)
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct Man
{
    string fio;
    int date;
    double stat,weight;
    char gen;
};
 
void Init(Man *people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i].fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i].date;
        cout <<"Введите рост человека: ";
        cin >>people[i].stat;
        cout <<"Введите вес человека: ";
        cin >>people[i].weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i].gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
 
void Print(Man *people,int n)
{
    fstream file;
    file.open("people.txt",ios::app);
    if (file)
    {   
        for (int i=0;i<n;i++)
        {
            file <<"\n"<<"ФИО человека      : "<<people[i].fio<<"\n";
            file <<"Год рождения      : "<<people[i].date<<"\n";
            file <<"Рост              : "<<people[i].stat<<"\n";
            file <<"Вес               : "<<people[i].weight<<"\n";
            file <<"Пол               : "<<people[i].gen<<"\n";
        }
                
    }
    else cout <<"Файл не может быть открыт или создан!";
    file.close();
}
 
void Display(Man *people, int n)
{
    for(int i=0;i<n;i++)
        {
            cout <<"\nФИО человека      : "<<people[i].fio<<"\n";
            cout <<"Год рождения      : "<<people[i].date<<"\n";
            cout <<"Рост              : "<<people[i].stat<<"\n";
            cout <<"Вес               : "<<people[i].weight<<"\n";
            cout <<"Пол               : "<<people[i].gen<<"\n";
        }
}
 
void Sort(Man *people, int n, int z, int priz)
{
    int k;
    Man buff;
    if (z==0)
    {
        switch (priz)
    {
    case (0):{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k].weight > people[j].weight)
                k=j;
        }
        buff.fio=people[i].fio;
        buff.date=people[i].date;
        buff.stat=people[i].stat;
        buff.weight=people[i].weight;
        buff.gen=people[i].gen;
        people[i].fio=people[k].fio;
        people[i].date=people[k].date;
        people[i].stat=people[k].stat;
        people[i].weight=people[k].weight;
        people[i].gen=people[k].gen;
        people[k].fio=buff.fio;
        people[k].date=buff.date;
        people[k].stat=buff.stat;
        people[k].weight=buff.weight;
        people[k].gen=buff.gen;
    }
             break;}
    case (1):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].stat > people[j].stat)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }
             break;}
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].date < people[j].date)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }            
             break;}
    }
    }
    if (z==1)
    {
        switch (priz)
        {
    case (0):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].weight < people[j].weight)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }
             break;}
    case (1):{
      for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].stat < people[j].stat)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }
             break;}
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k].date > people[j].date)
                    k=j;
            }
            buff.fio=people[i].fio;
            buff.date=people[i].date;
            buff.stat=people[i].stat;
            buff.weight=people[i].weight;
            buff.gen=people[i].gen;
            people[i].fio=people[k].fio;
            people[i].date=people[k].date;
            people[i].stat=people[k].stat;
            people[i].weight=people[k].weight;
            people[i].gen=people[k].gen;
            people[k].fio=buff.fio;
            people[k].date=buff.date;
            people[k].stat=buff.stat;
            people[k].weight=buff.weight;
            people[k].gen=buff.gen;
        }            
             break;}
    }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n,poss,poss1,i;
    cout <<"Введите количество человек: ";
    cin >>n;
    Man* people = new Man[n];
    Man tmp;
    Init(people,n);
    lab:system("cls");
    cout <<"\nВыберите:";
    cout <<"\n0---------->Вывод на экран";
    cout <<"\n1---------->Вывод в файл";
    cout <<"\n2---------->Сортировка";
    cout <<"\n3---------->Выход!";
    cout <<"\n---->";cin >>poss;
    switch (poss)
    {
    case (0):
        Display(people,n);
        system("pause");
        break;
    case (1):
        Print(people,n);
        break;
    case (2):{
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По возростанию";
        cout <<"\n1---------->По убыванию";
        cout <<"\n---->";cin >>poss;
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По Возрасту";
        cout <<"\n1---------->По Росту";
        cout <<"\n2---------->По Весу";
        cout <<"\n---->";cin >>poss1;
        Sort(people,n,poss,poss1);
        break;
             }
    case (3):
        exit(0);
        system("pause");
        break;
    }
    goto lab;
    return 0;
}
это мой)
А этот мне здесь подсказали он тоже ниче так) только вот с памятью проблемы:
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct Man
{
    string fio;
    int date;
    double stat,weight;
    char gen;
};
 
void Init(Man **people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i]->fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i]->date;
        cout <<"Введите рост человека: ";
        cin >>people[i]->stat;
        cout <<"Введите вес человека: ";
        cin >>people[i]->weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i]->gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
 
void Print(Man **people,int n)
{
    fstream file;
    file.open("people.txt",ios::app);
    if (file)
    {   
        for (int i=0;i<n;i++)
        {
            file <<"\n"<<"ФИО человека      : "<<people[i]->fio<<"\n";
            file <<"Год рождения      : "<<people[i]->date<<"\n";
            file <<"Рост              : "<<people[i]->stat<<"\n";
            file <<"Вес               : "<<people[i]->weight<<"\n";
            file <<"Пол               : "<<people[i]->gen<<"\n";
        }
                
    }
    else cout <<"Файл не может быть открыт или создан!";
    file.close();
}
 
void Display(Man **people, int n)
{
    for(int i=0;i<n;i++)
        {
            cout <<"\nФИО человека      : "<<people[i]->fio<<"\n";
            cout <<"Год рождения      : "<<people[i]->date<<"\n";
            cout <<"Рост              : "<<people[i]->stat<<"\n";
            cout <<"Вес               : "<<people[i]->weight<<"\n";
            cout <<"Пол               : "<<people[i]->gen<<"\n";
        }
}
 
void Sort(Man **people, int n, int z, int priz)
{
    int k;
    Man* buff;
    switch (priz)
    {
    case (0):{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k]->weight > people[j]->weight)
                k=j;
        }
        buff=people[i];
        people[i]=people[k];
        people[k]=buff;
    }
             break;}
    case (1):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->stat > people[j]->stat)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }
             break;}
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->date < people[j]->date)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }            
             break;}
    }
    if (z==1)
    {
        Man** pep2=new Man*[n];
        for (int i=0;i<n;i++)
            pep2[i]=people[n-i-1];
        delete []people;
        people=pep2;
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n,poss,poss1,i;
    cout <<"Введите количество человек: ";
    cin >>n;
    Man** people = new Man*[n];
    Man* tmp;
    Init(people,n);
    lab:system("cls");
    cout <<"\nВыберите:";
    cout <<"\n0---------->Вывод на экран";
    cout <<"\n1---------->Вывод в файл";
    cout <<"\n2---------->Сортировка";
    cout <<"\n3---------->Выход!";
    cout <<"\n---->";cin >>poss;
    switch (poss)
    {
    case (0):
        Display(people,n);
        system("pause");
        break;
    case (1):
        Print(people,n);
        break;
    case (2):{
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По возростанию";
        cout <<"\n1---------->По убыванию";
        cout <<"\n---->";cin >>poss;
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По Возрасту";
        cout <<"\n1---------->По Росту";
        cout <<"\n2---------->По Весу";
        cout <<"\n---->";cin >>poss1;
        Sort(people,n,poss,poss1);
        break;
             }
    case (3):
        exit(0);
        system("pause");
        break;
    }
    goto lab;
    return 0;
}
0
newbie666
Заблокирован
03.12.2013, 11:20 #24
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
вот инициализация памяти, я же правильно понимаю?
а ты подумал, что пользователь может ввести не цифру, а букву?

А почему кодировка не выставлена?


Ойоооойоойой какай кашар, всё таки я вернусь к своему уже сказанному посту - выкини это ДЖИ КОД ))))

Если хочешь помощи по этому коду - пиши, что ты вводишь туд конкретно и на какой строчке у тебя исключение вылетает )))
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
03.12.2013, 11:25  [ТС] #25
И если всего три элемента, то сортировка проходит на ура по всем полям) Если больше то только по полю stat

Добавлено через 58 секунд
Цитата Сообщение от newbie666 Посмотреть сообщение
а ты подумал, что пользователь может ввести не цифру, а букву?

А почему кодировка не выставлена?


Ойоооойоойой какай кашар, всё таки я вернусь к своему уже сказанному посту - выкини это ДЖИ КОД ))))

Если хочешь помощи по этому коду - пиши, что ты вводишь туд конкретно и на какой строчке у тебя исключение вылетает )))
SetConsoleOutputCP(1251);
SetConsoleCP(1251)
Разве не кодировка?

Добавлено через 41 секунду
Ок) Сейчас я выложу скрины и все такое)
0
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
03.12.2013, 11:42  [ТС] #26
Цитата Сообщение от newbie666 Посмотреть сообщение
Если хочешь помощи по этому коду - пиши, что ты вводишь туд конкретно и на какой строчке у тебя исключение вылетает )))
В моём коде никаких исключений не вылетает...
А происходит вот что:
Вот я ввожу данные типа Люди
Упорядочить элементы структуры
Вот я вывожу информацию на экран:
Упорядочить элементы структуры
Вот я выбираю сортировку по возрастанию по полю Рост(stat)
Упорядочить элементы структуры
Снова вывожу на экран уже отсортированный массив
Упорядочить элементы структуры
Все нормально упорядочено, все нормально будет и по убыванию и хоть мы 100 элементов введем
А вот что происходит при сортировке по возрастанию по полю вес(weight)и возрасту(date):
Упорядочить элементы структуры
Алгоритм один и тот-же, поля weight и stat одного типа, в одной структуре из одного массива, почему так???? Я не врубаюсь!!!
0
newbie666
Заблокирован
03.12.2013, 12:45 #27
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
А вот что происходит при сортировке по возрастанию по полю вес(weight)и возрасту(date):
у тебя во всех случаях и при любой сортировке ошибка

Добавлено через 7 минут
Слушай, у меня времени ща нет, я не буду твой код фиксить - сам тогда посмотри, я тебе просто скажу, в чём ошибка:
1. у тебя проблемы в любой сортировке. Любая сортировка проходит успешно, если её провести дважды
2. Проблема в следующем участке кода:
C++
1
2
3
4
5
6
7
8
for(int i=0;i<n-1;i++)
            {
                k=i;
                for(int j=i+1;j<n;j++)
                {
                    if (people[k].stat > people[j].stat)
                        k=j;
                }
у тебя второй цикл пробегает по всем элементам и значение K получается вообще случайным, понимаешь? И только после этого у тебя идёт перестановка элементов. Тебе надо ПРОВЕРИТЬ СОСЕДНИЕ, ПЕРЕСТАВИТ ЕСЛИ НАДО, А ПОТОМ ПРОДОЛЖАТЬ ЦИКЛЫ. Понял?

Добавлено через 53 секунды
и не забудь мне поставить положительнынй отзыв ))))))
1
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
03.12.2013, 16:35 #28
Я кое-что добавил. Теперь работает. Сам заметишь?
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
//#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct Man
{
    string fio;
    int date;
    double stat,weight;
    char gen;
};
 
void Init(Man **people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
         people[i]=new Man;
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i]->fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i]->date;
        cout <<"Введите рост человека: ";
        cin >>people[i]->stat;
        cout <<"Введите вес человека: ";
        cin >>people[i]->weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i]->gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
 
void Print(Man **people,int n)
{
    fstream file;
    file.open("people.txt",ios::app);
    if (file)
    {   
        for (int i=0;i<n;i++)
        {
            file <<"\n"<<"ФИО человека      : "<<people[i]->fio<<"\n";
            file <<"Год рождения      : "<<people[i]->date<<"\n";
            file <<"Рост              : "<<people[i]->stat<<"\n";
            file <<"Вес               : "<<people[i]->weight<<"\n";
            file <<"Пол               : "<<people[i]->gen<<"\n";
        }
                
    }
    else cout <<"Файл не может быть открыт или создан!";
    file.close();
}
 
void Display(Man **people, int n)
{
    for(int i=0;i<n;i++)
        {
            cout <<"\nФИО человека      : "<<people[i]->fio<<"\n";
            cout <<"Год рождения      : "<<people[i]->date<<"\n";
            cout <<"Рост              : "<<people[i]->stat<<"\n";
            cout <<"Вес               : "<<people[i]->weight<<"\n";
            cout <<"Пол               : "<<people[i]->gen<<"\n";
        }
}
 
void Sort(Man **people, int n, int z, int priz)
{
    int k;
    Man* buff;
    switch (priz)
    {
    case (0):{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k]->weight > people[j]->weight)
                k=j;
        }
        buff=people[i];
        people[i]=people[k];
        people[k]=buff;
    }
             break;}
    case (1):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->stat > people[j]->stat)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }
             break;}
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->date < people[j]->date)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }            
             break;}
    }
    if (z==1)
    {
        Man** pep2=new Man*[n];
        for (int i=0;i<n;i++)
            pep2[i]=people[n-i-1];
        delete []people;
        people=pep2;
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    //SetConsoleOutputCP(1251);
   // SetConsoleCP(1251);
    int n,poss,poss1,i;
    cout <<"Введите количество человек: ";
    cin >>n;
    Man** people = new Man*[n];
    Man* tmp;
    Init(people,n);
    lab:system("cls");
    cout <<"\nВыберите:";
    cout <<"\n0---------->Вывод на экран";
    cout <<"\n1---------->Вывод в файл";
    cout <<"\n2---------->Сортировка";
    cout <<"\n3---------->Выход!";
    cout <<"\n---->";cin >>poss;
    switch (poss)
    {
    case (0):
        Display(people,n);
        system("pause");
        break;
    case (1):
        Print(people,n);
        break;
    case (2):{
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По возростанию";
        cout <<"\n1---------->По убыванию";
        cout <<"\n---->";cin >>poss;
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По Возрасту";
        cout <<"\n1---------->По Росту";
        cout <<"\n2---------->По Весу";
        cout <<"\n---->";cin >>poss1;
        Sort(people,n,poss,poss1);
        break;
             }
    case (3):
        exit(0);
        system("pause");
        break;
    }
    goto lab;
    return 0;
}
1
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
03.12.2013, 17:12  [ТС] #29
Цитата Сообщение от newbie666 Посмотреть сообщение
у тебя во всех случаях и при любой сортировке ошибка

Добавлено через 7 минут
Слушай, у меня времени ща нет, я не буду твой код фиксить - сам тогда посмотри, я тебе просто скажу, в чём ошибка:
1. у тебя проблемы в любой сортировке. Любая сортировка проходит успешно, если её провести дважды
2. Проблема в следующем участке кода:
C++
1
2
3
4
5
6
7
8
for(int i=0;i<n-1;i++)
            {
                k=i;
                for(int j=i+1;j<n;j++)
                {
                    if (people[k].stat > people[j].stat)
                        k=j;
                }
у тебя второй цикл пробегает по всем элементам и значение K получается вообще случайным, понимаешь? И только после этого у тебя идёт перестановка элементов. Тебе надо ПРОВЕРИТЬ СОСЕДНИЕ, ПЕРЕСТАВИТ ЕСЛИ НАДО, А ПОТОМ ПРОДОЛЖАТЬ ЦИКЛЫ. Понял?

Добавлено через 53 секунды
и не забудь мне поставить положительнынй отзыв ))))))
Пишу словами:
Начинаем с первого элемента...(внешний цикл)
Сравниваем со всеми еще не проверенными... (внутренний цикл начинается со следующего)
находим минимальный среди непроверенных... (внутренний цикл)
запоминаем текущий...(внешний цикл)
меняем текущий на этот минимальный...(внешний цикл) и его мы трогать уже не будем во внутреннем цикле т.к j=i+1
текущий записываем туда где был минимальный (внешний цикл)
и т.д. пока не проверим все элементы, что в этом алгоритме вам не понятно? это фундаментальный алгоритм и он верен... Таким образом элементы будут упорядочены по возрастанию.
проверьте по шагам над цифрами 4,3,2,1 и вы будете приятно удивлены что алгоритм верен...
Если бы дело было в алгоритме это было бы так просто)!!!
Но все равно Спасибо за попытку помочь, все таки я думаю и без этого есть чем заняться.

Добавлено через 2 минуты
Цитата Сообщение от Algoritmer Посмотреть сообщение
Я кое-что добавил. Теперь работает. Сам заметишь?
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
//#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
struct Man
{
    string fio;
    int date;
    double stat,weight;
    char gen;
};
 
void Init(Man **people,int n)
{
    char gent,Mas_Char[30];
    for (int i=0;i<n;i++)
    {
         people[i]=new Man;
        cin.sync();
        cout <<"\nВведите ФИО: ";
        cin.getline(Mas_Char,30);
        people[i]->fio=Mas_Char;
        cout <<"Введите год рождения: ";
        cin >>people[i]->date;
        cout <<"Введите рост человека: ";
        cin >>people[i]->stat;
        cout <<"Введите вес человека: ";
        cin >>people[i]->weight;
        cout <<"Введите пол человека ""м"" или ""ж"": ";
        label:cin >>gent;
        if ((gent=='м')||(gent=='ж'))
            people[i]->gen=gent;
        else 
        {
            cout <<"Введите ""м"" или ""ж"": ";
            goto label;
        }
    }
}
 
void Print(Man **people,int n)
{
    fstream file;
    file.open("people.txt",ios::app);
    if (file)
    {   
        for (int i=0;i<n;i++)
        {
            file <<"\n"<<"ФИО человека      : "<<people[i]->fio<<"\n";
            file <<"Год рождения      : "<<people[i]->date<<"\n";
            file <<"Рост              : "<<people[i]->stat<<"\n";
            file <<"Вес               : "<<people[i]->weight<<"\n";
            file <<"Пол               : "<<people[i]->gen<<"\n";
        }
                
    }
    else cout <<"Файл не может быть открыт или создан!";
    file.close();
}
 
void Display(Man **people, int n)
{
    for(int i=0;i<n;i++)
        {
            cout <<"\nФИО человека      : "<<people[i]->fio<<"\n";
            cout <<"Год рождения      : "<<people[i]->date<<"\n";
            cout <<"Рост              : "<<people[i]->stat<<"\n";
            cout <<"Вес               : "<<people[i]->weight<<"\n";
            cout <<"Пол               : "<<people[i]->gen<<"\n";
        }
}
 
void Sort(Man **people, int n, int z, int priz)
{
    int k;
    Man* buff;
    switch (priz)
    {
    case (0):{
    for(int i=0;i<n-1;i++)
    {
        k=i;
        for(int j=i+1;j<n;j++)
        {
            if (people[k]->weight > people[j]->weight)
                k=j;
        }
        buff=people[i];
        people[i]=people[k];
        people[k]=buff;
    }
             break;}
    case (1):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->stat > people[j]->stat)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }
             break;}
    case (2):{
        for(int i=0;i<n-1;i++)
        {
            k=i;
            for(int j=i+1;j<n;j++)
            {
                if (people[k]->date < people[j]->date)
                    k=j;
            }
            buff=people[i];
            people[i]=people[k];
            people[k]=buff;
        }            
             break;}
    }
    if (z==1)
    {
        Man** pep2=new Man*[n];
        for (int i=0;i<n;i++)
            pep2[i]=people[n-i-1];
        delete []people;
        people=pep2;
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    //SetConsoleOutputCP(1251);
   // SetConsoleCP(1251);
    int n,poss,poss1,i;
    cout <<"Введите количество человек: ";
    cin >>n;
    Man** people = new Man*[n];
    Man* tmp;
    Init(people,n);
    lab:system("cls");
    cout <<"\nВыберите:";
    cout <<"\n0---------->Вывод на экран";
    cout <<"\n1---------->Вывод в файл";
    cout <<"\n2---------->Сортировка";
    cout <<"\n3---------->Выход!";
    cout <<"\n---->";cin >>poss;
    switch (poss)
    {
    case (0):
        Display(people,n);
        system("pause");
        break;
    case (1):
        Print(people,n);
        break;
    case (2):{
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По возростанию";
        cout <<"\n1---------->По убыванию";
        cout <<"\n---->";cin >>poss;
        cout <<"\nВыберите метод сортировки:";
        cout <<"\n0---------->По Возрасту";
        cout <<"\n1---------->По Росту";
        cout <<"\n2---------->По Весу";
        cout <<"\n---->";cin >>poss1;
        Sort(people,n,poss,poss1);
        break;
             }
    case (3):
        exit(0);
        system("pause");
        break;
    }
    goto lab;
    return 0;
}
Конечно замечу строка 27 инициализация массива только вот я не совсем в это въезжаю, ну в смысле массив указателей на указатели) Попробую Спасибо!

Добавлено через 11 минут
После 3 го четвертого раза сортировки выдает
Необработанное исключение в "0x010e5746" в "Lab_Rab11_01.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfeeeff02".

Добавлено через 1 минуту
И да проблемы остались те-же сортировка проходит по полю stat и не проходит по остальным (хотя все идентично!!!)
0
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
03.12.2013, 17:35 #30
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
Конечно замечу строка 27 инициализация массива
Инициализация не массива, а элемента массива. Мы имеем дело не с массивом элементов, а всего лишь с массивом указателей. Оператор new создает новый объект и помещает указатель на него (а не сам объект) в ячейку нашего массива. Поэтому когда мы пишем people[i]=people[j] мы всего лишь тасуем указатели, но не сами элементы.

По поводу сортировку позже посмотрю. У меня почему-то при компиляции ругнулось на строку
C++
1
#include "stdafx.h"
вот я её и закоментировал.
И у меня не отрабатывает сравнение
C++
1
if ((gent=='м')||(gent=='ж'))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 17:35
Привет! Вот еще темы с ответами:

Упорядочить все элементы матрицы таким образом, чтобы при чтении матрицы по строкам ее элементы образовывали отсортированный по возрастанию массив - C++
Разработать программу, которая вводит целочисленную матрицу из n строк и m столбцов (1&lt;n&lt;=100, 1&lt;m&lt;=50) и Упорядочить все элементы матрицы...

Упорядочить элементы массива - C++
В одномерном массиве из N вещественных элементов, вычислить: 1. Количество элементов массива, равных 0; 2. Сумму элементов массива,...

Упорядочить элементы по неубыванию - C++
Ввести в память машины с клавиатуры одномерный целочисленный массив, размером не менее 10 и не более 50 элементов. Вывести на экран...

Упорядочить элементы матрицы - C++
Дана произвольная матрица n m.упорядочите элементы матрицы так, чтобы элементы каждой строки (слева направо) и каждого столбца (сверху ...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
03.12.2013, 17:35
Ответ Создать тему
Опции темы

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