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

Создать новый список с копией элементов исходного списка, у которых совпадает издатель

23.01.2021, 10:52. Показов 1183. Ответов 3

Author24 — интернет-сервис помощи студентам
Добрый день, помогите пожалуйста модернизировать функцию так чтобы был сформирован новый список с копией элементов исходного списка, у которых совпадает издатель.

Вот как выглядит структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct Journal
{
    int index; // Номер в справочнике
    string name; // Название книги
    int counts; // Тираж
    int period; // срок подписки
    int time; // период выхода
    int price; // цена
    string publisher; // издатель
    string priviliges; // льготы
};
struct List_elem //Список.
{
    Journal jrnl;
    List_elem* next;
};
C++
1
2
List_elem* begin = nullptr;
List_elem* end = nullptr;
Функция которую надо модернизировать
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
void showAllByPublisher(List_elem* begin)
{
    string Letter;
 
    cout << "Input Search Name:" << endl;
    cin >> Letter;
 
    List_elem* ptr = begin;
 
    while (ptr != nullptr)
    {
        if (ptr->jrnl.publisher == Letter)
        {
            cout << " _____________________________" << endl;
            cout << "|ID:" << ptr->jrnl.index << endl;
            cout << "|Name:" << ptr->jrnl.name << endl;
            cout << "|Counts:" << ptr->jrnl.counts << endl;
            cout << "|Period:" << ptr->jrnl.period << endl;
            cout << "|Time:" << ptr->jrnl.time << endl;
            cout << "|Price:" << ptr->jrnl.price << "$" << endl;
            cout << "|Publisher:" << ptr->jrnl.publisher << endl;
            cout << "|Priviliges:" << ptr->jrnl.priviliges << endl;
            cout << "|____________________________" << endl;
            cout << "\n";
        }
 
        ptr = ptr->next;
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2021, 10:52
Ответы с готовыми решениями:

Создать новый список из отличных друг от друга элементов исходного списка
Помогите, плиз. В чём может быть ошибка? domains n=integer* predicates zad1(n,n) ...

Сформировать новый список путем изменения порядка следования элементов на противоположный относительно исходного списка
Написать программу которая формирует новый список путем изменения порядка следования элементов на...

Создать список L2, являющийся копией списка L1, начинающегося с данного узла
Написать программу, которая создает список L2, являющийся копией списка L1, начинающегося с данного...

Создать список L2, являющийся копией списка L1, начинающегося с данного узла
Создать список L2, являющийся копией списка L1, начинающегося с данного узла. С++

3
7 / 7 / 1
Регистрация: 03.03.2020
Сообщений: 87
23.01.2021, 17:06  [ТС] 2
Я вроде бы разобрался но у меня падает ошибка в алгоритме "Вызвано исключение: нарушение доступа для чтения.
**__that** было nullptr." Не могу понять как её пофиксить, отметил строку где падает строчкой, помогите

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
void showAllByPublisher(List_elem* begin)
{
    string Letter;
 
    cout << "Input Search Name:" << endl;
    cin >> Letter;
 
    List_elem* ptr = begin;
 
    
    
 
    while (ptr != nullptr)
    {
        if (ptr->jrnl.publisher == Letter)
        {
            cout << "Origin elem" << endl;
            cout << " _____________________________" << endl;
            cout << "|ID:" << ptr->jrnl.index << endl;
            cout << "|Name:" << ptr->jrnl.name << endl;
            cout << "|Counts:" << ptr->jrnl.counts << endl;
            cout << "|Period:" << ptr->jrnl.period << endl;
            cout << "|Time:" << ptr->jrnl.time << endl;
            cout << "|Price:" << ptr->jrnl.price << "$" << endl;
            cout << "|Publisher:" << ptr->jrnl.publisher << endl;
            cout << "|Priviliges:" << ptr->jrnl.priviliges << endl;
            cout << "|____________________________" << endl;
            cout << "\n";
        }
 
        ptr = ptr->next;
        // new
        List_elem* newListBegin = nullptr;
        List_elem* newListEnd = nullptr;
 
        if (newListBegin != nullptr) {
            newListEnd->next = new List_elem(*ptr);
            newListEnd = newListEnd->next;
            
        }
        
        else {
            newListBegin = newListEnd = new List_elem(*ptr); <-- //Вот тут падает ошибка
        }
        //
        if (newListEnd->jrnl.publisher == Letter)
        {
            cout << "Copied elem" << endl;
            cout << " _____________________________" << endl;
            cout << "|ID:" << newListEnd->jrnl.index << endl;
            cout << "|Name:" << newListEnd->jrnl.name << endl;
            cout << "|Counts:" << newListEnd->jrnl.counts << endl;
            cout << "|Period:" << newListEnd->jrnl.period << endl;
            cout << "|Time:" << newListEnd->jrnl.time << endl;
            cout << "|Price:" << newListEnd->jrnl.price << "$" << endl;
            cout << "|Publisher:" << newListEnd->jrnl.publisher << endl;
            cout << "|Priviliges:" << newListEnd->jrnl.priviliges << endl;
            cout << "|____________________________" << endl;
            cout << "\n";
        }
    }
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2021, 18:24 3
Лучший ответ Сообщение было отмечено KoreanLamer как решение

Решение

Цитата Сообщение от KoreanLamer Посмотреть сообщение
Я вроде бы разобрался но у меня падает ошибка в алгоритме "Вызвано исключение: нарушение доступа для чтения.
**__that** было nullptr." Не могу понять как её пофиксить, отметил строку где падает строчкой, помогите
Цитата Сообщение от KoreanLamer Посмотреть сообщение
ptr = ptr->next;
        // new
        List_elem* newListBegin = nullptr;
        List_elem* newListEnd = nullptr;
if (newListBegin != nullptr) {
            newListEnd->next = new List_elem(*ptr);
После того, как ты сделал ptr = ptr->next, надо проверять, что ptr не равен null, прежде чем к нему обращаться

Добавлено через 49 секунд
Перенеси ptr = ptr->next в конец цикла

Добавлено через 4 минуты
Интересно, а как ты заполняешь первый список? По-идее, у тебя должна быть отдельная функция для добавления элемента в список.
1
7 / 7 / 1
Регистрация: 03.03.2020
Сообщений: 87
23.01.2021, 19:48  [ТС] 4
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Интересно, а как ты заполняешь первый список?
Это только одна функция из целой программы, у меня есть функция как создания списка так и загрузки из файла
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Перенеси ptr = ptr->next в конец цикла
Спасибо большое слишком невнимательный
0
23.01.2021, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2021, 19:48
Помогаю со студенческими работами здесь

Создать список L2, являющийся копией списка L1, начинающегося с данного узла
Написать функцию, которая создает список L2, являющийся копией списка L1, начинающегося с данного...

Создать список, состоящий из положительных элементов исходного списка
Помогите пожалуйста. Разработать рекурсивную(-ные) функцию(ии) для работы со списками: создать...

Для исходного сложного числового списка, построить список, состоящий из элементов исходного списка, отрицательные числа в котором заменены 0
Для исходного сложного числового списка, построить список, состоящий из элементов исходного списка,...

Функция: создать список L2, являющийся копией списка L1, начинающийся с заданного пользователем узла
Написать функцию, которая создает список L2, являющийся копией списка L1, начинающегося с данного...

Создать новый массив из тех элементов исходного, индексы которых являются степенями двойки
Дан массив натуральных чисел a1,a2, ...., an. Создать новый массив из тех элементов, индексы...

Создать список, в котором каждый из элементов исходного списка повторяется n раз
Помогите пожалуйста


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

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