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

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

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

Создать массив объектов пользовательского типа "Car" (каталог машин) и функции чтения/записи из/в каталог(а) - C++

08.09.2016, 09:41. Просмотров 141. Ответов 1
Метки нет (Все метки)

Добрый день!
Нужно составить программу, которая будет дополнять каталог автомобилей

Имеется массив структур Auto *car = new Auto[N]
Нужно увеличить этот массив на M элементов
Для этого создаем новый массив структур Auto *car1 = new Auto[M], через цикл заполняем его.
Потом создаем следующий Auto *car2 = new Auto[X], где X=N+M, через цикл заполняем его значениями car и car1.

Загвоздка в следующем:
После удаления динамической памяти (delete[] car) уже нет возможности заново инициализировать структуру c тем же именем, но из большего числа элементов Auto *car = new Auto [X]. Компилятор ругается: переопределение; множественная инициализация.

Но во все функции (Print(), Input() и тд) передается именно структура car

Как повторно инициализировать структуру car, чтобы переписать в нее значения из car2?

Код программы (сокращенный):
Кликните здесь для просмотра всего текста
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
#include <conio.h>
#include <iostream>
#include <fstream>
#include <cstring>
 
using namespace std;
 
struct Auto
{
    char *mark;
    int year;
    char *country;
    bool used;
    int owners;
    bool accidents;
    bool wheel;
    int cost;
};
 
//Проверка правильности ввода
bool Proverka(int t)
{
    bool o = false;
    if (t == 1) o = true;
    else
        if (t == 2) o = true;
        else o = false;
        return o;
}
//Создание каталога
void Input(Auto s[], int b)
{
    for (int i = 0; i < b;i++)
    {
        system("cls");
        cout << "Введите марку: ";
        s[i].mark = new char[30];
        cin.get();
        cin.getline(s[i].mark, 30);
 
        system("cls");
        cout << "Введите год выпуска: ";
        cin >> s[i].year;
 
        system("cls");
        cout << "Введите страну производителя: ";
        s[i].country = new char[30];
        cin.get();
        cin.getline(s[i].country, 30);
 
        system("cls");
        int ch1;
        do
        {
            cout << "Автомобиль новый или б/у?\n\n";
            cout << "\t1. Новый\n";
            cout << "\t2. Б/у\n\n";
            cin >> ch1;
 
            switch (ch1)
            {
            case 1: s[i].used = true;break;
            case 2: s[i].used = false;break;
            default:
            {
                system("cls");
                cout << "Вы выбрали неверный пункт меню!\n\n";
                cout << "Нажмите любую клавишу и попробуйте заново";
                _getch();
                system("cls");
            }
            }
        } while (!Proverka(ch1));
 
        system("cls");
        cout << "Введите количество собственников: ";
        cin >> s[i].owners;
 
        system("cls");
        int ch2 = 0;
        do
        {
            cout << "Автомобиль попадал в аварии?\n\n";
            cout << "\t1. Да\n";
            cout << "\t2. Нет\n\n";
            cin >> ch2;
 
            switch (ch2)
            {
            case 1: s[i].accidents = true;break;
            case 2: s[i].accidents = false;break;
            default:
            {
                system("cls");
                cout << "Вы выбрали неверный пункт меню!\n\n";
                cout << "Нажмите любую клавишу и попробуйте заново";
                _getch();
                system("cls");
            }
            }
        } while (!Proverka(ch2));
 
        system("cls");
        int ch3 = 0;
        do
        {
            cout << "С какой стороны расположено рулевое колесо?\n\n";
            cout << "\t1. Справа\n";
            cout << "\t2. Слева\n\n";
            cin >> ch3;
 
            switch (ch3)
            {
            case 1: s[i].wheel = true;break;
            case 2: s[i].wheel = false;break;
            default:
            {
                system("cls");
                cout << "Вы выбрали неверный пункт меню!\n\n";
                cout << "Нажмите любую клавишу и попробуйте заново";
                _getch();
                system("cls");
            }
            }
        } while (!Proverka(ch3));
 
        system("cls");
        cout << "Укажите стоимость (в рублях): ";
        cin >> s[i].cost;
    }
}
//Вывод каталога
void Print(const Auto s[], int b)
{
    system("cls");
    for (int i = 0; i < b; i++)
    {
        cout << "Автомобиль №" << i + 1 << ":\n\n";
        cout << "Марка: " << s[i].mark << endl;
        cout << "Год выпуска: " << s[i].year << endl;
        cout << "Страна производитель: " << s[i].country << endl;
        if (s[i].used == true) cout << "Автомобиль новый\n";
        if (s[i].used == false) cout << "Автомобиль б/у\n";
        cout << "Количество собственников: " << s[i].owners << endl;
        if (s[i].accidents == true) cout << "Автомобиль попадал в аварии\n";
        if (s[i].accidents == false) cout << "Автомобиль не попадал в аварии\n";
        if (s[i].wheel == true) cout << "Руль справа\n";
        if (s[i].wheel == false) cout << "Руль слева\n";
        cout << "Стоимость: " << s[i].cost << " руб.\n\n";
    }
    _getch();
}
//Тело программы
int main()
{
    setlocale(LC_ALL, "Russian");
    int m = 0;
    int N, M, X;
    
    cout << "Каталог автомобилей\n\n";
    cout << "Сколько автомобилей будет в каталоге?\n";
    while (!(cin >> N) || N <= 0)
    {
        cin.clear();
        while (cin.get() != '\n');
        system("cls");
        cout << "Ошибка ввода: число должно быть целым\n\n";
        cout << "Нажмите любую клавишу и повторите ввод\n\n";
        _getch();
        system("cls");
        cout << "Каталог автомобилей\n\n";
        cout << "Сколько автомобилей будет в каталоге?\n";
    }
    Auto *car = new Auto[N];
    for (int i = 0;i < N;i++)
    {
        car[i].mark = new char[15];
        car[i].country = new char[15];
    }
    Input(car, N);
    
    cout << "Каталог автомобилей\n\n";
    cout << "Введите количество автомобилей, которое Вы хотите добавить в каталог: ";
    while (!(cin >> M) || M <= 0)
    {
        cin.clear();
        while (cin.get() != '\n');
        system("cls");
        cout << "Ошибка ввода: число должно быть целым\n\n";
        cout << "Нажмите любую клавишу и повторите ввод\n\n";
        _getch();
        system("cls");
        cout << "Каталог автомобилей\n\n";
        cout << "Введите количество автомобилей, которое Вы хотите добавить в каталог: ";
    }
    X = N + M;
    Auto *car1 = new Auto[M];
    for (int i = 0; i < M;i++)
    {
        car1[i].mark = new char[15];
        car1[i].country = new char[15];
    }
    Input(car1, M);
    Print(car1, M);
        
    Auto *car2 = new Auto[X];
    for (int i = 0; i < X;i++)
    {
        car2[i].mark = new char[15];
        car2[i].country = new char[15];
    }
    for (int i = 0;i < N;i++)
    {
        car2[i].mark = car[i].mark;
        car2[i].year = car[i].year;
        car2[i].country = car[i].country;
        car2[i].used = car[i].used;
        car2[i].owners = car[i].owners;
        car2[i].accidents = car[i].accidents;
        car2[i].wheel = car[i].wheel;
        car2[i].cost = car[i].cost;
    }
    for (int i = N;i < X;i++)
    {
        car2[i].mark = car1[i - N].mark;
        car2[i].year = car1[i - N].year;
        car2[i].country = car1[i - N].country;
        car2[i].used = car1[i - N].used;
        car2[i].owners = car1[i - N].owners;
        car2[i].accidents = car1[i - N].accidents;
        car2[i].wheel = car1[i - N].wheel;
        car2[i].cost = car1[i - N].cost;
    }
    Print(car2, X);
    
    for (int i = 0;i < N;i++)
    {
        delete[] car[i].mark;
        delete[] car[i].country;
    }
    delete[] car;
    for (int i = 0;i < M;i++)
    {
        delete[] car1[i].mark;
        delete[] car1[i].country;
    }
    delete[] car1;
 
    N = X;
    Auto *car = new Auto[X];
    for (int i = 0;i < N;i++)
    {
        car[i].mark = new char[15];
        car[i].country = new char[15];
    }
    for (int i = 0; i < N; i++)
    {
        car[i].mark = car2[i].mark;
        car[i].year = car2[i].year;
        car[i].country = car2[i].country;
        car[i].used = car2[i].used;
        car[i].owners = car2[i].owners;
        car[i].accidents = car2[i].accidents;
        car[i].wheel = car2[i].wheel;
        car[i].cost = car2[i].cost;
    }
    for (int i = 0;i < (N);i++)
    {
        delete[] car2[i].mark;
        delete[] car2[i].country;
    }
    delete[] car2;
    Print(car, N);
    for (int i = 0;i < (N);i++)
    {
        delete[] car[i].mark;
        delete[] car[i].country;
    }
    delete[] car;
 
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2016, 09:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать массив объектов пользовательского типа "Car" (каталог машин) и функции чтения/записи из/в каталог(а) (C++):

Реализовать поиск в массиве объектов пользовательского типа (структура "Маршруты") - C++
Здравствуйте, нужна помощь, нужно доработать код, но не совсем понимаю как Вот код (что именно нужно доработать ниже) #include...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа ("Справочная автовокзала") - C++
В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пункт ...

Реализовать поиск по заданному полю в списке объектов пользовательского типа (структура "Телефонная книга") - C++
Дано задание, готово все, кроме последнего пункта, подскажите пожалуйста как реализовать его 20. Дан файл, содержащий сведения о...

Работа с памятью: можно ли в массив объектов с полем типа "Родитель", вписать объекты с полем типа "Потомок" - C++
Здравствуйте. Предположим, что у нас есть массив из структур в которых находиться класс Item и число Count. Можно ли на место Item записать...

Создать динамический массив объектов пользовательского типа - C++
Есть класс class address { } Нужно создать динамический массив объектов. Записи создаются по одной (адреса), их общее число не...

Динамический массив структур - ошибка "попытка чтения или записи в защищенную память" - C++
не работает: class Students { struct list { string marka_mashini; string familiya_vladelca; int god_vipuska; ...

1
p51x
-3 / 1 / 3
Регистрация: 09.09.2011
Сообщений: 19
08.09.2016, 09:52 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
После удаления динамической памяти (delete[] car) уже нет возможности заново инициализировать структуру c тем же именем, но из большего числа элементов Auto *car = new Auto [X].
Есть. Уберите объявление и просто инициализируйте car = new Auto [X]
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2016, 09:52
Привет! Вот еще темы с ответами:

Создать класс "Список объектов любого типа" - C++
Создайте класс, который способен запоминать список объектов не заданного типа класса (для любого класса). #include &lt;iostream&gt; ...

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

Создать классы "Computer", "Software", "User" и реализовать взаимодействие объектов этих типов между собой - C++
Помогите решить задачку,нужна в инст на экзамен. Составить программу реализующую: 1)классы,которые могут содержать...

Доделать удаление элемента для линейного списка "Каталог файлов" - C++
В файловой системе каталог файлов организован как линейный список. Для каждого файла в каталоге содержатся следующие сведения: -&gt; имя...


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

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

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