Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
#1

Массив структур, таблица, память - C++

05.04.2013, 22:17. Просмотров 545. Ответов 14
Метки нет (Все метки)

Здравствуйте, начну с того что не знал как назвать тему, назвал по проблемам.
Дали задание создать Справочник, и организовать его как очередь.
Начал делать как связный список:
C++
1
2
3
4
5
struct point
{
    // информация (переменные справочника)
    point *next;
} *head, *last;
Сделал, все отлично работает. Но когда пришлось добавлять такие функции как:
  1. Вывод записи таблицы с заданным индексом на экран;
  2. Отсортировать выборкой при чем (при сортировке работать с очередью как с обычным массивом)
Я не решил что лучше сделать массив из структур point, но теперь у меня возникли такие проблемы:
  1. Не знаю как реализовать функцию: создание пустой таблицы.
  2. Происходит выход за пределы этого массива структур.
Вот часть кода которая не работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main ()
{
    // сайз = 0 для попытки создать пустую таблицу.
    int size = 0;
    // ссылка на сайз  для увеличения размера массива к примеру при добавлении новой записи
    int &p = size;
    int a;
    point * qwer;
    qwer = new point[size];
 
        //...
    delete []qwer;
    return 0;
}
 
void CreateEmptyTable(int &p)
{
// Как уже писал выше не знаю как реализовать
// Пытался подобным способом
p++;
// Увеличить сам массив.
}
И еще один вопрос:
Как увеличивать массив при добавлении элемента или чтении его из файла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 22:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массив структур, таблица, память (C++):

Почему не очищает память, выделенную под массив структур
#include <cstdlib> #include <iostream> using namespace std; const int...

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

Блочная сортировка структур (Отсортировать массив структур по фамилии)
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно...

Массив структур, сохранение начала каждой из структур
Я создал такую структуру class Lancuch { public: char cos; Lancuch *...

Память для динамического массива структур
Есть функция Insert, в которой я даю параметрами старый массив объектов...

Дин. память и таблица NxN
Дана целочисленная таблица NxN, определить номер столбца с минимальным числом...

14
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:41 #2
Exxplozer, а почему возникли проблемы

Цитата Сообщение от Exxplozer Посмотреть сообщение
Сделал, все отлично работает. Но когда пришлось добавлять такие функции как:
Вывод записи таблицы с заданным индексом на экран;
Отсортировать выборкой при чем (при сортировке работать с очередью как с обычным массивом)
давайте помогу)

Добавлено через 2 минуты
Exxplozer, и для сведения, очередь - частный случай списка реализующий политику FIFO
0
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 22:44  [ТС] #3
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, а почему возникли проблемы



давайте помогу)
Спасибо, а проблемы возникли потому что сделал связный список и организовал как очередь, но ведь там нету id элемента в очереди как в массиве, либо я о чем-то не знаю. Так же не знаю как сортировать связный список.

Добавлено через 2 минуты
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer
Exxplozer, и для сведения, очередь - частный случай списка реализующий политику FIFO
Да я понимаю, с этим проблем нету, опять же повторюсь проблема в сортировке и выводу элемента по id. В связи с эти и решил делать через массив структур, где заблудился))
0
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:46 #4
Exxplozer, ну тут 2 варианта, написать самому список, либо воспользоваться STL, какие данные должны храниться в Справочнике? Что будет у нас в качестве ключа для поиска?

Добавлено через 55 секунд
Exxplozer, не не, массив не надо, массив ограничен, список - нет.
0
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 22:48  [ТС] #5
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, ну тут 2 варианта, написать самому список, либо воспользоваться STL, какие данные должны храниться в Справочнике? Что будет у нас в качестве ключа для поиска?
1) фио
2) дом.тел
3) моб.тел
4) дата рождения
5) пол

Сортировать надо по полю ФИО.
А на счет ключа для списка не совсем понял.
0
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:49 #6
Exxplozer, ну я думаю ключом будет ФИО т.к. эти данные должны быть уникальны, сейчас покажу как сортировать.
0
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 22:56  [ТС] #7
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, ну я думаю ключом будет ФИО т.к. эти данные должны быть уникальны, сейчас покажу как сортировать.
Можешь еще помочь с созданием пустой таблицы, с STL не когда просто не работал.
0
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:57 #8
Exxplozer, а что понимается под пустой таблицей?
0
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 23:04  [ТС] #9
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, а что понимается под пустой таблицей?
Собственно я сам не знаю, просто в задании так и написана что первая функция должна создавать пустую таблицу.
Я делал вот так:
C++
1
2
3
4
5
6
void CreateEmptyTable(void)
{
    point *tmp;
    tmp = new point();
    tmp->next = NULL;
}
0
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 23:08 #10
Exxplozer, ну если с STL, то там это уже предусмотрено, а так да, изначальна она будет пустая
0
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 23:15  [ТС] #11
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, ну если с STL, то там это уже предусмотрено, а так да, изначальна она будет пустая
Так поможешь справится с задачей?
0
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 23:22 #12
Exxplozer, почти дописал

Добавлено через 2 минуты
Exxplozer, кстати, там не сказано, как должен выглядеть диалог с пользователем, через меню или нет?
0
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 23:24  [ТС] #13
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, почти дописал

Добавлено через 2 минуты
Exxplozer, кстати, там не сказано, как должен выглядеть диалог с пользователем, через меню или нет?
Да, меню с выбором функций. Функции самые обычный, добавление, удаление, чтение и запись в файл
и тп))
0
yoghurt92
375 / 346 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 23:40 #14
Exxplozer, как-то так

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
#include <iostream>
#include <string>
#include <deque>
#include <iterator>
#include <algorithm>
using namespace std;
 
struct Directory{
    string FIO,
           data_of_birth,
           sex;
 
    void input(){
        cin.ignore();
        cout << "Enter FIO: ";
            getline(cin, FIO, '\n');
        cout << "Enter data_of_birth: ";
            getline(cin, data_of_birth, '\n');
        cout << "Enter sex: ";
            getline(cin, sex, '\n');
    }
 
    void output(){
        cout << "\nEnter FIO: " << FIO << 
        "\nEnter data_of_birth: " << data_of_birth << 
        "\nEnter sex: " << sex << "\n";
    }
 
    string get_FIO(){
        return FIO;
    }
};
 
void addToQueue(deque<Directory> &_coll){
    Directory Universal;
    Universal.input();
    _coll.push_back(Universal);
}
 
void popToQueue(deque<Directory> &_coll){
    _coll.pop_front();
}
 
bool predikat(Directory op1, Directory op2){
    return op1.get_FIO() < op2.get_FIO();
}
 
void sort_by_name(deque<Directory> &_coll){
    sort(_coll.begin(), _coll.end(), predikat);
}
 
void print(Directory op){
    op.output();
}
 
void showToQueue(deque<Directory> &_coll){
    for_each(_coll.begin(), _coll.end(), print);
}
 
bool find_FIO(Directory op, string _FIO){
    return op.get_FIO() == _FIO;
}
 
bool find_pred(Directory op){
    string _FIO;
 
    cout << "Enter FIO: ";
        cin.ignore();
        getline(cin, _FIO, '\n');
 
    return find_FIO(op, _FIO);
}
 
void findInQueue(deque<Directory> &_coll){
    deque<Directory>::iterator pos;
    pos = find_if(_coll.begin(), _coll.end(), find_pred);
 
    if(pos != _coll.end()){
        cout << "Found:";
        pos -> output();
    }
    else
        cout << "Not Found!\n";
}
 
void instructions();
void menu(deque<Directory> &);
 
int main()
{
    deque<Directory> coll;
 
    menu(coll);
 
    cout << "\n\n";
    return 0;
}  
 
void instructions()
{
    cout << "Select: " <<
        "\n1 - Add to guide" <<
        "\n2 - Remove from the directory" <<
        "\n3 - Sort directory" <<
        "\n4 - Found in the directory" <<
        "\n5 - Display the contents of the directory"
        "\n6 - Exit.\n";
}
 
void menu(deque<Directory> &_coll)
{
    int punkt_menu;
 
    instructions();
 
    do{
        cout << "\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    cout << "Enter data:\n";
                    addToQueue(_coll);
                    break;
                case 2:
                    cout << "Removed from the end.";
                    popToQueue(_coll);
                    break;
                case 3:
                    cout << "directory is sorted.\n";
                    sort_by_name(_coll);
                    break;
                case 4:
                    findInQueue(_coll);
                    break;
                case 5:
                    cout << "Display the contents of the directory: ";
                    showToQueue(_coll);
                    break;
            }
 
    }while(punkt_menu != 6);
}
2
Exxplozer
0 / 0 / 1
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 23:43  [ТС] #15
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, как-то так
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <string>
#include <deque>
#include <iterator>
#include <algorithm>
using namespace std;
 
struct Directory{
    string FIO,
           data_of_birth,
           sex;
 
    void input(){
        cin.ignore();
        cout << "Enter FIO: ";
            getline(cin, FIO, '\n');
        cout << "Enter data_of_birth: ";
            getline(cin, data_of_birth, '\n');
        cout << "Enter sex: ";
            getline(cin, sex, '\n');
    }
 
    void output(){
        cout << "\nEnter FIO: " << FIO << 
        "\nEnter data_of_birth: " << data_of_birth << 
        "\nEnter sex: " << sex << "\n";
    }
 
    string get_FIO(){
        return FIO;
    }
};
 
void addToQueue(deque<Directory> &_coll){
    Directory Universal;
    Universal.input();
    _coll.push_back(Universal);
}
 
void popToQueue(deque<Directory> &_coll){
    _coll.pop_front();
}
 
bool predikat(Directory op1, Directory op2){
    return op1.get_FIO() < op2.get_FIO();
}
 
void sort_by_name(deque<Directory> &_coll){
    sort(_coll.begin(), _coll.end(), predikat);
}
 
void print(Directory op){
    op.output();
}
 
void showToQueue(deque<Directory> &_coll){
    for_each(_coll.begin(), _coll.end(), print);
}
 
bool find_FIO(Directory op, string _FIO){
    return op.get_FIO() == _FIO;
}
 
bool find_pred(Directory op){
    string _FIO;
 
    cout << "Enter FIO: ";
        cin.ignore();
        getline(cin, _FIO, '\n');
 
    return find_FIO(op, _FIO);
}
 
void findInQueue(deque<Directory> &_coll){
    deque<Directory>::iterator pos;
    pos = find_if(_coll.begin(), _coll.end(), find_pred);
 
    if(pos != _coll.end()){
        cout << "Found:";
        pos -> output();
    }
    else
        cout << "Not Found!\n";
}
 
void instructions();
void menu(deque<Directory> &);
 
int main()
{
    deque<Directory> coll;
 
    menu(coll);
 
    cout << "\n\n";
    return 0;
}  
 
void instructions()
{
    cout << "Select: " <<
        "\n1 - Add to guide" <<
        "\n2 - Remove from the directory" <<
        "\n3 - Sort directory" <<
        "\n4 - Found in the directory" <<
        "\n5 - Display the contents of the directory"
        "\n6 - Exit.\n";
}
 
void menu(deque<Directory> &_coll)
{
    int punkt_menu;
 
    instructions();
 
    do{
        cout << "\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    cout << "Enter data:\n";
                    addToQueue(_coll);
                    break;
                case 2:
                    cout << "Removed from the end.";
                    popToQueue(_coll);
                    break;
                case 3:
                    cout << "directory is sorted.\n";
                    sort_by_name(_coll);
                    break;
                case 4:
                    findInQueue(_coll);
                    break;
                case 5:
                    cout << "Display the contents of the directory: ";
                    showToQueue(_coll);
                    break;
            }
 
    }while(punkt_menu != 6);
}
Спасибо))) Буду от этого отталкиваться дальше))
0
05.04.2013, 23:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 23:43
Привет! Вот еще темы с решениями:

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю?
Ребята подскажите как объявить динамический массив структур, и как выглядит...

Массив структур в массиве структур
Всем добрый день. Делаю менюшку для управления и терзаю Arduino IDE слегка...

Ввести массив структур; рассортировать массив в алфавитном порядке
Пришел из армии восстановился в универе и тут сразу курсавай. Помогите ...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив?
Допустим есть структура struct Base { int a; int b; int...


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

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

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