Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 05.12.2022
Сообщений: 10

Описать структуру с именем TRAIN

21.04.2023, 13:33. Показов 2250. Ответов 1

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

Помогите, пожалуйста, написать программу на C!

Добавлено через 43 минуты
найден подходящий код, нужно только добавить ввод с клавиатуры данных в файл, чтение из него, и переписать код для C... помогите, пожалуйста!
приведенная программа выполняет:
• ввод с клавиатуры данных в массив, состоящий из десяти структур типа TRAIN; записи должны быть размещены в алфавитном порядке по названию пунктов назначения;
• вывод на дисплей информации о поездах, отправляющихся позже определенного времени (ввести с клавиатуры);
• если таких поездов нет, вывести соответствующее сообщение.
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    struct TRAIN
    {
        char destination[25];
        int number;
        char time[25];
    };
    TRAIN data[25];
    for(int i=0;i<3;i++)
    {
        if(i==0)
            cout << "Введите место назначения: ";
        else
            cout << "\nВведите место назначения: ";
        cin >> data[i].destination;
        cout << "Введите номер поезда: ";
        cin >> data[i].number;
        cout << "Введите время отправления: ";
        cin >> data[i].time;
    }
 
     for (int i = 0; i < 25 - 1; i++)
        for (int j = i + 1; j < 25; j++)
            if (strcmp(data[i].destination,data[i+1].destination)>0) {
                TRAIN tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
 
    char time2[25];
    bool flag = false;
    cout << "\nВведите желаемое время: ";
    cin >> time2;
    for(int i=0;i<3;i++)
    {
        if(strcmp(data[i].time,time2)>0)
        {
            cout << endl << "Поезд #" << data[i].number << " отправляется в город " << data[i].destination << " в " << data[i].time << ".";
            flag = true;
        }
    }
    if(!flag)
    {
        cout << "\nТаких поездов нет!";
    }
    cout << endl << endl;
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2023, 13:33
Ответы с готовыми решениями:

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

Описать структуру с именем TRAIN
Доброе время суток, помогите решить примерчик пож..... (Условие в вложении) #include &quot;stdafx.h&quot; #include...

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

1
 Аватар для Martein
704 / 109 / 21
Регистрация: 22.06.2014
Сообщений: 241
22.04.2023, 18:39
Лучший ответ Сообщение было отмечено viloccchka как решение

Решение

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
#include "locale.h"
#include "string.h"
#include "windows.h"
 
#include <stdbool.h>
#include <stdio.h>
 
struct TRAIN {
    char destination[25];
    int  number;
    char time[25];
}* trains = NULL;
 
int  numOfTrains = 0;   // Тут будет храниться количество считанных поездов
char errorMsg[100];     // Тут будет храниться текст ошибки, если что-то пошло не так
 
// Функция сравнения времени отправления
int compareTime(const char* time1, const char* time2);
 
// Функция ввода строки времени
bool inputTime(char* time);
 
// Функция проверки правильности введённого в соответствии с маской hh:mm
bool isValidTime(const char* time);
 
// Функция вывода на экран всех поездов
bool outputTrains();
 
// Функция вывода на экран поездов, отправляющихся позже введённого времени с
// клавиатуры
bool outputTrainsByTime();
 
// Чтение данных поездов с клавиатуры и сохранение в файл
bool readFromKeyboardToFile();
 
// Функция чтения поездов из файла
bool readTrainsFromFile();
 
// Сортировка поездов по наименованию станции прибытия перед записью в файл
void sortTrains();
 
// Обмен местами поездов в списке во время сортировки
void swapTrains(struct TRAIN* train1, struct TRAIN* train2);
 
int main(int argc, char** argv) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Russian");
 
    int menu;
    do {
        menu = 0;
        system("cls");
        printf("1. Ввести поезда с клавиатуры и записать в файл.\n");
        printf("2. Считать поезда из файла.\n");
        printf("3. Вывести поезда по времени.\n");
        printf("4. Выход из программы.\n");
        printf("Введите номер пункта и нажмите ВВОД [1-4]: ");
 
        scanf("%d", &menu);
 
        switch (menu) {
            case 1:
                if (!readFromKeyboardToFile()) {
                    printf(errorMsg);
                }
                system("pause");
                break;
            case 2:
                if (!readTrainsFromFile()) {
                    printf(errorMsg);
                } else {
                    if (!outputTrains()) {
                        printf(errorMsg);
                    }
                }
                system("pause");
                break;
            case 3:
                if (!outputTrainsByTime()) {
                    printf(errorMsg);
                }
                system("pause");
        }
    } while (menu != 4);
 
    return 0;
}
 
bool isValidTime(const char* time) {
    bool result = false;
 
    if (isdigit(time[0]) && isdigit(time[1]) && (time[2] == ':') &&
        isdigit(time[3]) && isdigit(time[4])) {
        if (time[0] >= '0' && time[0] <= '2' && time[3] >= '0' &&
            time[3] <= '6') {
            result = true;
        }
    }
    return result;
}
 
int compareTime(const char* time1, const char* time2) {
    int result = 0;
 
    if ((time1 != time2) && strcmp(time1, time2)) {
        for (size_t i = 0; i < 4; ++i) {
            if (result != 0)
                break;
            if (i != 2 && (time1[i] > time2[i])) {
                result = 1;
            } else if (time1[i] < time2[i]) {
                result = -1;
            }
        }
    }
 
    return result;
}
 
bool inputTime(char* time) {
    bool result = false;
 
    scanf("%s", time);
 
    if (isValidTime(time)) {
        result = true;
    } else {
        strcpy(errorMsg, "Некорректно введено время!\n");
    }
 
    return result;
}
 
void swapTrains(struct TRAIN* train1, struct TRAIN* train2) {
    if (train1 != train2) {
        struct TRAIN tempTrain;
 
        memcpy(&tempTrain, train1, sizeof(struct TRAIN));
        memcpy(train1, train2, sizeof(struct TRAIN));
        memcpy(train2, &tempTrain, sizeof(struct TRAIN));
    }
}
 
void sortTrains() {
    for (size_t i = 1; i < numOfTrains; ++i) {
        if (strcmp(trains[i - 1].destination, trains[i].destination) > 0) {
            swapTrains(&trains[i - 1], &trains[i]);
        }
    }
}
 
bool outputTrains() {
    bool result = false;
 
    if (numOfTrains > 0) {
        for (size_t i = 0; i < numOfTrains; ++i) {
            printf("Станция назначения %zd-го поезда: %s\n",
                   i + 1,
                   trains[i].destination);
            printf("Номер %zd-го поезда: %d\n", i + 1, trains[i].number);
            printf("Время отправления %zd-го поезда: %s\n",
                   i + 1,
                   trains[i].time);
            result = true;
        }
    } else {
        strcpy(errorMsg, "Не введены или не считаны из файла поезда!\n");
    }
 
    return result;
}
 
bool readFromKeyboardToFile() {
    FILE* fp = fopen("TRAINS.TXT", "ab+");
 
    if (fp) {
        printf("Сколько новых поездов вы хотите ввести? ");
        scanf("%d", &numOfTrains);
 
        if (numOfTrains > 0) {
            if (trains != NULL) {
                free(trains);
                trains = NULL;
            }
 
            trains = (struct TRAIN*)malloc(sizeof(struct TRAIN) * numOfTrains);
 
            memset(trains, 0, (sizeof(struct TRAIN) * numOfTrains));
 
            if (trains) {
                for (size_t i = 0; i < numOfTrains; ++i) {
                    printf("Введите наименование пункта назначения для %zd-го "
                           "поезда: ",
                           i + 1);
                    scanf("%s", trains[i].destination);
 
                    printf("Введите номер для %zd-го поезда: ", i + 1);
                    scanf("%d", &trains[i].number);
 
                    do {
                        printf("Введите время отправления %zd-го поезда в "
                               "формате hh:mm : ",
                               i + 1);
                        if (!inputTime((char*)&trains[i].time)) {
                            printf(errorMsg);
                        }
                    } while (!isValidTime((char*)&trains[i].time));
                }
 
                sortTrains();
 
                fwrite(trains, sizeof(struct TRAIN), numOfTrains, fp);
 
                fclose(fp);
 
            } else {
                strcpy(errorMsg,
                       "Почему-то не удалось выделить память для структур!\n");
            }
        } else {
            strcpy(errorMsg, "Вы не ввели число поездов! Это как понимать?\n");
        }
    } else {
        strcpy(errorMsg, "Не удалось создать файл TRAINS.TXT\n");
        return false;
    }
    return true;
}
 
bool readTrainsFromFile() {
    bool result = false;
 
    FILE* fp = fopen("TRAINS.TXT", "rb");
 
    if (fp) {
        fseek(fp, 0, SEEK_END);
        int file_size = ftell(fp);
 
        if (file_size >= sizeof(struct TRAIN)) {
            numOfTrains = file_size / sizeof(struct TRAIN);
 
            if (trains) {
                free(trains);
            }
 
            trains = (struct TRAIN*)malloc(numOfTrains * sizeof(struct TRAIN));
 
            fseek(fp, 0, SEEK_SET);
 
            for (int i = 0; i < numOfTrains; ++i) {
                fread(trains, sizeof(struct TRAIN), numOfTrains, fp);
            }
            result = true;
        } else {
            strcpy(errorMsg, "В файле нет записей о поездах!\n");
            result = false;
        }
 
    } else {
        strcpy(errorMsg, "Файла TRAINS.TXT не существует!\n");
    }
 
    return result;
}
 
bool outputTrainsByTime() {
    char time[10];
 
    bool result = false;
 
    if (numOfTrains > 0) {
        do {
            printf("Введите время отправления в формате hh:mm : ");
            if (!inputTime((char*)time)) {
                printf(errorMsg);
            }
        } while (!isValidTime((char*)time));
 
        for (size_t i = 0; i < numOfTrains; ++i) {
            if (compareTime((const char*)&trains[i].time, (const char*)&time) >
                0) {
                printf("Станция назначения %zd-го поезда: %s\n",
                       i + 1,
                       trains[i].destination);
                printf("Номер %zd-го поезда: %d\n", i + 1, trains[i].number);
                printf("Время отправления %zd-го поезда: %s\n",
                       i + 1,
                       trains[i].time);
                result = true;
            }
        }
 
        if (!result)
            strcpy(errorMsg,
                   "Не было найдено поездов, которые идут позже указанного "
                   "времени!\n");
    } else {
        strcpy(errorMsg, "Не введены или не считаны из файла поезда!\n");
    }
 
    return result;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2023, 18:39
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru