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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Удаления символов из строки http://www.cyberforum.ru/cpp-beginners/thread915888.html
Доброго времени суток,в общем создалась проблема в написание программы,которая удаляет из строки все символы a и b,строку нужно ввести с клавиатуры,вроде как задача легкая,перепробовал множество вариантов,но всегда удаляет только до пробела,помогите,пожалуйста.
C++ is a отношение и наследование Ребятки у меня такая проблема: учусь в ввузе, преподают программирование(будущаяя профессия никак не связана с ним) оно мне никак не даётся, препод на зачет задал 2 вопроса, сказал: завтро приди, ответь, поставлю, и так : 1) Привести пример is a отношения без наследования. 2) Привести пример наследования без is a отношения. Я у знакомых спрашивал никто не может ничем помочь, в инете тож... http://www.cyberforum.ru/cpp-beginners/thread915882.html
C++ Пропуск пробела в строке
Здравствуйте, не могу понять, как пропустить пробел в строке: int i; for (i=0; i<strlen(string); i++) if(string==' ') { i++; for (i=' '; i<strlen(string); i++); } else{}
Установить, является ли данное число и палиндромом C++
5. Дано целое число п, удовлетворяющее условию 0< М <2-10^9. Установить, является ли данное число и палиндромом. WWWZWWW, будьте внимательнее с выбором раздела! перенесено из turbo pascal
C++ Проверка на ввод символа http://www.cyberforum.ru/cpp-beginners/thread915857.html
При вводе какого либо символа программа уходит в прострацию надо что бы программ распазновала что это символ и выводила error int main() { unsigned int choice; srand(time(NULL)); std::cout << "To Play write 1, end game 2" << std::endl; std::cin >> choice;
C++ Определить количество целых корней данного уравнения Дано уравнение ax^3+dx+cx(1=0 с целыми коэффициентами (0<|d|<2). Определить количество целых корней данного уравнения. подробнее

Показать сообщение отдельно
unskilled
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 6
01.07.2013, 20: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
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");
         }
         }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru