Сортировка списка файлов по имени, дате и размеру - C (СИ)

Узнай цену своей работы

Формулировка задачи:

задан список файлов в папке, для каждого из которых указаны имя, расширение, размер, дата. реализовать сортировку по возрастанию и убыванию по всем характеристикам и подсчитать суммарный объём. заполнение верно?как применить qsort?и можно выводить структуру на экран?
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
 
struct str
{
    char name;
    char exp;
    float size;
    float date;
};
 
int main()
{
    struct str a[4];
    int i=0;
    float j=0;
    {
    for(i; i < 4; i++)
    printf("file #%i",i);
    printf("enter name");
    scanf("%c",&a[i].name);
    printf("enter expansion");
    scanf("%c",&a[i].exp);
    printf("enter size");
    scanf("%f",&a[i].size);
    printf("enter date");
    scanf("%f",&a[i].date);
    }
        {for(i=0, i < 4, i++)
            j=j+a[i].size
        }
        printf("common size %f",j);
{for(i=0, i < 4, i++)
      printf("%f%c",a[i]);
     }
так структуру выведет?

Решение задачи: «Сортировка списка файлов по имени, дате и размеру»

textual
Листинг программы
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
 
#define STR_LEN 64
 
typedef struct str
{
        char name[STR_LEN];
        char exp[STR_LEN];
        unsigned long size;
        int tm_date;
} str_t;
 
int name_c(const void * a, const void * b){
    return strcmp(((str_t*)a)->name, ((str_t*)b)->name);
}
 
int exp_c(const void * a, const void * b){
    return strcmp(((str_t*)a)->exp, ((str_t*)b)->exp);
}
 
int size_c(const void * a, const void * b){
    return ((str_t*)a)->size - ((str_t*)b)->size;
}
 
int tm_date_c(const void * a, const void * b){
    return ((str_t*)a)->tm_date - ((str_t*)b)->tm_date;
}
 
void dump(const str_t * arr, size_t cnt){
    while ( cnt-- ){
        printf("%-20s%-5s%10u%10d\n", arr->name, arr->exp, arr->size, arr->tm_date);
        ++arr;
    }
}
 
#define NUM_FILES 4
 
int main(void)
{
    str_t a[NUM_FILES];
    int i;
        
    for(i=0; i < 4; i++){
                printf("file #%i\n", i+1);
                printf("enter name: ");
                scanf("%s", a[i].name);
                printf("enter expansion: ");
                scanf("%s", a[i].exp);
                printf("enter size: ");
                scanf("%lu", &a[i].size);
                printf("enter date: ");
                scanf("%i", &a[i].tm_date);
    }
 
 
    printf("\n Unsorted \n");
    dump(a, NUM_FILES);
    printf("\n Sorted by name: \n");
    qsort(a, NUM_FILES, sizeof(str_t), name_c);
    dump(a, NUM_FILES);
    printf("\n Sorted by expansion: \n");
    qsort(a, NUM_FILES, sizeof(str_t), exp_c);
    dump(a, NUM_FILES);
    printf("\n Sorted by size: \n");
    qsort(a, NUM_FILES, sizeof(str_t), size_c);
    dump(a, NUM_FILES);
    printf("\n Sorted by date: \n");
    qsort(a, NUM_FILES, sizeof(str_t), tm_date_c);
    dump(a, NUM_FILES);
    
    /* с этим сами как-нибудь                    printf("common size %f",j);
 
    а этого у меня нету getch(); */
    return 0;
}

Объяснение кода листинга программы

  1. В начале кода определяются необходимые переменные и функции:
    • str_t - структура данных, представляющая файл, содержащая поля для имени файла, его расширения, размера и даты создания.
    • name_c, exp_c, size_c, tm_date_c - функции сравнения, которые будут использоваться в функции qsort для сортировки массива файлов по различным критериям.
    • dump - функция для вывода содержимого массива файлов в отсортированном виде.
    • NUM_FILES - количество файлов, которые будут обрабатываться в программе.
    • main - главная функция программы, в которой происходит взаимодействие с пользователем и выполнение всех необходимых операций.
  2. В функции main создается массив a типа str_t размером NUM_FILES.
  3. Пользователю предлагается ввести данные для каждого файла: имя, расширение, размер и дату создания.
  4. Данные, введенные пользователем, сохраняются в соответствующих полях массива a.
  5. Выводится неотсортированный список файлов.
  6. Массив a сортируется по имени файла с помощью функции qsort и функции сравнения name_c.
  7. Выводится отсортированный по имени файла список файлов.
  8. Массив a сортируется по расширению файла с помощью функции qsort и функции сравнения exp_c.
  9. Выводится отсортированный по расширению файла список файлов.
  10. Массив a сортируется по размеру файла с помощью функции qsort и функции сравнения size_c.
  11. Выводится отсортированный по размеру файла список файлов.
  12. Массив a сортируется по дате создания файла с помощью функции qsort и функции сравнения tm_date_c.
  13. Выводится отсортированный по дате создания файла список файлов.
  14. Программа завершается возвратом значения 0 из функции main, что означает успешное выполнение программы.

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

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