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

Реализовать поиск и сортировку по заданному полю в списке объектов пользовательского типа

12.01.2017, 16:18. Просмотров 392. Ответов 2
Метки нет (Все метки)

Доброго времени суток. Дали задачу "Запись о багаже пассажира содержит: фамилия, номер рейса, дата время вылета, пункт назначения, кол-во мест багажа, суммарный вес багажа. Написать программу которая выполняет поиск и сортировку по дате вылета, по пункту назначения, найти всех пассажиров у которых масса багажа выше допустимого".

Я в списках новичок и потому проблемы возникли еще в самом создании...всякие сортировки поиски пока не беру
К примеру фамилии и пункт назначения выводит только первую букву, а при попытке присвоить массив из фамилий и городов к типу string происходит ошибка при создании списка и говорит, что должен быть именно тип char.

Или при выводе даты начинает вывод какие то огромные числа хотя все сделано по правилам.

Я уже гуглил все что можно, искал похожие программы, но полезного ничего не нашел, потому прошу помощи)))
И еще задача именно со списками а не массивами)
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
#include <string>
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;
 
struct date//даты
{
    int day;//день
    int month;//месяц
    int hour;//час
    int minute;//минута
};
 
 
struct route
{
    int number;//номер рейса
    char destination;//пункт назначение
    date time;
};
 
struct baggage
{
    char surname;//имя пассажира
    int amountBag;//количество мест багажа
    int sumbag;//суммарный вес багажа
    route pass;
};
 
struct Passenger//информация о багаже
{
    baggage info;
    Passenger* next;
};
 
void print(Passenger* head)//вывод списка на экран
{
 
    Passenger* temp = head;
    while(temp)
    {
        cout<<temp->info.surname<<"   \t";
        cout<<temp->info.pass.number<<"   \t\t";
        cout<<temp->info.pass.destination<<"   \t\t";
        cout<<temp->info.amountBag<<"                       ";
        cout<<temp->info.sumbag<<"   \t";
        cout<<temp->info.pass.time.day<<".";
        cout<<temp->info.pass.time.month<<"   ";
        cout<<temp->info.pass.time.hour<<":";
        cout<<temp->info.pass.time.minute<<"   "<<endl;
        
        temp = temp->next;
    }
}
 
void SetEl(Passenger* &head, Passenger* &tail, baggage x) //создание списка
{
    Passenger* c = new Passenger;
    c->info.amountBag = x.amountBag;
    c->info.pass.number = x.pass.number;
    c->info.pass.destination = x.pass.destination;
    c->info.pass.time.day= x.pass.time.day;
    c->info.sumbag = x.sumbag;
    c->info.surname = x.surname;
    c->next = 0;
    if(head)
    {
        tail->next = c;
        tail = c;
    }
    else
    {
        head = c;
        tail = c;
    }
 
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(0));//рандомайзер
    Passenger* head = 0;
    Passenger* tail = 0;
    baggage c;
 
    char *surnames[40] = {"Ivanov", "Petrov", "Sidorov", "Arshavin", "Belova", "Antonova", "Muldashev", "Safina", "Struzhkina", "Levina","Ahmetova", "Eroshkin", "Vyihin", "Rashitov", "Semenov", "Lisina", "Karpova", "Stoyanov", "Evdokimova", "Shestov","Andreev", "Kozlov", "Kartoshkin", "Chubais", "Ulianova", "Larin", "Dementiev", "Nemtsova", "Dvinyatina", "Pulkin","Boyarskaya", "Stupka", "Shepkin", "Mikhailov", "Belogorodov", "Zhukov", "Maltsev", "Elkin", "Philatov", "Yarov"};
    char *cities[20] = {"Moscow", "Macao", "Paris", "Berlin", "Tokyo","Rome", "Nice", "Washington", "New-York", "Beijing","Cayro", "Prague", "London", "Buenos-Aires", "Mexico","Kiev", "Bratislava", "Madrid", "Sydney", "Rio-de-Janeiro"};
    //Массивы из фамилий и городов для случайного выбора
 
    cout<<"\tСписок пассажиров\n\n";
    cout << "Фамилия\t" << "Номер рейса\t" << "Пункт\t" << "Кол-во мест багажа\t" << "Масса багажа\t" << "Дата\t" << endl;
    cout << "====================================================================================================" << endl;
    for (int i=0; i<3; i++)
    {
    c.amountBag = rand()%10;
    c.pass.destination = (*cities[rand()%20]);//
    c.pass.number = rand()%1000;
    c.pass.time.day = rand()%28;
    c.pass.time.minute = rand()%59;
    c.pass.time.month = rand()%12;
    c.pass.time.hour = rand()%23;
    c.sumbag = rand()%25;
    c.surname = (*surnames[rand() % 40]);
    SetEl(head,tail,c);//создаем список
    print(head);//выводим на экран
    }
    _getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2017, 16:18
Ответы с готовыми решениями:

Реализовать поиск по заданному полю в списке объектов пользовательского типа
Вечер добрый. Помогите с написанием кода Задание в dev c++ Описать структуру, содержащую...

Реализовать поиск и сортировку по заданному полю в массиве объектов пользовательского типа (структура Train)
Описать структуру с именем TRAIN, содержащую следующие поля: NAZV - название пункта назначения,...

Реализовать сортировку объектов пользовательского типа по заданному полю
Помогите организовать сортировку по полю класса id, уже голова пухнет void...

Реализовать сортировку массива объектов пользовательского типа по заданному полю (структуры)
Есть перечень студентов, прибывших в лагерь по форме: ФИО, факультет, номер отряда. Упорядочить...

2
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
12.01.2017, 16:54 2
Готовые списки из STL (list) использовать нельзя?
0
123 / 92 / 39
Регистрация: 04.10.2011
Сообщений: 326
12.01.2017, 17:27 3
Вы извините конечно, но вам бы Страуструпа почитать. Этот код конечно рабочий, но если бы он был лошадью я бы его застрелил...

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
#include <string>
#include <iostream>
#include <ctime>
 
using namespace std;
 
struct date//даты
{
    int day;//день
    int month;//месяц
    int hour;//час
    int minute;//минута
};
 
 
struct route {
    int number;//номер рейса
    char * destination;//пункт назначение
    date time;
};
 
struct baggage {
    char * surname;//имя пассажира
    int amountBag;//количество мест багажа
    int sumbag;//суммарный вес багажа
    route pass;
};
 
struct Passenger//информация о багаже
{
    baggage info;
    Passenger *next;
};
 
void print(Passenger *head)//вывод списка на экран
{
 
    Passenger *temp = head;
    while (temp) {
        cout << temp->info.surname << "   \t";
        cout << temp->info.pass.number << "   \t\t";
        cout << temp->info.pass.destination << "   \t\t";
        cout << temp->info.amountBag << "                       ";
        cout << temp->info.sumbag << "   \t";
        cout << temp->info.pass.time.day << ".";
        cout << temp->info.pass.time.month << "   ";
        cout << temp->info.pass.time.hour << ":";
        cout << temp->info.pass.time.minute << "   " << endl;
 
        temp = temp->next;
    }
}
 
void SetEl(Passenger *&head, Passenger *&tail, baggage x) //создание списка
{
    Passenger *c = new Passenger;
 
    c->info.amountBag = x.amountBag;
    c->info.pass.number = x.pass.number;
    c->info.pass.destination = x.pass.destination;
    c->info.pass.time.day = x.pass.time.day;
    c->info.pass.time.month = x.pass.time.month;
    c->info.pass.time.hour = x.pass.time.hour;
    c->info.pass.time.minute = x.pass.time.minute;
    c->info.sumbag = x.sumbag;
    c->info.surname = x.surname;
    c->next = 0;
 
    if (head) {
        tail->next = c;
        tail = c;
    } else {
        head = c;
        tail = c;
    }
 
}
 
int main() {
    setlocale(LC_ALL, "rus");
    srand(time(0));//рандомайзер
    Passenger *head = 0;
    Passenger *tail = 0;
    baggage c;
 
    char *surnames[40] = {"Ivanov", "Petrov", "Sidorov", "Arshavin", "Belova", "Antonova", "Muldashev", "Safina",
                          "Struzhkina", "Levina", "Ahmetova", "Eroshkin", "Vyihin", "Rashitov", "Semenov", "Lisina",
                          "Karpova", "Stoyanov", "Evdokimova", "Shestov", "Andreev", "Kozlov", "Kartoshkin", "Chubais",
                          "Ulianova", "Larin", "Dementiev", "Nemtsova", "Dvinyatina", "Pulkin", "Boyarskaya", "Stupka",
                          "Shepkin", "Mikhailov", "Belogorodov", "Zhukov", "Maltsev", "Elkin", "Philatov", "Yarov"};
 
    char *cities[20] = {"Moscow", "Macao", "Paris", "Berlin", "Tokyo", "Rome", "Nice", "Washington", "New-York",
                        "Beijing", "Cayro", "Prague", "London", "Buenos-Aires", "Mexico", "Kiev", "Bratislava",
                        "Madrid", "Sydney", "Rio-de-Janeiro"};
 
    //Массивы из фамилий и городов для случайного выбора
 
    cout << "\tСписок пассажиров\n\n";
    cout << "Фамилия\t" << "Номер рейса\t" << "Пункт\t" << "Кол-во мест багажа\t" << "Масса багажа\t" << "Дата\t"
         << endl;
    cout << "===================================================================================================="
         << endl;
 
    for (int i = 0; i < 3; i++) {
        c.amountBag         = rand() % 10;
        c.pass.destination  = cities[rand() % 20];//
        c.pass.number       = rand() % 1000;
        c.pass.time.day     = rand() % 28;
        c.pass.time.minute  = rand() % 59;
        c.pass.time.month   = rand() % 12;
        c.pass.time.hour    = rand() % 23;
        c.sumbag            = rand() % 25;
        c.surname           = surnames[rand() % 40];
        SetEl(head, tail, c);//создаем список
        print(head);//выводим на экран
    }
 
    return 0;
}
И самое главное у вас утечет память т.к. память из под списка Passenger не освобождается
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2017, 17:27

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

Реализовать поиск по заданному полю в списке объектов пользовательского типа (структура "Телефонная книга")
Дано задание, готово все, кроме последнего пункта, подскажите пожалуйста как реализовать его...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа
ОСНОВЫ ОБРАБОТКИ СТРУКТУР С клавиатуры ввести последовательность записей, содержащих информацию...

Реализовать поиск в массиве объектов пользовательского типа по заданному полю
Создать типизированный файл, элементами которого являются сведения об автомобилях: марка,...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа
Все сделал, в своей задачи, осталось только вот это, помогите. Вывод на экран информацию о людях,...


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

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

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