Сортировка данных из файла - C (СИ)
Формулировка задачи:
помогите пожалйста. вот есть код для чтения данных с файла
как сделать что бы эти данные осртировать по зарплате самая правая колонка и потом записать их во второй файл? вот данные файла откуда идёт чтение
Yury 19 235.62
Alex 23 2356.32
Marina 36 845.25
Ekaterina 23 745.23
Julia 45 854.01
Pavel 22 222.22
Maxim 33 5620.25
Vitalii 29 958.35
Andres 37 563.23
Petr 41 452.02
#include <stdio.h> #include <stdlib.h> // stdlib.h - neobhodima dlja ispolzovanija funckciy //dynami4eskogo vydelenija pamjati (realloc, malloc, calloc) typedef struct stud{ char name[21]; // familija int age; // vozrast double palk; // srednjaja ocenka } student; int main(void) { student *st; FILE *fData; int size = 0; char fname[] = "F1.txt";// nazvanie faila if((fData = fopen(fname, "r" )) == NULL){ printf( "Osibka pri 4tenii faila %s\n", fname); exit(1); } //("st" dolzna bytj inicializirovana pered vyzovom funkcii "realloc") st = NULL; // inicializacija while(!feof(fData)){ // dinami4eski uveli4ivaet vydelennuju pamjat na 1 zapisj if((st = realloc(st, (size+1)*sizeof(student))) == NULL){ printf("Oshibka pri raspredelenii pamjati\n"); exit(1); } fscanf(fData, "%s %d %lf", st[size].name, &st[size].age, &st[size].palk); // 4itaet zapisj iz faila //vyvodit zapisj na ekran, st[size].name ~ (st+size)->name printf("%s %d %.1f\n", (st+size)->name, (st+size)->age, (st+size)->palk); size++; // koli4estvo pro4itannyh zapisei } fclose(fData); // zakrytie faila //osvobozdenie pamjati free(st); getchar(); }
Решение задачи: «Сортировка данных из файла»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> // stdlib.h - neobhodima dlja ispolzovanija funckciy //dynami4eskogo vydelenija pamjati (realloc, malloc, calloc) typedef struct stud { char name[21]; // familija int age; // vozrast double palk; // srednjaja ocenka } student; int main(void) { student* st; FILE* fData; int size = 0; char fname[] = "F1.txt";// nazvanie faila if ((fData = fopen(fname, "r")) == NULL) { printf("Osibka pri 4tenii faila %s\n", fname); exit(1); } //("st" dolzna bytj inicializirovana pered vyzovom funkcii "realloc") st = NULL; // inicializacija while (!feof(fData)) { // dinami4eski uveli4ivaet vydelennuju pamjat na 1 zapisj if ((st = realloc(st, (size + 1) * sizeof(student))) == NULL) { printf("Oshibka pri raspredelenii pamjati\n"); exit(1); } fscanf(fData, "%s %d %lf", st[size].name, &st[size].age, &st[size].palk); // 4itaet zapisj iz faila size++; // koli4estvo pro4itannyh zapisei } fclose(fData); // zakrytie faila // Sorted student buff; int i, j; int min; for (i = 0; i < size-1; ++i) { min = i; for (j = i+1; j < size; ++j) { if (st[j].palk < st[min].palk) { min = j; } } buff = st[min]; st[min] = st[i]; st[i] = buff; } if ((fData = fopen("F2.txt", "w")) == NULL) { printf("Osibka pri otkritii faila F2.txt\n"); exit(1); } // Print and write in file for (i = 0; i < size; ++i) { printf("| %10s | %5d | %7.1f |\n", st[i].name, st[i].age, st[i].palk); fprintf(fData, "%s %d %.1f\n", st[i].name, st[i].age, st[i].palk); } fclose(fData); //osvobozdenie pamjati free(st); getchar(); }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы для работы с файлами и массивами
- Создается структура
student
для хранения данных о студентах - Инициализируется указатель на структуру
student
и на файл с данными - Создается переменная для хранения размера массива студентов
- Открывается файл с данными для чтения
- Указатель на массив студентов инициализируется как NULL
- В цикле while с помощью функции fscanf считываются данные из файла и сохраняются в массиве студентов
- Размер массива увеличивается на единицу после каждого успешного чтения
- Закрывается файл с данными
- Создается временный буферный объект типа
student
- В цикле for выполняется сортировка массива студентов по возрастанию оценки
- Открывается файл
F2.txt
для записи - В цикле for данные из массива студентов выводятся на экран и записываются в файл
F2.txt
- Закрывается файл
F2.txt
- Освобождается память, выделенная под массив студентов
- Программа ожидает нажатия любой клавиши для завершения работы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д