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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы