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

Можно лм так работать со списками и указателями?

13.10.2017, 04:06. Просмотров 99. Ответов 1
Метки нет (Все метки)

Задание: Реализовать ведение списка забронированных и списка купленных билетов в кинозале кинотеатра. Купленный билет содержит следующие сведения: номер ряда, номер места. Забронированный билет – номер ряда, номер места, фамилию бронирующего. Использовать односвязный список.

Как задумал программу: Есть структура в которой описываются данные сеанса, такие как количество рядов в зале и количество мест в ряду из этой же структуры идет указатель на первый элемент списка, это список рядов. в структуре которая описывает ряд идет указатель на следующий ряд и указатель на первое место ряда. функцией "create_row" я создаю список рядов, функцией "create_place" я создаю места в рядах. Потом будут добавлены другие функции, такие как: Добавить место, добавить ряд, найти место, забронировать, купить, вернуть билет и т.д

Суть вопроса: в функции "bron" я использую указатель полученный из функции "find" и при попытке его использвать выдает ошибку "Ошибка C2040 Place: "place *" отличается по уровням косвенного обращения от "int".

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
struct data_person;
struct row;
struct place;
place* create_place(int max_place);
struct row
{
    int row_number;
    place* first_place;
    row* next_row;
};
struct place
{
    data_person *Person;
    int place_number;
    place *next_place;
    int check = 0;
};
struct data_person
{
    string first_name;
    string second_name;
};
struct Hall
{
    int max_row;
    int max_place;
    row *first_row;
};
Hall add_row_after(Hall &hall,int a)
{
    row *test=hall.first_row;
    for (int i = 0; i <= a; i++)
    {
        test = test->next_row;
    }
    row *next=test->next_row;
    row* now = new row;
    now->row_number = a + 1;
    test->next_row = now;
    now->next_row = next;
    hall.max_row++;
    return hall;
}
place* find(Hall hall,int Row, int Place)
{
    row *first = hall.first_row;
    for (int i = 1; i <= Row&&first!=NULL; i++)
    {
        first = first->next_row;
    }
    place *first_place = first->first_place;
    for (size_t i = 1; i <= Place&&first_place!=NULL; i++)
    {
        first_place = first_place->next_place;
    }
    return first_place;
}
Hall bron(Hall hall)
{
    int Row;
    int Place;
    string first_name;
    string second_name;
    cout << "Введите ряд: ";
    cin >> Row;
    cout << "Введите место: ";
    cin >> Place;
    cout << "Введите имя: ";
    cin >> first_name;
    cout << "Введите фамилию: ";
    cin >> second_name;
    place *Place = find(hall, Row, Place);
    return hall;
}
row* create_row(Hall a)
{
    a.first_row = new row;
    a.first_row->row_number = a.max_row;
    a.first_row->first_place = create_place(a.max_place);
    row * test;
    for (int i = a.max_row-1; i >=0; i--)
    {
        row *now = new row;
        now->row_number = i;
        now->first_place = create_place(a.max_place);
        test = a.first_row;
        a.first_row = now;
        now->next_row = test;
 
    }
    return a.first_row;
}
place* create_place(int max_place)
{
    place *begin = new place;
    begin->place_number = max_place;
    place *test;
    for (int i = max_place-1; i >=0; i--)
    {
        place* now = new place;
        now->place_number = i;
        test = begin;
        begin = now;
        now->next_place = test;
    }
    return begin;
}
int main()
{
    Hall hall;
    cin >> hall.max_place;
    cin >> hall.max_row;
    hall.first_row = create_row(hall);
    hall=add_row_after(hall, 1);
    system("pause");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2017, 04:06
Ответы с готовыми решениями:

Как работать с указателями?
//Программа сортирует строки динамической матрицы по их сумме (от меншего к...

Что не так с этими указателями?
Всем привет, прошу помощи разобраться в коде. Недавно начал изучать C++ по...

Что не так при работе с указателями?
Здравствуйте! Начинаю изучать работу с указателями. #include &lt;iostream&gt; ...

Работа с указателями: подскажите что я не так делаю
Добрый день Подскажите пожалуйста что в этой программе не так #include...

Как работать с указателями и как работать с ссылками
Я в книге дочитал до темы указатели и ссылки, не понимаю как работать с...

1
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
13.10.2017, 10:42 2
Цитата Сообщение от GreedyElectron Посмотреть сообщение
C++
1
2
3
4
for (int i = 1; i <= Row&&first!=NULL; i++)
* * {
* * * * first = first->next_row;
* * }
Искать пока i < Row и first не превратился в тыкву.
Цитата Сообщение от GreedyElectron Посмотреть сообщение
C++
1
2
3
4
for (size_t i = 1; i <= Place&&first_place!=NULL; i++)
* * {
* * * * first_place = first_place->next_place;
* * }
Та же проблема.
В итоге либо ещё внутри функции получаем разыменование нулевого указателя, либо возвращаем его и разыменовываем уже внутри bron.
Пройдитесь дебагером и посмотрите сами что в переменных хранится.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2017, 10:42

Можно ли сделать так чтобы к классу можно было бы одновременно обращаться как к массиву
подскажите можно ли сделать так чтобы к классу можно было бы одновременно...

Можно ли работать одновременно с двумя списками?
Можно ли работать одновременно с двумя списками? Ответ объяснить

Как можно сделать так, чтобы в PictureBox, можно было работать по экранным координатам(т.е. по пикселям)?
Как можно сделать так, чтобы в PictureBox, можно было работать по экранным...


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

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

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