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

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

01.07.2013, 20:16. Показов 1209. Ответов 8

Есть курсовик.
Есть пузырьковая сортировка
Есть одно НО.
Сортировка должна быть сделана через массив указателей, а не через массив структур.
Был бы очень благодарен за помощь.

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");
         }
         }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2013, 20:16
Ответы с готовыми решениями:

Пузырьковая сортировка
Здравствуйте! Необходимо осуществить пузырьковую сортировку в столбцах двумерного массива. Но...

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

Пузырьковая сортировка
Здравствуйте .Объясните , пожалуйста , подробно , как работает пузырьковая сортировка . ...

Пузырьковая Сортировка
Описать структуру с именем Train, содержащую следующие поля: Point (название пункта назначения),...

8
5494 / 4889 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 20:52 2
Цитата Сообщение от unskilled Посмотреть сообщение
только когда по аналогии делаю в своем задании
Покажите, как по аналогии делаете.
0
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;
}
0
5494 / 4889 / 831
Регистрация: 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];
В массив указателей копируются адреса элементов массива. У вас это где?
0
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;
}
0
5494 / 4889 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 21:38 6
Цитата Сообщение от unskilled Посмотреть сообщение
теперь жалуется на array в main()
И правильно делает. Где соблюдение аналогии? Глобально объявляйте.
0
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;
}
0
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
02.07.2013, 09:04 8
Цитата Сообщение от unskilled Посмотреть сообщение
Есть курсовик.
Есть пузырьковая сортировка
ну не в курсовом же проекте пузырьковая сортировка, да еще и в таком виде. будете такой сортировкой большие сортировать массивы и результат будете годами ждать. можете выкладки по подсчету времени здесь найти:
Отсортировать данный массив таким образом, чтобы все нули находились в начале, а единицы - в конце массива
0
5494 / 4889 / 831
Регистрация: 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, после создания, не виден в папке проекта. Проверка на открытие файла проходит, а файла нет. Из-за этого в коде сбой происходит (после вывода). При любом изменении имени всё становится нормально. Может у меня какой-то глюк, но лучше дать ему какое-нибудь другое имя.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2013, 17:30
Помогаю со студенческими работами здесь

пузырьковая сортировка
Задача не сложная, но у меня нет времени ее решать: дан одномерный массив, нужно сделать...

Сортировка пузырьковая
Привет всем!помогите отсортировать задачку. #include &lt;iostream&gt; #include &lt;iomanip&gt; using...

Пузырьковая сортировка
Посмотрите что не так дана таблица стран с кол-вом золотых, серебряных медалей нудно...

Пузырьковая сортировка
Помогите исправить не сортирует массив.Еще должен считать кол-во шагов прохода цикла. #include...


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

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

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