описать структуру при помощи union и enum С++
Помогите пожалуйста разобраться с использованием union и enum.
Моя задача:
Описать структуру с именем TRAIN, содержащую поля:
- название пункта назначения;
- номер поезда;
- время отправления. Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из 9 структур типа TRAIN;
- вывод на экран информации о пункте назначения, в который отправляется поезд, номер которого введен с клавиатуры;
- если таких поездов нет, вывести соответствующее сообщение.
Я знаю, что такие задачи вы видели не раз, но у меня нет другого выхода как обратиться к вам. Совсем не понимаю, как применить здесь вышеперечисленные union и enum. Если можно, напишите код, чтобы я смог разобрать. Уровень у меня не очень((((((((
код без union и enum написать смог вроде как, но не думаю, что он как-то здесь поможет
Ответы (1 шт):
Давайте разберемся, что вообще есть и что такое union и enum
- enum - это перечисляемый тип (https://ravesli.com/urok-58-perechisleniya-tip-enum/)
например тип, который может принимать 3 значения - красный, зеленый и синий
enum EColors {
red,
green,
blue
};
в вашей задаче единственное куда можно засунуть этот enum наименее - это название пункта назначения, например
enum EDestination {
Moscow,
Muhosranks,
SaintPetersburg
};
EDestination start = EDestination::Moscow;
EDestination finish = EDestination::Muhosranks;
- union - это объединение нескольких переменных в одной области памяти (http://www.c-cpp.ru/books/obedineniya)
например
union UNumbers {
int num;
char letter;
}
В результате в одной переменной, занимающей 4 байта будет содержаться 2 переменные num (4 байта) и letter (1 байт)
вообще в современном программировании, когда ресурсов более-менее хватает, использовать union еще то извращение
Что конкретно в вашей задаче можно объединить в union? Например время отправления и номер поезда при условии, что время отправления мы запишем в 3 байта, а номер поезда в 1 байт
union UTrainInfo {
char departure[3];
int train_id;
};
Правда в этом случае номера поездов будут лежать в диапазоне 0x01000000 - 0xff0000, а время записывать без минут, к примеру '115' будет означать 11:50
P.S.
правда гораздо удобнее использовать просто структуру с соответствующими типами
struct TrainData {
std::string destination; // пункт назначения
int id; // номер поезда
int departure; // время отбытия
};