Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
1

Структурированные типы данных: смена записей местами

09.01.2016, 01:19. Показов 1459. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В данной программе создается что-то вроде базы данных в которой записаны ФИО сотрудников, далее кто они по научной степени(Профессор,Доцент,Старший препод,Ассистент) и далее вводится должность и звание.
Эта часть работает. Тоесть Пользователь заполняет и ему выводятся все данные что он заполнил.

Суть вопроса вот в чем: мне нужно сделать так чтобы пользователь мог после выполения основной части программы поменять местами те записи которые он захочет. Этим и занимается процедура ChangePossition.
Выдает ошибку error C3861: ChangePosition: идентификатор не найден. Помогите пожалуйста.
Делалось в Microsoft Visual Studio Express 2013
C++ (Qt)
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
#include <iostream>
#include <fstream>
#include <string>
 
#define n 4
 
using namespace std;
 
void ChangePossition(int b[], int size);
 
struct base{
    string name;
    string sname;
    string tname;
    string scienseD;
    string post;
    string rang;
    bool   ktn;
};
int main(){
    //int n;
    int a;
    int const MAX = n; //кол-во экземпляров структуры//
    base b[MAX];
    for (int i = 0; i<MAX; ++i)
    {
        cout << "Person" << i << endl;
        cout << "enter name :" << endl;
        cin >> b[i].name;
        cout << "enter surename :" << endl;
        cin >> b[i].sname;
        cout << "enter patronymic :" << endl;
        cin >> b[i].tname;
        cout << "enter sciense degree :" << endl;
        cin >> b[i].scienseD;
        cout << "enter Post :" << endl;
        cin >> b[i].post;
        cout << "enter rang :" << endl;
        cin >> b[i].rang;
    }
 
    ofstream outfile;
    outfile.open("Out.txt");
    for (int i = 0; i<MAX; ++i)
        outfile << b[i].name << " " << b[i].sname << " " << b[i].tname << " " << b[i].scienseD << " " << b[i].post << " "<< b[i].rang <<" "<< endl;
    cout << "what you want to do?" << endl;
    cin >> a;
    if (a == 1)
    {
        ChangePosition(b, MAX);
        cout << "changed database:" << endl;
        for (int i = 0; i<MAX; ++i)
            outfile << b[i].name << " " << b[i].sname << " " << b[i].tname << " " << b[i].scienseD << " " << b[i].post << " " << b[i].rang << " " << endl;
    }
    system("pause");
    return 0;
 
}
 
void ChangePosition(base b[], int size)
{
    base t;
    int s, f;
    cout << "Input numbers of records" << endl; //номера меняющихся элементов;
    cin >> s, f;
    t = b[s];
    b[s] = b[f];
    b[f] = t;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2016, 01:19
Ответы с готовыми решениями:

Структурированные типы данных
Даны две структуры: struct point {int x, y;} p1, p2; struct rect {struct point pt1, pt2;}; и...

Структурированные типы данных. Массивы С++
В двумерном массиве найти суммы S отрицательных элементов каждого столбца. Добавлено через 20...

Что такое "Структурированные типы данных. Объекты"
Что такое? Структурированные типы данных. Объекты. Разобрался.

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы:...

18
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
09.01.2016, 01:27 2
Цитата Сообщение от Dante4Rungun Посмотреть сообщение
идентификатор не найден.
Тут так:
Цитата Сообщение от Dante4Rungun Посмотреть сообщение
C++
1
void ChangePossition(int b[], int size);
А тут так:
Цитата Сообщение от Dante4Rungun Посмотреть сообщение
C++
1
2
void ChangePosition(base b[], int size)
{
0
Эксперт С++
8971 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.01.2016, 01:29 3
Цитата Сообщение от Dante4Rungun Посмотреть сообщение
Суть вопроса вот в чем: мне нужно сделать так чтобы пользователь мог после выполения основной части программы поменять местами те записи которые он захочет. Этим и занимается процедура ChangePossition.
Выдает ошибку error C3861: ChangePosition: идентификатор не найден. Помогите пожалуйста.
найдите 10 отличий.

P.S.
Код откровенно плох.
В нём куча нелепых ошибок.
Общее впечатление - выдрано из разных кусков без понимания, что эти куски должны делать.
0
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
09.01.2016, 09:32  [ТС] 4
Могу объяснить каждую часть кода, что интересует?
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 10:03 5
вот прототип функции, которая якобы написана, хотя такой нет
C++
1
void ChangePossition(int b[], int size);
вот другая функция, которая используется, но компилятор ее не видит, т.к она написана нише места ее использования.
C++
1
void ChangePosition(base b[], int size)
а вот вообще веселая конструкция, смысл которой я постичь не могу, объясните ее смысл
C++
1
2
3
4
        #define n 4//объявили константу
             ...
    int const MAX = n; //объявили константу равной константе(которая больше не используется)
    base b[MAX];
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
09.01.2016, 10:04 6
Цитата Сообщение от Dante4Rungun Посмотреть сообщение
Помогите пожалуйста
У тебя прототип функции(это сверху кода) отличается от её определения(это снизу кода). В прототипе так: void ChangePossition(int b[], int size), а в определении ты изменил имя и параметр на вот такое: void ChangePosition(base b[], int size). Эти две вещи должны быть одинаковые.
1
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 10:05 7
так не работает
C++
1
cin >> s, f;
надо
C++
1
cin >> s >> f;
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
09.01.2016, 10:09  [ТС] 8
Попробовал сделать без функции просто в основном коде проделать это же, не работает, походу я не совсем понимаю как изменять массив структур, может кто с этим помочь?

Добавлено через 1 минуту
Спасибо, s и f уже вводил и считывал отдельно проблемы не решило
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 10:14 9
Цитата Сообщение от Dante4Rungun Посмотреть сообщение
Спасибо, s и f уже вводил и считывал отдельно проблемы не решило
вы не правы.
Вы учли, что массивы нумеруются от 0 до n-1?
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
09.01.2016, 12:26  [ТС] 10
Я это знаю, но да не учел

Добавлено через 23 минуты
Может кто-то просто на примере показать как это делается, не обязательно чтобы пример был под тот код что написан выше, просто краткий пример как поменять элементы местами в массиве структур
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 12:49 11
Лучший ответ Сообщение было отмечено Dante4Rungun как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void ChangePosition(base b[], int size)
{
    base t;
    int s, f;
    cout << "Input numbers of records" << endl; //номера меняющихся элементов;
    cin >> s >> f;
    if(s>=0 && f>=0 && s<size && f<size){
        t = b[s];
        b[s] = b[f];
        b[f] = t;
    }
    else
        cout << "Error!" << endl;
}
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
09.01.2016, 14:45  [ТС] 12
Суть в том чтобы убрать какой-то из элементов массива структур
C++
1
2
3
4
5
6
7
8
void Delete(base b[], int size)
{
    int i,k;
    cout << " k="<< endl; 
        cin >> k; //ввод номера элемента, подлежащего удалению
    for (i = k; i<size;b[i] = b[i + 1], i++); //удаление m-го элемента
    size--; //уменьшение количества элементов в массиве
}
Добавлено через 11 минут
Подскажите пожалуйста ещё раз, что не так.
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 14:57 13
вы удаляете элемент из массива, но размер вы не изменяете, а так как вы смещаете элементы, то крайние будут дублироваться
C++
1
2
size--; //не имеет смысла
bool   ktn;//для чего это поле в структуре?
0
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
09.01.2016, 15:09  [ТС] 14
лучше в быстрый ответ как я понял

Добавлено через 3 минуты
bool ktn , это наличие Кандидата Наук у Старших Предподавателей и у Ассистентов, оно должно было принимать значения 1 или 0, 1-да 0-нет, не помню почему я его обделил, но потом допишу
А size -- я думал уменьшит количество элементов в массиве, дабы не возникало такой ситуации как
До :
a
b
c
d
После к примеру после удаления 1-го элемента :
a
c
d
d
Но оно не работает и такая ситуация при компиляции как раз таки возникает, это я справил
for (i = k; i < size - 1 ;b[i] = b[i + 1], i++)
Что мне с этим делать?
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 15:09 15
функция удаления, принимает аргумент size по значению, надо по ссылке и не забудьте, что константы не изменяются
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 18
09.01.2016, 16:48  [ТС] 16
Я исправил,спасибо Вам огромное за помощь.

Добавлено через 36 минут
Последний вопрос, ф-ия прибавления елемента к массиву структур. Дайте пожалуйста напутствие.

Добавлено через 57 минут
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
void Plus(base b[], int size)
{
    int pos,k;
    base t;
 
    cout << "Input Position" << endl;
    cin >> pos;
 
    for (int i = size; i < size + 1; ++i)
    {
        cout << "enter name :" << endl;
        cin >> b[i].name;
        cout << "enter surename :" << endl;
        cin >> b[i].sname;
        cout << "enter patronymic :" << endl;
        cin >> b[i].tname;
        cout << "enter sciense degree :" << endl;
        cin >> b[i].scienseD;
        cout << "enter Post :" << endl;
        cin >> b[i].post;
        cout << "enter rang :" << endl;
        cin >> b[i].rang;
    }
    
    cout << "Person" << pos << endl;
    for (int i = 0; i <size + 1 ; ++i)
        cout << b[i].name << " " << b[i].sname << " " << b[i].tname << " " << b[i].scienseD << " " << b[i].post << " " << b[i].rang << " " << endl;
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
09.01.2016, 16:55 17
Этот цикл здесь не нужен
C++
1
for (int i = size; i < size + 1; ++i)
необходима проверка на переполнение.

Добавлено через 31 секунду
и вообще лучше посмотреть на весь код целиком
0
Эксперт С++
8971 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.01.2016, 17:27 18
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
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
#include <cctype>
#include <locale>
#include <string>
#include <algorithm>
#include <functional>
 
#include <iostream>
#include <fstream>
#include <limits>
#include <list>
 
#include <random>
#include <chrono>
 
// ----------------------------------------------------------------
// ----------------------------------------------------------------
 
// удаляет пробелы слева от текста
inline std::string& ltrim(std::string& s)
{
    s.erase(s.begin(), 
        std::find_if(s.begin(), s.end(), 
            std::ptr_fun<int, int>(std::isgraph)
        )
    );
    return s;
}
 
// удаляет пробелы справа от текста
inline std::string& rtrim(std::string& s)
{
    s.erase(std::find_if(
            s.rbegin(), s.rend(), std::ptr_fun<int, int>(std::isgraph)
        ).base(), s.end()
    );
    return s;
}
 
// удаляет пробелы слева и справа от текста
inline std::string& trim(std::string& s) { return ltrim(rtrim(s)); }
 
// ----------------------------------------------------------------
// ------------------- random`s staff -----------------------------
 
// генератор псевдослучайных чисел
 
#define dT \
    typename std::common_type<T1,T2>::type
 
namespace detailRandom{
 
    template<class T> struct property_
    {
        enum { eIS_BOOL = std::is_same<T, bool>::value };
 
        //TODO: как насчет wchar_t ???
        //ANSWER: матерная брань
        enum {
            eIS_CHAR
             = std::is_same<T, char>::value
            || std::is_same<T, unsigned char>::value
            || std::is_same<T, signed char>::value
        };
 
        enum { eIS_INTEGRAL = std::is_integral<T>::value && !eIS_CHAR && !eIS_BOOL };
        enum { eIS_FLOATING = std::is_floating_point<T>::value };
        enum { eIS_OTHER = !eIS_CHAR && !eIS_INTEGRAL && !eIS_FLOATING };
    };
 
    template<class T>
    using for_integer
        = typename std::enable_if< property_<T>::eIS_INTEGRAL >::type*;
 
    template<class T>
    using for_char
        = typename std::enable_if< property_<T>::eIS_CHAR >::type*;
 
    template<class T>
    using for_bool
        = typename std::enable_if< property_<T>::eIS_BOOL >::type*;
 
    template<class T>
    using for_floating
        = typename std::enable_if< property_<T>::eIS_FLOATING >::type*;
 
    template<class T>
    using for_other
        = typename std::enable_if< property_<T>::eIS_OTHER >::type*;
 
 
    std::default_random_engine& rnd_()
    {
        static std::default_random_engine gen(
            static_cast<unsigned>(
                std::chrono::system_clock::now().time_since_epoch().count()
            )
        );
        return gen;
    }
 
} // namespace detailRandom
 
template<class T1, class T2, detailRandom::for_integer<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    std::uniform_int_distribution<dT> distribution(a, b);
    return distribution(detailRandom::rnd_());
}
 
template<class T1, class T2, detailRandom::for_floating<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    std::uniform_real_distribution<dT> distribution(a, b);
    return distribution(detailRandom::rnd_());
}
 
template<class T1, class T2, detailRandom::for_char<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    enum { eIS_SIGNED = std::is_signed<dT>::value };
 
    typedef typename std::conditional< eIS_SIGNED, int, unsigned >::type
        type;
 
    const auto a_ = static_cast<type>(a);
    const auto b_ = static_cast<type>(b);
    return static_cast<dT>(random(a_, b_));
}
 
 
template<class T1, class T2, detailRandom::for_bool<dT> = nullptr> inline
dT random(const T1& a, const T2& b)
{
    const auto a_ = static_cast<int>(a);
    const auto b_ = static_cast<int>(b);
    return static_cast<dT>(random(a_, b_));
}
#undef dT
 
 
// ----------------------------------------------------------------
// ----------------------------------------------------------------
 
// макросы нужны, что бы не писать каждый раз 
// одно и тоже для очередного класса
 
// отвечают за умение класса выводится в поток 
// и вводится оттуда же
 
#ifndef OUT_TO_STREAM
#define OUT_TO_STREAM(type_)  \
        template<class T>friend   \
        ::std::basic_ostream<T>&  \
        operator<<(::std::basic_ostream<T>& os, const type_& obj )
#endif
 
#ifndef FROM_STREAM
#define FROM_STREAM(type_)  \
        template<class T>friend   \
        ::std::basic_istream<T>&  \
        operator>>(::std::basic_istream<T>& is, type_& obj )
#endif
 
// ----------------------------------------------------------------
// ----------------------------------------------------------------
 
// утилита для ввода циферок
// с проверкой результата
inline void input(const char* msg, int& dst, const int min, const int max)
{
    for (;;)
    {
        std::cout << msg;
        std::cin >> dst;
        if ( !dst ||  min<0 || max<0 ||   ((dst<min || dst > max) && (max!=min!=0))  )
            std::cout << "enter the numbers[" << min << " : " << max << "]\n",
            std::cin.clear(),
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        else
            break;
    }
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
 
// ----------------------------------------------------------------
// ----------------------------------------------------------------
 
// --- разбирает входную строку на токены, 
// которые помещает в указанный контейнер
template <class ContainerT>
void tokenize(const std::string& text, ContainerT& tokens, 
    const std::string& delimiters = " ", bool trimEmpty = false)
{
    std::string::size_type pos, lastPos = 0;
    for (;;)
    {
        pos = text.find_first_of(delimiters, lastPos);
        if (pos == std::string::npos)
        {
            pos = text.length();
            if (pos != lastPos || !trimEmpty)
                tokens.emplace_back(text.data() + lastPos, pos - lastPos);
            break;
        }
        else
        {
            if (pos != lastPos || !trimEmpty)
                tokens.emplace_back(text.data() + lastPos, pos - lastPos);
        }
        lastPos = pos + 1;
    }
}
 
// ----------------------------------------------------------------
// ----------------------------------------------------------------
 
inline const char* sys()        { return "forking system: "; }
inline const char* filenameBD() { return "database.txt";     }
 
// ----------------------------------------------------------------
// ----------------------------------------------------------------
 
 
struct person{
 
    OUT_TO_STREAM(person)
    {
        return os << obj.name << " : " << obj.sname << " : " << obj.tname << " : " 
            << obj.scienseD << " : " << obj.post << " : " << obj.rang;
    }
    FROM_STREAM(person)
    {
        std::string line;
        std::getline(is, line);
        std::vector<std::string> record;
        tokenize(line, record, ":", true);
 
        if (record.size() != 6)
            return std::cout
                << sys() << "total collapse!"
                << sys() << "file of database is nonconsistent\n"
                << sys() << "skip record\n", is;
 
        #define get_(n) (trim(record[n]), record[n]);
 
        obj.name     = get_(0);
        obj.sname    = get_(1);
        obj.tname    = get_(2);
        obj.scienseD = get_(3);
        obj.post     = get_(4);
        obj.rang     = get_(5);
        #undef get_
 
        return is;
    }
 
    
    static void input(const char* msg, std::string& dst)
    {
        std::cout << msg; std::cin >> dst;
        std::cin.clear(),
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
 
    void input()
    {
        input("enter name: "          , name);
        input("enter surename: "      , sname);
        input("enter patronymic: "    , tname);
        input("enter sciense degree: ", scienseD);
        input("enter post: "          , post);
        input("enter rang: "          , rang);
    }
 
    std::string name;
    std::string sname;
    std::string tname;
    std::string scienseD;
    std::string post;
    std::string rang;
};
 
 
template<size_t N> inline void genDB(person(&arr)[N]);
template<size_t N> inline void genmanDB(person(&arr)[N]);
template<size_t N> inline void loadDB(person(&arr)[N]);
template<size_t N> inline void saveDB(const person(&arr)[N]);
template<size_t N> inline void cnahgeDB(person(&arr)[N]);
template<size_t N> inline void viewDB(const person(&arr)[N]);
 
int main()
{
    const size_t count = 4;
    person bd[count];
 
    int answer = 0;
    for (;;)
    {
        std::cout << sys() << "what would you like?\n"
            << "1) auto generate database\n"
            << "2) manual generate database\n"
            << "3) load database\n"
            << "4) save database\n"
            << "5) change records\n"
            << "6) exit from this program\n";
 
        input("enter number [1: 5]: ", answer, 1, 6);
 
        switch (answer)
        {
            case 1: genDB(bd);    break;
            case 2: genmanDB(bd); break;
            case 3: loadDB(bd);   break;
            case 4: saveDB(bd);   break;
            case 5: cnahgeDB(bd); break;
            case 6: return 0;
        }
    }
}
 
template<size_t N> inline void viewDB(const person(&bd)[N])
{
    std::cout << sys() << " current content:\n";
    size_t n = 0;
    for (const auto& record : bd)
        ++n, std::cout << n << ") " << record << '\n';
    std::cout << std::endl;
}
 
template<size_t N> inline void genDB(person(&bd)[N])
{
    #define COUNT_(arr) sizeof(arr)/sizeof(arr[0]) - 1
 
    #define INIT_(member) \
            bd[n].member = member##s[random(0, COUNT_(member##s))]
 
    const char*  names[] = { "Pedro" , "Conchita", "Hulion", "Fedora"  , "Bubunt", "Julio"      };
    const char* snames[] = { "Pupkin", "Stewart"  , "Buldog", "Karas"   , "Funker", "Pizza"      };
    const char* tnames[] = { "arab" , "wombat"  , "salat" , "colloquium", "guepard" , "deer"       };
    const char*  posts[] = { "newbie", "junior"  , "middle", "senior"  , "expert", "Straustrup" };
 
    const char* scienseDs[] = { "professor", "big professor", "senior lecturer", "assistant" };
 
    const char* rangs[] = { "hacker", "hardhacker", "stinger",
        "brave-hacker", "digga-hacker", "slacker" };
 
    for (size_t n = 0; n < N; ++n)
        INIT_(name), INIT_(sname), INIT_(tname), INIT_(post), INIT_(scienseD), INIT_(rang);
 
    #undef COUNT_
    #undef INIT_
 
    std::cout << sys() << " generate database...success!\n";
    viewDB(bd);
}
 
template<size_t N> inline void genmanDB(person(&bd)[N])
{
    for (size_t n = 0; n < N; ++n)
        std::cout << n + 1 << ") person:\n",
        bd[n].input(),
        std::cout << "=========================================\n";
}
 
template<size_t N> inline void loadDB(person (&bd)[N] )
{
    std::cout << sys() << " load database... \n";
    std::ifstream infile(filenameBD());
    if (!infile)
        return std::cout << "\nOh dear! Something has gone wrong way!\n\n",
        void();
    for (size_t i = 0; i < N; ++i)
        infile >> bd[i];
    std::cout << " success!\n";
    viewDB(bd);
}
 
template<size_t N> inline void saveDB(const person(&bd)[N])
{
    std::cout << sys() << " save database... ";
    std::ofstream outfile(filenameBD());
    if (!outfile)
        return std::cout << "\nOh dear! Something has gone wrong way!\n\n", 
            void();
    for (size_t i = 0; i < N; ++i)
        outfile << bd[i] << '\n';
    std::cout << " success!\n\n";
}
template<size_t N> inline void cnahgeDB(person(&bd)[N])
{
    using std::swap;
    int f = 0, s = 0;
    std::cout << sys() << "change records...\n";
 
    input("input number of first record: " , f, 0, 0);
    input("input number of second record: ", s, 0, 0);
    swap(bd[f-1], bd[s-1]);
    viewDB(bd);
    std::cout << "\n\n";
}
 Комментарий модератора 

hoogy, ты в очередной раз нарушил правила форума:
П. 5.2. Запрещено использовать нецензурные выражения в любом виде.
1
sourcerer
09.01.2016, 20:58     Структурированные типы данных: смена записей местами
  #19

Не по теме:

hoggy, устал от форума? В бан хочешь?

0
09.01.2016, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2016, 20:58
Помогаю со студенческими работами здесь

структурированные типы данных №3
задача №3 Переставить местами строки матрицы, содержащие ее минимальный и максимальный элемент......

Структурированные типы данных
Любой из структурированных типов (а их в делфи 4: массивы, запписи, множества и файлы)...

структурированные типы данных
есть вот такая вот структура #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstring&gt; using...

Структурированные типы данных
Доброго дня всем! Ребята, есть просьба, помогите мне пожалуйста. Очень вас прошу, кто может. Я буду...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru