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

Пузырьковая сортировка - C++

Восстановить пароль Регистрация
 
unskilled
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 6
01.07.2013, 20:16     Пузырьковая сортировка #1
Есть курсовик.
Есть пузырьковая сортировка
Есть одно НО.
Сортировка должна быть сделана через массив указателей, а не через массив структур.
Был бы очень благодарен за помощь.

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
#include <stdio.h>
#include <conio.h>
 
#define max_elem 300 
 
typedef struct{ 
    char name[256]; 
    float distance; 
    int ra; 
}bd; 
    
bd databd[max_elem]; 
int num = 0; 
FILE *prfile; 
FILE *file; 
 
void add_elem() 
{
    if(num>=max_elem)
    {
        printf("baza perepolnena.\n");
        return;
    }
    printf("Nazvanie Rasstoyanie Kol-vo reysov:"); 
    scanf("%s %f %d\n", &databd[num].name, &databd[num].distance, &databd[num].ra);
    num++; 
}
 
void delete_elem() 
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else 
    {
        num--;
        int j = 0;
        for(j = i; j<num; j++) 
            databd[j] = databd[j+1];
        printf("zapis' udalena\n");
    }
}
 
void print_elem() 
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else
    {
        printf("[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
        fprintf(prfile, "[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
    }
}
 
void print_all() 
{   
    int i = 0;
    for(i = 0; i<num; i++)
    {
        printf("[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
        fprintf(prfile, "[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
    }
}
 
void sort_bd() 
{ 
  int i, j;
  for (i = num - 1; i > 0; i--)
  {
    for (j = 0; j < i; j++)
    {
      if (databd[j].distance > databd[j + 1].distance)
      {
        bd tmp = databd[j];
        databd[j] = databd[j+1];
        databd[j+1] = tmp;
      }
    }
  }
  printf("baza otsortirovana\n");
}
                            
void save_bd() 
{
     file = fopen("databd.txt","w"); 
     if(file == NULL)
     {
         printf("nevozmojno zapisat' v fail");
         return;
     }
     fprintf(file, "%d\n", num); 
     int i = 0;
     for(i=0; i<num; i++) 
         fprintf(file, "%s %f %d\n", databd[i].name, databd[i].distance, databd[i].ra);
     fclose(file); 
     printf("baza zapisana\n");
}
 
void load_bd() 
{
     file = fopen("databd.txt","r"); 
     if(file == NULL)
     {
         printf("nevozmojno otkrit' fail");
         return;
     }
     fscanf(file, "%d\n", &num); 
     if(num >= max_elem) num = max_elem-1; 
     int i = 0;
     for(i=0; i<num; i++) 
         fscanf(file, "%s %f %d\n", &databd[i].name, &databd[i].distance, &databd[i].ra);       
     fclose(file);
     printf("baza schitana\n"); 
}
 
void run_menu()
{
    int key = 0;
    while(key != 8){ 
        printf("[1] dobavit' zapis'\n");
        printf("[2] udalit' zapis'\n");
        printf("[3] vivesti zapis'\n");
        printf("[4] vivesti vse zapisi\n");
        printf("[5] sortirovat' bazu\n");
        printf("[6] sohranit' bazu v fail\n");
        printf("[7] zagruzit' bazu iz faila\n");
        printf("[8] vihod\n");
        scanf("%d",&key); 
        switch(key){ 
            case 1:{
                 add_elem();
                 break;
            }
            case 2:{
                 delete_elem();
                 break;
            }
            case 3:{
                 print_elem();
                 break;
            }
            case 4:{
                 print_all();
                 
                 break;
            }
            case 5:{
                 sort_bd();
                 break;
            }
            case 6:{
                 save_bd();
                 break;
            }
            case 7:{
                 load_bd();
                 break;
            }
        }
    }     
}
 
int main() 
{
    prfile = fopen("prn", "w");
    run_menu(); 
    fclose(prfile);
    return 0;
}
Сортировка - sort_bd()

Добавлено через 1 час 10 минут
Могу скинуть почти аналогичный пример с правильно сделанной сортировкой, только когда по аналогии делаю в своем задании, почему-то при сортировке начинает крашиться

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
#include <stdio.h> //библиотека для ввода и вывода
#include <conio.h> // getch(),консольный режим
 
#define max 300
 
struct people
{
    char name[10]; //Фамилия
    int god;      //Год рождения
    int ok;    //Оклад
};
struct people *b[max],baza[max];
int i,k;
FILE * file;
 
// Ввод записи
void vvod()
{
printf("Vvedite nomer zapici:");
scanf("%d", &i);
if (i>max)
    printf("Neverno\n"); else
    {
    printf(" Vvedite Familiyu, god rojdenia, oklad:");
    scanf("%s %d %d", &baza[i].name, &baza[i].god, &baza[i].ok);
 }
 getch();
 }
 
//Вывод необходимой записи
void vivod()
{
printf("Vvedite nomer zapici:\n ");
scanf("%d", &i);
if (i>max) printf("Neverno\n"); else
{
printf("Familia: %s, God Rojdenia: %d, Oklad: %d\n" , baza[i].name,baza[i].god, baza[i].ok );
}
getch();
}
 
//Сортировка
void sort()
{
int j;
struct people *tmp;
for (i = 0; i < max-1; i++)
{
    for (j = i+1; j < max; j++)
    {
    if ((b[j]->ok) < (b[j+1]->ok) )
    {
    tmp=b[j];
    b[j]=b[j+1];
    b[j+1]=tmp;
    } }
}
}
 
 //Запись в файл
void save()
{
file=fopen("file.txt","wt");
fprintf(file,"%d\n",max);
for (i = 0; i<max; i++)
{
fprintf(file, "%s %d %d\n", b[i]->name,b[i]->god,b[i]->ok);
}
fclose(file);
}
 
//Чтение из файла
void read()
{
file=fopen("file.txt","rt");
if (file==NULL) printf("oshibka pri 4tenia faila\n");
else{
fscanf(file,"%d\n",&i);
for (i = 0;!feof(file) && i<max; i++)
{
fscanf(file, "%s %d %d \n", &b[i]->name,&b[i]->god,&b[i]->ok);
}
fclose(file);
}
}
 
// Вывод записей на экран
void vivod_all()
{
for (i = 0; i <max; i++)
{
        printf("\n\nRabotnik nomer %d", i+1);
        printf("\nFamilia: %s", b[i]->name);
        printf("\nGod Rojdenia: %d", b[i]->god);
        printf("\nOklad: %d\n", b[i]->ok);
}
getch();
}
 
void main()
{
    int k;
    for(i=0;i<max;i++)
    b[i]=&baza[i];
 
    while(1)
    {
    //Выбор операции
        printf("1 -Vvod novux dannux\n");
        printf("2 -Vvod odnoi zapici\n");
        printf("3 -Sortirovka\n");
        printf("4 -Vvod dannux na ecran\n");
        printf("5 -Soxranenye v fail\n");
        printf("6 -4tenia iz faila\n");
        printf("7 -Vuxod\n");
        scanf("%d",&k);
        switch(k)
        {
         case '1':vvod(); break;
         case '2':vivod(); break;
         case '3':sort(); break;
         case '4':vivod_all(); break;
         case '5':save(); break;
         case '6':read(); break;
         case '7':exit(1);
         default:printf("Neverno\n");
         }
         }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2013, 20:16     Пузырьковая сортировка
Посмотрите здесь:

пузырьковая сортировка C++
Пузырьковая сортировка C++
Сортировка пузырьковая C++
C++ Пузырьковая сортировка
C++ Пузырьковая сортировка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 20:52     Пузырьковая сортировка #2
Цитата Сообщение от unskilled Посмотреть сообщение
только когда по аналогии делаю в своем задании
Покажите, как по аналогии делаете.
unskilled
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 6
01.07.2013, 20:55  [ТС]     Пузырьковая сортировка #3
На самом деле делаю не совсем я.

Но вот

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
#include <stdio.h>
#include <conio.h>
 
#define max_elem 300 
 
typedef struct{ 
    char name[256]; 
    float distance; 
    int ra; 
}bd; 
    
bd databd[max_elem]; 
int num = 0; 
FILE *prfile; 
FILE *file; 
 
void add_elem() //ГґГіГ*êöèÿ äîáГ*âëåГ*ГЁГї ýëåìåГ*ГІГ* Гў ГЎГ*çó
{
    if(num>=max_elem)
    {
        printf("baza perepolnena.\n");
        return;
    }
    printf("Nazvanie Rasstoyanie Kol-vo reysov:"); 
    scanf("%s %f %d\n", &databd[num].name, &databd[num].distance, &databd[num].ra);
    num++; 
}
 
void delete_elem() //ГґГіГ*êöèÿ ГіГ¤Г*ëåГ*ГЁГї ýëåìåГ*ГІГ* ГЁГ§ ГЎГ*çû
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else 
    {
        num--;
        int j = 0;
        for(j = i; j<num; j++) 
            databd[j] = databd[j+1];
        printf("zapis' udalena\n");
    }
}
 
void print_elem() //ГґГіГ*êöèÿ âûâîäГ* îäГ*îãî ýëåìåГ*ГІГ* ГЁГ§ ГЎГ*çû
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else
    {
        printf("[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
        fprintf(prfile, "[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
    }
}
 
void print_all() //ГґГіГ*êöèÿ âûâîäГ* ГўГ±ГҐГµ ýëåìåГ*òîâ ГЁГ§ ГЎГ*çû
{   
    int i = 0;
    for(i = 0; i<num; i++)
    {
        printf("[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
        fprintf(prfile, "[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
    }
}
 
void sort_bd() //ГґГіГ*êöèÿ ïóçûðüêîâîé ñîðòèðîâêè
{ 
  bd *array[max_elem];
  bd *tmp;
  int i, j;
  for (i = 0; i < num-1; i++)
  {
    for (j = i+1; j < num; j++)
    {
      if ((array[j]->distance) > (array[j + 1]->distance))
      {
        tmp = array[j];
        array[j] = array[j+1];
        array[j+1] = tmp;
      }
    }
  }
  printf("baza otsortirovana\n");
}
                            
void save_bd() //ГґГіГ*êöèÿ ñîõðГ*Г*ГїГҐГІ ГЎГ*çó Гў ГґГ*éë
{
     file = fopen("databd.txt","w"); 
     if(file == NULL)
     {
         printf("nevozmojno zapisat' v fail");
         return;
     }
     fprintf(file, "%d\n", num); 
     int i = 0;
     for(i=0; i<num; i++) 
         fprintf(file, "%s %f %d\n", databd[i].name, databd[i].distance, databd[i].ra);
     fclose(file); 
     printf("baza zapisana\n");
}
 
void load_bd() //ГґГіГ*êöèÿ ñ÷èòûâГ*Г*ГЁГї ГЎГ*çû ГЁГ§ ГґГ*éëГ*
{
     file = fopen("databd.txt","r"); 
     if(file == NULL)
     {
         printf("nevozmojno otkrit' fail");
         return;
     }
     fscanf(file, "%d\n", &num); 
     if(num >= max_elem) num = max_elem-1; 
     int i = 0;
     for(i=0; i<num; i++) 
         fscanf(file, "%s %f %d\n", &databd[i].name, &databd[i].distance, &databd[i].ra);       
     fclose(file);
     printf("baza schitana\n"); 
}
 
void run_menu() //ГґГіГ*öèÿ âûâîäГ* ìåГ*Гѕ Г°Г*áîòû Г± ГЎГ*çîé
{
    int key = 0;
    while(key != 8){ 
        printf("\n[1] dobavit' zapis'\n");
        printf("[2] udalit' zapis'\n");
        printf("[3] vivesti zapis'\n");
        printf("[4] vivesti vse zapisi\n");
        printf("[5] sortirovat' bazu\n");
        printf("[6] sohranit' bazu v fail\n");
        printf("[7] zagruzit' bazu iz faila\n");
        printf("[8] vihod\n\n");
        scanf("%d",&key); 
        switch(key){ 
            case 1:{
                 add_elem();
                 break;
            }
            case 2:{
                 delete_elem();
                 break;
            }
            case 3:{
                 print_elem();
                 break;
            }
            case 4:{
                 print_all();
                 
                 break;
            }
            case 5:{
                 sort_bd();
                 break;
            }
            case 6:{
                 save_bd();
                 break;
            }
            case 7:{
                 load_bd();
                 break;
            }
        }
    }     
}
 
int main() 
{
    prfile = fopen("prn", "w");
    run_menu(); 
    fclose(prfile);
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 21:02     Пузырьковая сортировка #4
В коде, по аналогии с которым вы делаете, есть такая операция я (в main()):
C++
1
2
for(i=0;i<max;i++)
b[i]=&baza[i];
В массив указателей копируются адреса элементов массива. У вас это где?
unskilled
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 6
01.07.2013, 21:21  [ТС]     Пузырьковая сортировка #5
Поставил, теперь жалуется на array в main()

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
#include <stdio.h>
#include <conio.h>
 
#define max_elem 300 
 
typedef struct{ 
    char name[256]; 
    float distance; 
    int ra; 
}bd; 
    
bd databd[max_elem]; 
int num = 0; 
FILE *prfile; 
FILE *file; 
 
void add_elem() //ГґГіГ*êöèÿ äîáГ*âëåГ*ГЁГї ýëåìåГ*ГІГ* Гў ГЎГ*çó
{
    if(num>=max_elem)
    {
        printf("baza perepolnena.\n");
        return;
    }
    printf("Nazvanie Rasstoyanie Kol-vo reysov:"); 
    scanf("%s %f %d\n", &databd[num].name, &databd[num].distance, &databd[num].ra);
    num++; 
}
 
void delete_elem() //ГґГіГ*êöèÿ ГіГ¤Г*ëåГ*ГЁГї ýëåìåГ*ГІГ* ГЁГ§ ГЎГ*çû
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else 
    {
        num--;
        int j = 0;
        for(j = i; j<num; j++) 
            databd[j] = databd[j+1];
        printf("zapis' udalena\n");
    }
}
 
void print_elem() //ГґГіГ*êöèÿ âûâîäГ* îäГ*îãî ýëåìåГ*ГІГ* ГЁГ§ ГЎГ*çû
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else
    {
        printf("[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
        fprintf(prfile, "[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
    }
}
 
void print_all() //ГґГіГ*êöèÿ âûâîäГ* ГўГ±ГҐГµ ýëåìåГ*òîâ ГЁГ§ ГЎГ*çû
{   
    int i = 0;
    for(i = 0; i<num; i++)
    {
        printf("[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
        fprintf(prfile, "[%d] %s %f %d\n", i, databd[i].name, databd[i].distance, databd[i].ra);
    }
}
 
void sort_bd() //ГґГіГ*êöèÿ ïóçûðüêîâîé ñîðòèðîâêè
{ 
  bd *array[max_elem];
  bd *tmp;
  int i, j;
  for (i = 0; i < num-1; i++)
  {
    for (j = i+1; j < num; j++)
    {
      if ((array[j]->distance) > (array[j + 1]->distance))
      {
        tmp = array[j];
        array[j] = array[j+1];
        array[j+1] = tmp;
      }
    }
  }
  printf("baza otsortirovana\n");
}
                            
void save_bd() //ГґГіГ*êöèÿ ñîõðГ*Г*ГїГҐГІ ГЎГ*çó Гў ГґГ*éë
{
     file = fopen("databd.txt","w"); 
     if(file == NULL)
     {
         printf("nevozmojno zapisat' v fail");
         return;
     }
     fprintf(file, "%d\n", num); 
     int i = 0;
     for(i=0; i<num; i++) 
         fprintf(file, "%s %f %d\n", databd[i].name, databd[i].distance, databd[i].ra);
     fclose(file); 
     printf("baza zapisana\n");
}
 
void load_bd() //ГґГіГ*êöèÿ ñ÷èòûâГ*Г*ГЁГї ГЎГ*çû ГЁГ§ ГґГ*éëГ*
{
     file = fopen("databd.txt","r"); 
     if(file == NULL)
     {
         printf("nevozmojno otkrit' fail");
         return;
     }
     fscanf(file, "%d\n", &num); 
     if(num >= max_elem) num = max_elem-1; 
     int i = 0;
     for(i=0; i<num; i++) 
         fscanf(file, "%s %f %d\n", &databd[i].name, &databd[i].distance, &databd[i].ra);       
     fclose(file);
     printf("baza schitana\n"); 
}
 
void run_menu() //ГґГіГ*öèÿ âûâîäГ* ìåГ*Гѕ Г°Г*áîòû Г± ГЎГ*çîé
{
    int key = 0;
    while(key != 8){ 
        printf("\n[1] dobavit' zapis'\n");
        printf("[2] udalit' zapis'\n");
        printf("[3] vivesti zapis'\n");
        printf("[4] vivesti vse zapisi\n");
        printf("[5] sortirovat' bazu\n");
        printf("[6] sohranit' bazu v fail\n");
        printf("[7] zagruzit' bazu iz faila\n");
        printf("[8] vihod\n\n");
        scanf("%d",&key); 
        switch(key){ 
            case 1:{
                 add_elem();
                 break;
            }
            case 2:{
                 delete_elem();
                 break;
            }
            case 3:{
                 print_elem();
                 break;
            }
            case 4:{
                 print_all();
                 
                 break;
            }
            case 5:{
                 sort_bd();
                 break;
            }
            case 6:{
                 save_bd();
                 break;
            }
            case 7:{
                 load_bd();
                 break;
            }
        }
    }     
}
 
int main() 
{ int i;
    for(i=0;i<max_elem;i++)
    array[i]=&databd[i];
 
    prfile = fopen("prn", "w");
    run_menu(); 
    fclose(prfile);
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 21:38     Пузырьковая сортировка #6
Цитата Сообщение от unskilled Посмотреть сообщение
теперь жалуется на array в main()
И правильно делает. Где соблюдение аналогии? Глобально объявляйте.
unskilled
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 6
02.07.2013, 03:30  [ТС]     Пузырьковая сортировка #7
Ох, объявил, попробовал что-то пофиксить посредством своих кривых рук.
В итоге при сортировке творит что-то неладное с последней записью http://puu.sh/3sVSc.png

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
#include <stdio.h>
#include <conio.h>
 
#define max_elem 300 
 
typedef struct{ 
    char name[256]; 
    int distance; 
    int ra; 
}bd; 
bd *array[max_elem];
bd databd[max_elem]; 
int num = 0; 
FILE *prfile; 
FILE *file; 
 
void add_elem() //ГґГіГ*êöèÿ äîáГ*âëåГ*ГЁГї ýëåìåГ*ГІГ* Гў ГЎГ*çó
{
    if(num>=max_elem)
    {
        printf("baza perepolnena.\n");
        return;
    }
    printf("Nazvanie Rasstoyanie Kol-vo reysov:"); 
    scanf("%s %d %d\n", &databd[num].name, &databd[num].distance, &databd[num].ra);
    num++; 
    
}
 
void delete_elem() //ГґГіГ*êöèÿ ГіГ¤Г*ëåГ*ГЁГї ýëåìåГ*ГІГ* ГЁГ§ ГЎГ*çû
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else 
    {
        num--;
        int j = 0;
        for(j = i; j<num; j++) 
            databd[j] = databd[j+1];
        printf("zapis' udalena\n");
    }
}
 
void print_elem() //ГґГіГ*êöèÿ âûâîäГ* îäГ*îãî ýëåìåГ*ГІГ* ГЁГ§ ГЎГ*çû
{
    int i = max_elem;
    printf("vvedite nomer zapisi ot 0 do %d: ", num-1);
    scanf("%d", &i);
    if(i>=num || i<0)
        printf("takoy zapisi net\n");
    else
    {
        printf("[%d] %s %d %d\n", i, array[i]->name, array[i]->distance, array[i]->ra);
        fprintf(prfile, "[%d] %s %d %d\n", i, array[i]->name, array[i]->distance, array[i]->ra);
    }
}
 
void print_all() //ГґГіГ*êöèÿ âûâîäГ* ГўГ±ГҐГµ ýëåìåГ*òîâ ГЁГ§ ГЎГ*çû
{   
    int i = 0;
    for(i = 0; i<num; i++)
    {
        printf("[%d] %s %d %d\n", i, array[i]->name, array[i]->distance, array[i]->ra);
        fprintf(prfile, "[%d] %s %d %d\n", i, array[i]->name, array[i]->distance, array[i]->ra);
    }
}
 
void sort_bd() //ГґГіГ*êöèÿ ïóçûðüêîâîé ñîðòèðîâêè
{ 
  bd *tmp;
  int i, j;
  for (i = 0; i < num-1; i++)
  {
    for (j = i+1; j < num; j++)
    {
      if ((array[j]->distance) > (array[j + 1]->distance))
      {
        tmp = array[j];
        array[j] = array[j+1];
        array[j+1] = tmp;
      }
    }
  }
  printf("baza otsortirovana\n");
}
                            
void save_bd() //ГґГіГ*êöèÿ ñîõðГ*Г*ГїГҐГІ ГЎГ*çó Гў ГґГ*éë
{
     file = fopen("databd.txt","w"); 
     if(file == NULL)
     {
         printf("nevozmojno zapisat' v fail");
         return;
     }
     fprintf(file, "%d\n", num); 
     int i = 0;
     for(i=0; i<num; i++) 
         fprintf(file, "%s %d %d\n", array[i]->name, array[i]->distance, array[i]->ra);
     fclose(file); 
     printf("baza zapisana\n");
}
 
void load_bd() //ГґГіГ*êöèÿ ñ÷èòûâГ*Г*ГЁГї ГЎГ*çû ГЁГ§ ГґГ*éëГ*
{
     file = fopen("databd.txt","r"); 
     if(file == NULL)
     {
         printf("nevozmojno otkrit' fail");
         return;
     }
     fscanf(file, "%d\n", &num); 
     if(num >= max_elem) num = max_elem-1; 
     int i = 0;
     for(i=0; i<num; i++) 
         fscanf(file, "%s %d %d\n", &array[i]->name, &array[i]->distance, &array[i]->ra);       
     fclose(file);
     printf("baza schitana\n"); 
}
 
void run_menu() //ГґГіГ*öèÿ âûâîäГ* ìåГ*Гѕ Г°Г*áîòû Г± ГЎГ*çîé
{
    int key = 0;
    while(key != 8){ 
        printf("\n[1] dobavit' zapis'\n");
        printf("[2] udalit' zapis'\n");
        printf("[3] vivesti zapis'\n");
        printf("[4] vivesti vse zapisi\n");
        printf("[5] sortirovat' bazu\n");
        printf("[6] sohranit' bazu v fail\n");
        printf("[7] zagruzit' bazu iz faila\n");
        printf("[8] vihod\n\n");
        scanf("%d",&key); 
        switch(key){ 
            case 1:{
                 add_elem();
                 break;
            }
            case 2:{
                 delete_elem();
                 break;
            }
            case 3:{
                 print_elem();
                 break;
            }
            case 4:{
                 print_all();
                 
                 break;
            }
            case 5:{
                 sort_bd();
                 break;
            }
            case 6:{
                 save_bd();
                 break;
            }
            case 7:{
                 load_bd();
                 break;
            }
        }
    }     
}
 
int main() 
{   int i;
    for(i=0;i<max_elem;i++)
    array[i]=&databd[i];
    prfile = fopen("prn", "w");
    run_menu(); 
    fclose(prfile);
    return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.07.2013, 09:04     Пузырьковая сортировка #8
Цитата Сообщение от unskilled Посмотреть сообщение
Есть курсовик.
Есть пузырьковая сортировка
ну не в курсовом же проекте пузырьковая сортировка, да еще и в таком виде. будете такой сортировкой большие сортировать массивы и результат будете годами ждать. можете выкладки по подсчету времени здесь найти:
Отсортировать данный массив таким образом, чтобы все нули находились в начале, а единицы - в конце массива
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 17:30     Пузырьковая сортировка
Еще ссылки по теме:

C++ Пузырьковая сортировка
C++ Пузырьковая сортировка
C++ Пузырьковая сортировка

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2013, 17:30     Пузырьковая сортировка #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_bd() //функция пузырьковой сортировки
{ 
  bd *tmp;
  int i, j;
  for (i = 0; i < num-1; i++)
  {
    for (j = 0; j < num - 1; j++)
    {
      if ((array[j]->distance) > (array[j + 1]->distance))
      {
        tmp = array[j];
        array[j] = array[j+1];
        array[j+1] = tmp;
      }
    }
  }
  printf("baza otsortirovana\n");
}
Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
void add_elem() //функция добавления элемента в базу
{
    if(num>=max_elem)
    {
        printf("baza perepolnena.\n");
        return;
    }
    printf("Nazvanie Rasstoyanie Kol-vo reysov:"); 
    scanf("%s%d%d", databd[num].name, &databd[num].distance, &databd[num].ra); // зачем там был \n ?
    num++; 
    
}
Добавлено через 30 минут
И ищё загадка. У меня, почему-то, файл с именем prn, после создания, не виден в папке проекта. Проверка на открытие файла проходит, а файла нет. Из-за этого в коде сбой происходит (после вывода). При любом изменении имени всё становится нормально. Может у меня какой-то глюк, но лучше дать ему какое-нибудь другое имя.
Yandex
Объявления
02.07.2013, 17:30     Пузырьковая сортировка
Ответ Создать тему

Метки
массив указателей, массив указателей c++, пузырьковая сортировка c++, пузырьковая сортировка, сортировка пузырьком c++, сортировка пузырьком
Опции темы

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