Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
nake
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 33
#1

Сортировка, не изменяя структуру - C++

30.04.2012, 11:05. Просмотров 933. Ответов 21
Метки нет (Все метки)

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
#include <conio.h>
#include <string.h>
#include <stdio.h>
 
struct autopark{          //объявление структуры autopark
char brand[30];      //марка автобуса
char date[30];      //год выпуска автобуса
char number[10];          //маршрут автбуса
}a[30];   
int addition(int i);    //добавление данных
int delet(int d);       //удаление данных
void showing(int n);    //показ данных
void sort(int i);     //сортировка данных
 
int main()
{
int key,d=0;
while(1)
 {
 
printf("\nMenu");                 
printf("\n1.Add the data");
printf("\n2.Display all details");
printf("\n3.Deleting data");
printf("\n4.Sort the data");
printf("\n\nTo exit, press Esc \n\n");
key=getch(); 
 
if(key==27) break;
 
switch(key)      //Выбор действия
{ 
case 49: d=addition(d);break;
case 50: showing(d);break;
case 51: d=delet(d);break;
case 52: sort(d);break;
}
getch();
}
}
 
int addition(int i)     //функция для добавления данных
{
puts("Enter the brand of the bus: ");
scanf("%s",a[i].brand);
puts("Enter the year the bus");
scanf("%s",a[i].date);
puts("Enter the number of bus");
scanf("%s",a[i].number);
return i+1;
}
int delet(int n)      //функция для удаления данных
{
int i,d;
printf("\nEnter the number of write to remove: ");
scanf("%d",&d);
for (i=d-1;i<n-1;i++)
{
strcpy(a[i].brand,a[i+1].brand);
strcpy(a[i].date,a[i+1].date);
strcpy(a[i].number,a[i+1].number);
return n-1;
}
}
 
void showing(int n)    //функция показа данных
{
int i;
printf("\n_________________________________\n");
printf("|N |Brand     |Year      |Number|\n");
printf("_________________________________\n");
for (i=0;i<n;i++)
 {
printf("|%-2d|%-10s|%-10s|%-3s   |\n",i+1,a[i].brand,a[i].date,
a[i].number);
}
printf("_________________________________");
}
 
void sort(int i)    //функция сортировки данных
{
int n,temp,button;
printf("\nMenu");                 
printf("\n1.Brand");
printf("\n2.Date");
printf("\n3.Number");
printf("\n\nTo exit, press Esc \n\n");
button=getch(); 
 
if(button==29) break;
 
switch(button)      //Выбор действия
{ 
case 49: for(int i=0;i<30;i++)
    {
            for(int j=i+1;j<30;j++)
            {
                    if(a[i].brand>a[j].brand)
                    {
                           temp=i;;
                           i=j;
                           j=temp;
                    }
            }
    };break;
case 50: for(int i=0;i<30;i++)
    {
            for(int j=i+1;j<30;j++)
            {
                    if(a[i].date>a[j].date)
                    {
                           temp=i;;
                           i=j;
                           j=temp;
                    }
            }
    };break;
case 51: for(int i=0;i<30;i++)
    {
            for(int j=i+1;j<30;j++)
            {
                    if(a[i].number>a[j].number)
                    {
                           temp=i;;
                           i=j;
                           j=temp;
                    }
            }
    };break;
}
}
Нужно, чтобы оно сортировало порядковый номер записи в структуре, но не получается. Не понимаю как это передать в функцию показа данных. И ещё не работает break в функции сортировки, когда if(button==29) break;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 11:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка, не изменяя структуру (C++):

Описать структуру с именем STUDENT. Не работает сортировка - C++
Вот задача: 1 .Описать структуру с именем STUDENT,содержащую следующие поля: •фамилия и инициалы; •номер группы; ...

запись в файл, не изменяя размер самого файла - C++
int stream::write(block blocks, int numOfBlocks,const char *data){ int filesize=strlen(data); ofstream disk(&quot;data.dat&quot;,ios::out...

Как создать структуру-список, поля которой — ссылка на такую же структуру - C++
Суть вопроса в том, как создать структуру-список, поля которой - ссылка на сл. элемент(такую же структуру) и ссылка на объект, относящийся...

Упорядочить заданную последовательность по убыванию, изменяя элементы последовательности - C++
Прошу помочь в задаче на функции. Задание в приложении

Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. - C++
Нужно отредактировать структуру по выбору пользователя. Проблема заключается в создании функции. Подскажите, а лучше покажите, как...

Получить заданное слово, изменяя в исходном слове по одной букве - C++
Ребят, прошу помощи! Есть задача: Дано исходное и конечное слово равной длины. Длина исходных слов не ограничена. Необходимо составить...

21
nake
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 33
30.04.2012, 15:12  [ТС] #16
C++
1
2
for (int i = 0; i < N; ++i)
     ARR2[i] = i + 1;
где должно быть это? в маине?
0
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
30.04.2012, 15:15 #17
Да, где-то в начале главной функции.

Добавлено через 1 минуту
Только как раз в этом месте цикл должен бы быть до 30, а не до N. Копи-паста подвела
1
nake
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 33
30.04.2012, 15:22  [ТС] #18
grizlik78, извините за назойливость, но всё равно не работает
0
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
30.04.2012, 16:12 #19
Вот такого типа сравнения неправильные.
C++
1
if(a[ARR1[i]].number>a[ARR1[j]].number)
Я не посмотрел сразу, что number это массив символов. Здесь сравниваются адреса массивов, а не содержимое.
Сравнивать надо как-то так:
C++
1
if (strcmp(a[ARR1[i]].number, a[ARR1[j]].number) > 0)
Добавлено через 1 минуту
правда здесь будут сравниваться строки, а не числа
100 > 10, но при этом 100 < 11

Добавлено через 1 минуту
Чтобы сравнивать числовые значения как числа их надо будет преобразовывать в числа
Но для строк как раз strcmp подойдёт
1
nake
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 33
30.04.2012, 16:16  [ТС] #20
спасибо, при сравнении номера просто введу нужные числа
0
grizlik78
Эксперт С++
1967 / 1460 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
30.04.2012, 16:44 #21
Цитата Сообщение от nake Посмотреть сообщение
спасибо, при сравнении номера просто введу нужные числа
Ошибки программы надо тщательно задокументировать как её особенности
Строковое сравнение правильно сравнивает числа одинаковой длины, поэтому можно потребовать вводить, например, трёхзначные номера маршрутов, с ведущими нулями, т. е. 001, 015, 327 и т. д.
1
nake
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 33
30.04.2012, 18:45  [ТС] #22
grizlik78, большое спасибо ещё раз за помощь
0
30.04.2012, 18:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 18:45
Привет! Вот еще темы с ответами:

Ввод данных в структуру через указатель на структуру - C++
#include &quot;stdafx.h&quot; #include &quot;ctime&quot; #include &quot;iostream&quot; #pragma warning(disable : 4996) using namespace std; class...

Изменяя место элементов в столбце матрицы, расположить их в соответствии с ростом характеристик - C++
срочно нужна помощь) Характерисикой столбца целочисленной матрицы именнуем сумму модулей его отрицательных нечетных елементов.Изменяя их...

Написать программу, которая получает данные из файла, изменяя их любым образом - C++
Всем доброго времени суток. Очень прошу разобраться с заданием. Напишите программу, которая получает данные из файла, изменяет их (любым...

Циклическая программа (при нажатии клавиши повторяет операцию, изменяя данные) - C++
Нужно написать программу, чтобы при каждом повторном нажатии определённой клавиши, программа выполняла какую-либо операцию с изменяющимися...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru