Сделать сортировку в алфавитном порядке с указателями - 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]);
}