Сделать сортировку в алфавитном порядке с указателями - C (СИ)
Формулировка задачи:
Задание.
1. Описать структуру с именем ТRAIN, содержащую следующие поля:
•название пункта назначения;
•номер поезда;
•время отправления.
2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив , состоящий из восьми элемен¬тов типа ТRAIN; записи должны быть размещены в алфавитном порядке с помощью указателей по названиям пунктов назначения;
• вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени;
• если таких поездов нет, выдать на дисплей соответствующее сообщение.
Помогите пожалуйста 2 пункт (1) задание. Отсортировать в алфавитном порядке с помощью указателей по названием пунктов назначения
]; for (int i = 0; i < N; i++) { //printf("Введите пункт назначения поезда %d\n", i + 1 ); scanf("%c ",trains[ i ].path); ; //printf( "Введите номер для поезда %d\n", i + 1 ); scanf("%d ",&trains[ i ].number); ; //printf(" Введите время отправления для поезда(часы) %d\n",i + 1 ); scanf("%d ",&trains[ i ].hour) ; //printf("Введите время отправления для поезда(минуты) %d\n" , i + 1 ); scanf("%d ",&trains[ i ].min) ; } // Далее по заданию, нам нужно вывести их отсортированными по пути в алфавитном порядке используем конструкция двух структур по их путям отправления // Сделано это при помощи 2 циклов функции сравнения строк strcmp 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) { printf("Пункт назначения: %s номер: %d Время отправления: %d:%d\n" ,trains[ i ].path, trains[ i ].number, trains[ i ].hour, trains[ i ].min ); } // Следующие задание, вывести с клавиатуры тех поездов, котоыре отправятся после этого времени int time_h; int time_min; int k = 0; //printf("Введите ваше время(часы затем минуты\n"); scanf("%d %d ",&time_h , &time_min); printf( " Ваше время: %d:%d\n", time_h , time_min); for(int i = 0; i < N; i++) { if((time_h < trains[i].hour) || (time_h == trains[i].hour && time_min < trains[i].min)) { printf(" следующие поезда отправятся после вашего времени: %d с временем %d:%d\n",trains[i].number, trains[i].hour , trains[i].min); k++; } } if(k == 0) printf( " Нет исходящих поездов\n" ); fclose(stdin); return 0; }
Решение задачи: «Сделать сортировку в алфавитном порядке с указателями»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct { char* name; unsigned number; } Train; Train* CreateTrain(const char* trainName, unsigned trainNumber) { Train* newTrain = malloc(sizeof(Train)); newTrain->name = strdup(trainName); newTrain->number = trainNumber; return newTrain; } void FreeTrain(Train* train) { free(train->name); free(train); } int TrainComparer(const void* train1, const void* train2) { return strcmp((*(const Train**)train1)->name, (*(const Train**)train2)->name); } void PrintTrains(Train** trains, unsigned count) { int i = 0; for(;i<count;++i) printf("Train "%s", number - %u\n", trains[i]->name, trains[i]->number); } int main() { int i = 0; Train* a[4]; a[0] = CreateTrain("Moscow", 1); a[1] = CreateTrain("Barcelona", 2); a[2] = CreateTrain("Tokio", 3); a[3] = CreateTrain("Istanbul", 4); PrintTrains(a, 4); qsort(a, 4, sizeof(Train*), TrainComparer); puts("\n\nSorted:"); PrintTrains(a, 4); for(;i<4;++i) FreeTrain(a[i]); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д