Skip to content

Структуры. Задача 1

Доброго времени суток, уважаемые читатели! В этой статье мы поговорим о структурах в C++, затронем основные моменты в их написании, и, конечно же, покажем один практический пример.

Начнем сразу с задания, на котором мы и будем изучать структуры C++:

1. Описать структуру с именем TRAIN, содержащую следующие поля:
• название пункта назначения;
• номер поезда;
• время отправления.

2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN; записи должны
быть размещены в алфавитном порядке но названиям пунктов назначения;
• вывод на экран информации о поездах, отправляющихся после введенного с
клавиатуры времени;
• если таких поездов нет, выдать па дисплей соответствующее сообщение.

И сразу перейдем к коду:

#include <conio.h>
#include <iostream>
#include <cstdlib>
using namespace std;
 
struct Train {
    int number;
    char path[10];
    int hour;
    int min;
};
using namespace std;

После объявления библиотек, с помощью слова struct объявляется структура Train. По своей сути структура представляет собой набор данных. Она имеет поля, которые в свою очередь могут иметь разные типы данных, и даже быть массивами. Также можно сделать структуру в структуре, что довольно часто используется. Итак, мы создали структуру с 4 полями, думаю, на этом шаге все понятно.

Перейдем к main:

int main() {
    const int N = 8;
    setlocale(LC_ALL, "Russian");
    Train trains[8];

    for (int i = 0; i < N; i++) {
        cout << "Введите пункт назначения поезда " << i + 1 << endl; 
        cin >> trains[ i ].path ;
        cout << "Введите номер для поезда " << i + 1 << endl;
        cin >> trains[ i ].number;
        cout << "Введите время отправления для поезда (часы) " << i + 1 << endl;
        cin >> trains[ i ].hour ;
        cout << "Введите время отправления для поезда (минуты) " << i + 1 << endl;
        cin >> trains[ i ].min ;
    }

В этой части мы создаем 8 наших структур, у каждой из них, напомню, 4 поля: пункт назначения, номер поезда, часы и минуты отправления поезда. При желании, вы можете придумать еще какие нибудь поля для своей структуры. Все эти поля в нашей программе заполняет пользователь вручную с помощью консоли. За это отвечает оператор ввода cin.

for(int i = 0; i < N; i++) 
{
     for(int j = i + 1; j < N; j++) 
     {
          if(strcmp(trains[i].path, trains[j].path)>0)
           {
                Train tmp = trains[i];
                trains[i] = trains[j];
                trains[j] = tmp;
           }
     }
}
for (int i = 0; i < N; ++i) 
{
     cout << " Пункт назначения: " << trains[ i ].path << "   номер: " << trains[ i ].number << "   Время отправления: " << trains[ i ].hour << ":" << trains[ i ].min  << endl << endl;
}

После того как мы заполнили поля наших структур, по заданию нам нужно вывести их отсортированными по пути в алфавитном порядке.

Для этого используется конструкция сравнения двух структур по их путям отправления. Сделано это с помощью 2 циклов и функции сравнения строк strcmp. После сортировки уже выводим на экран консоли информацию о структурах.

Идем дальше, и на очереди у нас задание с клавиатуры времени отправления и вывод тех поездов, которые отправятся после этого времени:

int time_h;
int time_min;
int k = 0;
cout << "Введите ваше время (часы затем минуты)" << endl;
cin >> time_h >> time_min;
cout << " Ваше время:" << time_h <<":" << time_min << endl << endl;
for(int i = 0; i < N; i++)
{
     if((time_h < trains[i].hour) || (time_h == trains[i].hour && time_min < trains[i].min))
        {
             cout << " следующие поезда отправятся после вашего времени: " << trains[i].number  <<" с временем "<< trains[i].hour << ":"<< trains[i].min << endl;
             k++;
        }
}
     if(k == 0)
        cout << " Нет подходящих поездов" << endl;
        
_getch();
return 0;
}

Итак, сначала мы просим пользователя ввести время в часах и минутах, отдельно записываем часы и минуты в переменные. Далее сравниваем это время с временем отправления каждого поезда, и соответственно, выводим информацию о тех поездах время отправления которых позже, чем ввел пользователь. Если таких поездов не обнаружилось, то мы выводим информацию об их отсутствии. Надеюсь вы поняли)

На этом у нас все, думаю, что будет еще 2 пример по структурам, обязательно прочтите его.
Если у вас остались вопросы по теме, то оставляйте их в комментариях.

Скачать исходники

Опубликовано вC++

Комментарии

  1. Eugene Kozhukhar Eugene Kozhukhar

    Подскажите пожалуйста. При запуске программы ругается на conio.h
    no such file of directory и не запускается программа

  2. Nikiqq Nikiqq

    А в какой ОС работаете? На Linux (например Ubuntu) эту строку нужно закомментировать

  3. Eugene Kozhukhar Eugene Kozhukhar

    Спасибо! Разобрался.
    Подскажите пожалуйста пункт..
    Где нужно отсортировать в алфавитном порядке по их путям отправления.
    Можете пожалуйста помочь и скинуть код программы отсортировки с в алфавитном порядке с помощью указателей. Заранее спасибо!

Добавить комментарий