include iostream ввод-вывод на консоль include string работа со строка

 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
#include <iostream>//ввод-вывод на консоль
#include <string.h>//работа со строками
struct route//описываем запись (структуру route)
{
//строки из 64 символов для названий начального пункта и конечного
char begin_name[64];
char end_name[64];
int number;//номер маршрута
};
//http://ru.wikipedia.org/wiki/Сортировка_пузырьком
//самая простая сортировка массива - пузырьком
//ф-ия возвращает указатель на обновлённый массив, а в качестве параметров принимает указатель на массив для сортировки и его размер
route* sort(route* a, const int n)
{
route *temp=new route;//создаём временную запись для обмена содержимого элементов
for (int i=n-1; i>0; i--)//просматриваем массив с конца
{
for (int j=0; j<i; j++)//и с начала
{
if (a[j].number>a[j+1].number)//если номер элемента j больше номера элемента j+1, то поменяем их содержимое местами
{
//копируем в temp все данные a[j+1]
temp->number=a[j+1].number;
strcpy(temp->begin_name, a[j+1].begin_name);//функция strcpy копирует содержимое второй строки в первую
strcpy(temp->end_name, a[j+1].end_name);
//копируем в a[j+1] все данные a[j]
a[j+1].number=a[j].number;
strcpy(a[j+1].begin_name, a[j].begin_name);
strcpy(a[j+1].end_name, a[j].end_name);
//наконец копируем в a[j] все старые данные a[j+1], хранимые в temp
a[j].number=temp->number;
strcpy(a[j].begin_name, temp->begin_name);
strcpy(a[j].end_name, temp->end_name);
}
}
}
delete temp;//удалим ненужное
return a;//возвращаем отсортированный массив
}
//ф-ия поиска в массиве a элемента с заданным номером маршрута num
//ф-ия возвращает индекс найденного элемента или -1 если такого элемента нет
int search(route *a, const int n, int num)
{
for (int i=0; i<n; i++)//пробегаем по всем элементам
{
if (a[i].number==num) return i;//если нашли, то возврщаем индекс элемента
}
return -1;//если пробежали по всему массиву и ничего не нашли, то возвращаем -1
}
//ф-ия вывода содержимого массива a размера n
//ф-ия ничего не возвращает (void)
void print(route *a, const int n)
{
for (int i=0; i<n; i++)
std::cout<<a[i].number<<" "<<a[i].begin_name<<" "<<a[i].end_name<<"\n";
}
int main()
{
const int n=8;//кол-во элементов в массиве
route *routes=new route[n];//создаём массив из n элементов
for (int i=0; i<n; i++)//заполняем его данными пользователя
{
std::cout<<"Enter "<<i<<" route number: ";
std::cin>>routes[i].number;
std::cout<<"Enter "<<i<<" route name of begin dot: ";
std::cin>>routes[i].begin_name;
std::cout<<"Enter "<<i<<" route name of end dot: ";
std::cin>>routes[i].end_name;
}
routes=sort(routes, n);//сортируем массив
std::cout<<"Routes: \n";
print(routes, n);//выводим отсортированный массив
int choice=0;//в этой переменной будет храниться выбор пользователя
int result;//результат поиска
while (choice!=-1)//выводить меню пока пользователь не введёт -1
{
std::cout<<"Enter number of path to print (to exit enter -1) : ";//спрашиваем номер маршрута
std::cin>>choice;//считываем номер
if (choice!=-1)//если пользователь не выбрал выход
{
result=search(routes, n, choice);//вызываем ф-ию поиска
if (result!=-1)//если мы что-то нашли (result не равен -1), то выведем данные о маршруте
std::cout<<"Number: "<<routes[result].number<<"\n"
<<"Name of begin path: "<<routes[result].begin_name<<"\n"
<<"Name of end dot: "<<routes[result].end_name<<"\n";
else std::cout<<"No such element!\n";//иначе скажем, что такого маршрута нет
}
}
return 0;//успешно выходим из программы
}