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

Челночная сортировка - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача на классы. Крест http://www.cyberforum.ru/cpp-beginners/thread570773.html
Здравствуйте. Напишите пожалуйста программу на с++, а то ваще не врубаюсь Класс крест (х). Перенос,увеличение,размножение
C++ Дана матрица размера M × N. Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, …) найти сумму его элементов. Условный оператор не использовать. http://www.cyberforum.ru/cpp-beginners/thread570769.html
C++ Даны целые положительные числа
Даны целые положительные числа M и N. Сформировать целочисленную матрицу размера M × N, у которой все элементы J-го столбца имеют значение 5*J (J = 1, …, N). Добавлено через 3 часа 20 минут ап ап:)
Ввод и вывод в бинарный файл C++
Имеется массив bd1 из структуры bd: struct bd { int nom; char fam , im, otch; int day; int month; int year; char inst ;
C++ Нужно создать простую базу данных http://www.cyberforum.ru/cpp-beginners/thread570757.html
Нужна программа, которая создаёт простую базу данных по студентам группы, включающую сведения о ФИО, годе рождения, оценке за модуль и экзамен. Программа должна позволять создавать и изменять содержание базы данных, записывать и читать базу данных с диска, показывать её содержание на экране.
C++ Удалить повторяющийся элемент Здравствуйте! Помогите пожалуйста! Как мне удалить повтор в списке? у меня имеется вот такой алгоритм: bool buscmp(BusInfo *a, BusInfo *b) { if((a->nummarsh != b->nummarsh) && (a->name != b->name) && (a->from != b->from) && (a->to != b->to) && (a->price != b->price) && (a->numofseats != b->numofseats))return false; return true; } подробнее

Показать сообщение отдельно
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
20.05.2012, 17:58     Челночная сортировка
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
 
struct gai
{char marka[15];
char FIO[25];
char color[10];
char nomer[10];
};
 
gai st[100];
FILE *f;
 
void swaps(gai& st1, gai& st2);
bool iseqkey(char* psz1, char* psz2, int pos);
 
void input()
//функция ввода и хранения данных 
{char s='\0';
int i;
f=fopen("d:\\gai.txt","r+");
system("cls");
if (f)
{do
{fflush(stdin);
printf("\n База существует! Выберите действие\n");
printf("0 - создать заново\n");
printf("1 - добавить данные\n");
printf("2 - отказаться от ввода\n");
s=getchar();
if (s=='0')
f=fopen("d:\\gai.txt","w+");
else
if (s=='1') 
f=fopen("d:\\gai.txt","a+");
}
while (s!='0' && s!='1' && s!='2');
}
else
printf("Для окончания в каждом поле введите \"0\"\n");
f=fopen("d:\\gai.txt","wb+");
if (s!='2')
{
int i = 0;
while (i < 100)
{
fflush(stdin);
printf("\nФамилия И.О.: ");
gets(st[i].FIO);
if (*st[i].FIO == '0') break;
printf("\nМарка: ");
gets(st[i].marka);
if (*st[i].marka == '0') break;
printf("\nНомер: ");
gets(st[i].nomer);
if (*st[i].nomer == '0') break;
printf("\nЦвет: ");
gets(st[i].color);
if (*st[i].color == '0') break;
i++;
}
for (int q = 0; q < i; q++)
    fprintf(f,"%s %s %s %s\n",st[q].FIO,
        st[q].marka,st[q].nomer,st[q].color);
fclose(f); 
}
}
 
void select()
{ FILE* f=fopen("d:\\gai.txt","rb+");
system("cls");
int x = 0;
for (x = 0; !feof(f); x++)
    fscanf(f,"%s %s %s %s",st[x].FIO,st[x].marka,
        st[x].nomer,st[x].color);
//а здесь челночная сортировка
   for (int q = 0; q < 256; q++)
       for (int i = 0; i < x-1; i++)
            if (st[i].FIO[q] > st[i+1].FIO[q] && 
                iseqkey(st[i].FIO,st[i+1].FIO, q))
            {
                swaps(st[i], st[i+1]);
                for (int k = i; (st[k].FIO[q] < st[k-1].FIO[q]) && (k >= 1); k--)
                     if (iseqkey(st[k].FIO, st[k-1].FIO, q))
                         swaps(st[k],st[k-1]);
            }
 
    for (int q = 0; q < x; q++)
        printf("%s %s %s %s\n",st[q].FIO, 
            st[q].marka,st[q].nomer,st[q].color);
}
 
void select2()
//Функция выдачи полной информации об автомобиле владельца
{gai st;
int k=0;
char FIO[25];
f=fopen("d:\\gai.txt","rb");
system("cls");
if (!f)
{printf("Нет данных! Нажмите любую клавишу");
getch();
}
else
{fflush(stdin);
printf("Фамилию владельца: ");
gets(FIO);
printf("\n|-----------------|--------|--------|----------|");
printf("\n| Фамилия И.О. | марка | цвет | номер |");
printf("\n|-----------------|--------|--------|----------|");
while(fread(&st,sizeof(st),1,f)) { }
//здесь должен быть бинарный поиск
}
}
 
int main()
{//главная функция
setlocale(LC_ALL,"Russian");
char s='\0';
do 
{system("cls");
fflush(stdin);
printf("\n\nБаза данных ГАИ\n");
printf("Выберите действие: \n");
printf("1 - Ввод данных \n");
printf("2 - Выдача таблицы данных в алфавитном порядке\n"); 
printf("3 - Выдача полной информации об автомобиле владельца\n");
printf("4 - Выход\n");
s=getchar();
switch(s)
{
case '1':input();break;
case '2':select();break;
case '3':select2();break;
}
}
while (s!='4');
} 
 
bool iseqkey(char* psz1, char* psz2, int pos)
{
    for (int i = pos-1; i >= 0; i--)
        if (psz1[i] != psz2[i])
            return false;
 
    return true;
}
 
void swaps(gai& st1, gai& st2)
{ gai _t = st1; st1 = st2; st2 = _t; }
 
Текущее время: 00:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru