Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Exxplozer
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 22:17     Массив структур, таблица, память #1
Здравствуйте, начну с того что не знал как назвать тему, назвал по проблемам.
Дали задание создать Справочник, и организовать его как очередь.
Начал делать как связный список:
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++;
// Увеличить сам массив.
}
И еще один вопрос:
Как увеличивать массив при добавлении элемента или чтении его из файла.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 22:17     Массив структур, таблица, память
Посмотрите здесь:

Массив структур, сохранение начала каждой из структур C++
C++ описать структуру, создать класс, в котором описать 3 поля: два простых типа и массив структур. Создать в классе 4 функции работы с массивом структур
C++ Дин. память и таблица NxN
C++ Дан двумерный целочисленный массив.Память выделить динамически, заполнить случайными числами. Вывести массив в матричной форме. Вычислить количество э
Динамический массив структур - ошибка "попытка чтения или записи в защищенную память" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:41     Массив структур, таблица, память #2
Exxplozer, а почему возникли проблемы

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

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



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

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

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

Сортировать надо по полю ФИО.
А на счет ключа для списка не совсем понял.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:49     Массив структур, таблица, память #6
Exxplozer, ну я думаю ключом будет ФИО т.к. эти данные должны быть уникальны, сейчас покажу как сортировать.
Exxplozer
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 22:56  [ТС]     Массив структур, таблица, память #7
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, ну я думаю ключом будет ФИО т.к. эти данные должны быть уникальны, сейчас покажу как сортировать.
Можешь еще помочь с созданием пустой таблицы, с STL не когда просто не работал.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 22:57     Массив структур, таблица, память #8
Exxplozer, а что понимается под пустой таблицей?
Exxplozer
0 / 0 / 0
Регистрация: 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;
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 23:08     Массив структур, таблица, память #10
Exxplozer, ну если с STL, то там это уже предусмотрено, а так да, изначальна она будет пустая
Exxplozer
0 / 0 / 0
Регистрация: 18.05.2012
Сообщений: 17
05.04.2013, 23:15  [ТС]     Массив структур, таблица, память #11
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Exxplozer, ну если с STL, то там это уже предусмотрено, а так да, изначальна она будет пустая
Так поможешь справится с задачей?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 23:22     Массив структур, таблица, память #12
Exxplozer, почти дописал

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

Добавлено через 2 минуты
Exxplozer, кстати, там не сказано, как должен выглядеть диалог с пользователем, через меню или нет?
Да, меню с выбором функций. Функции самые обычный, добавление, удаление, чтение и запись в файл
и тп))
yoghurt92
373 / 344 / 22
Регистрация: 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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 23:43     Массив структур, таблица, память
Еще ссылки по теме:

Ввести массив структур; рассортировать массив в алфавитном порядке C++
C++ Блочная сортировка структур (Отсортировать массив структур по фамилии)
C++ Массив и память. Как создать динамический массив?

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

Или воспользуйтесь поиском по форуму:
Exxplozer
0 / 0 / 0
Регистрация: 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);
}
Спасибо))) Буду от этого отталкиваться дальше))
Yandex
Объявления
05.04.2013, 23:43     Массив структур, таблица, память
Ответ Создать тему
Опции темы

Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru