Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/48: Рейтинг темы: голосов - 48, средняя оценка - 4.90
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
1

Класс поезд, и вокзал.

24.03.2012, 14:20. Показов 9507. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Помогите пожалуйста с задачей.
Клаcс «ПОЕЗД» coдержит закрытые поля: номер пoезда, название пункта назначения, время отправления и метод вывoда сведений o поезде. Класс «ВОКЗАЛ» cодержит закрытые пoля: название вокзала, массив объектoв класса «ВОКЗАЛ», метод поиска информации о поездах, отправляющихся после введенного с клавиатуры времени и метод вывода информации о поездах, oтправляющихся в заданный пункт назначения. Инфoрмация должна быть отсoртирована по времени oтправления.
Вот что у меня получилось:
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
#include <iostream>
#include <clocale>
#include <cstring>
#include <conio.h>
 
using namespace std;
 
class Train
{
        char punkt[20];// ïóíêò íàçíà÷åíèÿ
        int num;//íîìåð ïîåçäà
        double time;//âðåìÿ îòïðàâêè
public:
        explicit Train (const char *_punkt = "Unknown", int _num = 0, double _time = 0.0, int _kupe = 0, int _plac = 0)
        {
                setPunkt(_punkt);
                setNum(_num);
                setTime(_time);
 
        }
        void setPunkt(const char *_punkt)
        {
                strcpy(punkt, _punkt);
        }
        void setNum(int _num)
        {
                num=_num;
        }
        void setTime (double _time)
        {
                time=_time;
        }
        void printInfo()
        {
                cout << "Ïóíêò íàçà÷åíèÿ: " << punkt << endl
                        << "¹ ïîåçäà: " << num << endl
                        << "Âðåìÿ îòïðàâêè: " << time << endl;
 
        }
};
class mas
{
        Train train[5]; //ìàññèâ ïîåçäîâ
        int size; // êîë-âî ïîåçäîâ
public:
        mas() :
                size()
        {
        }
 
        void addTrain (Train _train)
        {
                if (size < 5)
                        train[size++]=_train;
                else
                        cout << "Error, array is full" << endl;
        }
        void printInfo()
        {
                for(int i = 0; i < size; i++)
                {
                        cout<<i+1<<". ";
                        train[i].printInfo();
                }
        }
}; 
class Vokzal
{
        Vokzal vokzal[5]; //ìàññèâ ïîåçäîâ
        int size2; // êîë-âî ïîåçäîâ
public:
        mas() :
                size2()
        {
        }
 
        void printInfo()
        {
                for(int i = 0; i < size2; i++)
                {
                        cout<<i+1<<". ";
                        vokzal[i].printInfo2();
                }
        }
};
int main()
{
        const int len=5;
        Train train[len] = 
        {
                Train("Kiev", 4, 22.44),
                Train("Zaporizhia", 7, 11.01),
                Train("Moskva", 16, 00.37),
                Train("St-Peterburg", 3, 07.56),
                Train("Doneck", 41, 14.08)
        };
 
        mas ms;
        for (int i = 0; i < len; ++i)
        ms.addTrain(train[i]);
        ms.printInfo();
        const int len=5;
                Train train[len2] = 
        {
                Train("Vokzal-Kiev"),
                Train("Vokzal-Zaporizhia"),
                Train("Vokzal-Moskva"),
                Train("Vokzal-St-Peterburg"),
                Train("Vokzal-Doneck")
        };
        for (int i = 0; i < len; ++i)
        ms.addTVokzal(vokzal[i]);
        ms.printInfo2();
        system("pause");
        return 0;
}
я понимаю что написал все как попало, но я только учусь, исправьте и дополните решение. Заранее спасибо!!!

Добавлено через 3 часа 5 минут
Помогите отсортировать по времени отправления.
Опять попытался что-то исправить...но наверное только хуже...
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
#include <iostream>
#include <clocale>
#include <cstring>
#include <conio.h>
 
using namespace std;
 
class Train
{
        char punkt[20];// ïóíêò íàçíà÷åíèÿ
        int num;//íîìåð ïîåçäà
        double time;//âðåìÿ îòïðàâêè
public:
        explicit Train (const char *_punkt = "Unknown", int _num = 0, double _time = 0.0, int _kupe = 0, int _plac = 0)
        {
                setPunkt(_punkt);
                setNum(_num);
                setTime(_time);
 
        }
        void setPunkt(const char *_punkt)
        {
                strcpy(punkt, _punkt);
        }
        void setNum(int _num)
        {
                num=_num;
        }
        void setTime (double _time)
        {
                time=_time;
        }
        void printInfo()
        {
                cout << "Ïóíêò íàçà÷åíèÿ: " << punkt << endl
                        << "¹ ïîåçäà: " << num << endl
                        << "Âðåìÿ îòïðàâêè: " << time << endl;
 
        }
};
class mas
{
        Train train[5]; //ìàññèâ ïîåçäîâ
        int size; // êîë-âî ïîåçäîâ
public:
        mas() :
                size()
        {
        }
 
        void addTrain (Train _train)
        {
                if (size < 5)
                        train[size++]=_train;
                else
                        cout << "Error, array is full" << endl;
        }
        void printInfo()
        {
                for(int i = 0; i < size; i++)
                {
                        cout<<i+1<<". ";
                        train[i].printInfo();
                }
        }
}; 
int main()
{
        const int len=5;
        int n,n1,n2,n3,n4,n5;
        double t,t2,t3,t4,t5;
        cout<<"Ââåäèòå íîìåð ïåðâîãî ïîåçäà: ";
        cin>>n;
        cout<<"Ââåäèòå âðåìÿ îòïðàâëåíèÿ ïåðâîãî ïîåçäà: ";
        cin>>t;
        cout<<"Ââåäèòå íîìåð âòîðîãî ïîåçäà: ";
        cin>>n2;
        cout<<"Ââåäèòå âðåìÿ îòïðàâëåíèÿ âòîðîãî ïîåçäà: ";
        cin>>t2;
        cout<<"Ââåäèòå íîìåð òðåòüåãî ïîåçäà: ";
        cin>>n3;
        cout<<"Ââåäèòå âðåìÿ îòïðàâëåíèÿ òðåòüåãî ïîåçäà: ";
        cin>>t3;
        cout<<"Ââåäèòå íîìåð ÷åòâåðòîãî ïîåçäà: ";
        cin>>n4;
        cout<<"Ââåäèòå âðåìÿ îòïðàâëåíèÿ ÷åòâåðòîãî ïîåçäà: ";
        cin>>t4;
        cout<<"Ââåäèòå íîìåð ïÿòîãî ïîåçäà: ";
        cin>>n5;
        cout<<"Ââåäèòå âðåìÿ îòïðàâëåíèÿ ïÿòîãî ïîåçäà: ";
        cin>>t5;
        Train train[len] = 
        {
                Train("Kiev", n,t),
                Train("Zaporizhia", n2,t2),
                Train("Moskva", n3,t3),
                Train("St-Peterburg", n4,t4),
                Train("Doneck", n5,t5)
        };
 
        mas ms;
        for (int i = 0; i < len; ++i)
        ms.addTrain(train[i]);
        ms.printInfo();
        system("pause");
        return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2012, 14:20
Ответы с готовыми решениями:

Составить класс "Поезд", "Вокзал"
Составить класс. Автоматизированная информационная система на железнодорожном вокзале содержит...

Поезд отправляется в h1:m1, время в пути h2:m2. Во сколько прибывает поезд?
Есть код, решение простой задачки Поезд отправляется в h1:m1, время в пути h2:m2. Во сколько...

Класс "Вокзал", сделать метод прибытия поезда
Создать классы:Вокзал(содержит информацию о количестве перронов и информацию о...

Задача про поезд: будет ли поезд на платформе?
помогите с задачей: поезд прибывает на станцию в а часов b минут и отправляется в с часов d минут....

15
133 / 133 / 29
Регистрация: 17.09.2010
Сообщений: 288
24.03.2012, 15:57 2
Вася1q, код:
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
#include <iostream>
#include <locale.h>
 
using namespace std;
 
class train
{
    int number_id;
    char destination[40];
    int time;
    public:
    void set(int id, char *city, int t)
    {
        number_id = id;
        strcpy(destination, city);
        time = t;
    }
    void show()
    {
        cout << "Поезд "
             << number_id
             << " в "
             << time
             << " совершает путь, местоназначения: "
             << destination
             << endl;
    }
    int get_time()
    {
        return time;
    }
};
class train_station
{
    char name[40];
    const static int trns_size = 3;
    public:
    train *trns;
    train_station(char *n)
    {
        strcpy(name, n);
        try
        {
            trns = new train[trns_size];
        }
        catch(bad_alloc xa)
        {
            cout << "Ошибка\n";
            exit(EXIT_FAILURE);
        }
    }
    ~train_station()
    {
        delete [] trns;
    }
    char *get_name()
    {
        return name;
    }
    train get_train(int i)
    {
        return trns[i];
    }
    void show_by(const int time)
    {
        cout << "Список поездов, которые будут отправляться после "
             << time
             << endl
             << "----------------------------------------------------"
             << endl;
        for(int i = 0; i < trns_size - 1; i++)
        {
            for(int j = 1; j < trns_size; j++)
            {
                if(trns[i].get_time() > trns[j].get_time())
                {
                    train tmp = trns[i];
                    trns[i] = trns[j];
                    trns[j] = tmp;
                }
            }
        }
        int count = 0;
        for(int i = 0; i < trns_size; i++)
        {
            if(trns[i].get_time() > time)
            {
                trns[i].show();
                count++;
            }
        }
        if(count == 0)
        {
            cout << "Ни один поезд не отправляется после: "
                 << time
                 << endl;
        }
    }
};
 
int main()
{
    setlocale(0, "");
    cout << "Вокзал"
         << endl;
    train_station ts("Станция 1");
    cout << "\t"
         << ts.get_name()
         << endl;
    ts.trns[0].set(1201, "Кировград", 19);
    //ts.trns[0].show();
    ts.trns[1].set(1202, "Москва", 20);
    //ts.trns[1].show();
    ts.trns[2].set(1203, "Минск", 17);
    //ts.trns[2].show();
    int time;
    cout << "Введите время: ";
    cin >> time;
    ts.show_by(time);
    system("pause");
    return 0;
}
1
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
26.03.2012, 22:57  [ТС] 3
Огромное вам спасибо!
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
26.03.2012, 23:06 4
А вот какой смысл в топорном сокрытии любых полей класса, если их всё равно можно получить или изменить функцией геттером сеттером?
У Страуструппа был адекватный пример, когда сокрытие необходимо для сохранения логической связанности данных (там был класс "сумма чисел")
А тут зачем лишние извращения с private???
0
Дмитрий3241
27.03.2012, 01:12
  #5

Не по теме:

Kuzia domovenok, просматривал темы, в 5 разных точно были сообщение с сылками на Страуструппа. Тут людям нужно помогать а не указывать, что где то, в какой то книге, кто то приводил пример.

Какой-то малоизвестный Бьерн Страуструпп в своей забытой всеми книжке "Язык программирования С++"
давал пример класса именно...
Бьерн Страуструп - Язык программирования С++. глава 6.2.5 Виртуальные функции
У Страуструппа был адекватный пример, когда сокрытие необходимо...
И еше в 3 точно вот такая фраза:
Ты HelloWorld хоть самостоятельно писал?

0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
27.03.2012, 23:37 6
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Не по теме:
Kuzia domovenok, просматривал темы, в 5 разных точно были сообщение с сылками на Страуструппа. Тут людям нужно помогать а не указывать, что где то, в какой то книге, кто то приводил пример.
:LOL:
То есть посоветовать прочитать книгу ОБЯЗАТЕЛЬНУЮ для прочтения каждому, изучающему программирование это не считается помощью?
1
133 / 133 / 29
Регистрация: 17.09.2010
Сообщений: 288
28.03.2012, 11:11 7
Kuzia domovenok,
А вот какой смысл в топорном сокрытии любых полей класса, если их всё равно можно получить или изменить функцией геттером сеттером?
У Страуструппа был адекватный пример, когда сокрытие необходимо для сохранения логической связанности данных (там был класс "сумма чисел")
А тут зачем лишние извращения с private???
Это хороший тон программирования - меня так вполне устраивает. Что я могу Вам сказать - почитайте, что такое инкапсуляция. С уважением.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.03.2012, 11:41 8
Kuzia domovenok, Геттеры/сеттеры практически всегда делать логичнее, как минимум в "свойствах" можно реализовать бизнес-логику. И непрямой доступ куда проще отловить, если потребуется запретить изменения извне.

Добавлено через 37 секунд
Дмитрий3241, А вы бред несете. Малоизвестный Страуструп... О да. Всего лишь создатель языка С++.
0
soon
28.03.2012, 11:48
  #9

Не по теме:

ForEveR, это писал Kuzia domovenok, в теме про комплексные числа. Причем это был явный сарказм, просто Дмитрий3241, не все процитировал

1
ForEveR
28.03.2012, 11:54
  #10

Не по теме:

soon, Понятно. Жаль, что не могу сообщение уже поменять)

0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
28.03.2012, 11:59 11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
сокрытии любых полей класса
такой вопрос:
а если знать как располагаются данные в классе, можно ли изменить приватный член методом записи данных в начало объекта + смещение приватного члена
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.03.2012, 12:14 12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
class Cl
{
public:
   Cl():value(0) { }
   const int& get() const { return value; }
private:
   int value;
};
 
int main()
{
   Cl c;
   *(((char*)&c)) = 1;
   std::cout << c.get() << std::endl;
}
http://liveworkspace.org/code/... 7a0a9c08cf
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
28.03.2012, 12:21 13
Цитата Сообщение от eji Посмотреть сообщение
Kuzia domovenok, Это хороший тон программирования - меня так вполне устраивает. Что я могу Вам сказать - почитайте, что такое инкапсуляция. С уважением.
Ну а объяснить своими словами, чем именно это помогает программировать, никак да? Или единственное объяснение - "это хороший тон программирования, так большие дяди делают"...

Я говорю, если методы Get() Set() ничего не делают, кроме геттинга, сеттинга,
проще вынести поля класса в public, потому что private поля безопасности всё равно никакой не добавляют. Никакого "хорошего тона" в них нет
Сравни

C++
1
2
3
4
5
6
void train::set(int id, char *city, int t)
    {
        number_id = id;
        strcpy(destination, city);
        time = t;
    }
Любой пользователь класса может изменить поля number_id, destination и time произвольным образом, вызвав эту функцию. Ну и какая тогда роль у неё? Тупо копировать, а у геттеров тупо возвращать? спасибо, но я мог бы это сделать и с public полями; легче объявить поля
C++
1
2
3
4
public:
 int number_id;
    char destination[40];
    int time;
Другое дело, если мы заботимся о безопасности данных, но тогда о ней надо действительно заботиться, а не шаблонно действовать. скрыть данные в private, но при этом при попытке сеттинга проверять их корректность, например:
C++
1
2
3
4
5
6
7
8
9
void train::set(int id, char *city, int t)
    {
        number_id = id;
        if (strlen(city)>40) 
            strncpy(destination, city);
        else
            strcpy(destination, city);
        time = t;
    }
Тогда было бы ясно: Мы закрыли поле сити, чтобы при попытке его изменить пользователь не смог бы записать в него строку больше 40 символов. Так безопаснее.
Но этого нет. Тогда какой смысл в сеттерах, которые делают ровно то же, что мог бы сделать пользователь?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.03.2012, 12:35 14
Kuzia domovenok, Дело в стиле. По хорошему в классе данные должны быть закрыты, если сущность обладает некоторым поведением, а не просто набор данных (структура). Ну это конечно ИМХО, но подкрепленное опытом.
Не задумывались почему в шарпе к примеру в основном происходит работа через свойства и никого это не напрягает?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.03.2012, 12:43 15
Kuzia domovenok, проблема в том, что идеальное проектирование изначально - утопия. Код всегда будет дописываться или переписываться. Сегодня геттеры/сеттеры просто возвращают/устанавливают значение? Ну и ну их нафиг, сделаем поля открытыми! А завтра понадобится проводить дополнительные проверки. Ой, беда, надо сеттеры/геттеры. Ой, а уже куча программистов используют наш класс и могут достучаться до полей прямым доступом. И что делать? Просить пользователей переписать тонны готового кода?
1
133 / 133 / 29
Регистрация: 17.09.2010
Сообщений: 288
28.03.2012, 13:03 16
Kuzia domovenok,
Ну а объяснить своими словами, чем именно это помогает программировать, никак да?
Я Вам уже дал ответ, мне незачем пересказывать своими словами, что такое инкапсуляция, зачем она и так далее. Я программирую не первый год и приучил себя к одному стилю и не обязан менять свои принципы, потому что кто то "умнее" Страуструпа, Шилтда... Вы можете вообще поубирать права доступа и оставить только public, мне все равно на это, я пишу так как считаю нужным (береженного Бог бережет). Считаю, что диалог себя исчерпал.
0
28.03.2012, 13:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2012, 13:03
Помогаю со студенческими работами здесь

Создать базовый класс «Грузоперевозчик» и производные классы «Самолет», «Поезд», «Автомобиль»
Создать базовый класс «Грузоперевозчик» и производные классы «Самолет», «Поезд», «Автомобиль»....

ООП: создать базовый класс «Транспорт» и производные от него классы «Автомобиль», «Поезд», «Самолет»
Создать базовый класс «Транспорт» и производные от него классы «Автомобиль», «Поезд», «Самолет»....

Создать класс Поезд и Автомобиль
Ребят, пишу на Java, решил попробовать себя в области Lazarus'a. Это все конечно печально, но...

Объявить класс «Вокзал» с указанием полей: название вокзала, местонахождение (название города), число направлений, поток пассажиров.
Объявить класс «Вокзал» с указанием полей: название вокзала, местонахождение (название города),...


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

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