Сортировка данных из файла - C (СИ)

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

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

помогите пожалйста. вот есть код для чтения данных с файла
#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();
}
как сделать что бы эти данные осртировать по зарплате самая правая колонка и потом записать их во второй файл? вот данные файла откуда идёт чтение 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

Решение задачи: «Сортировка данных из файла»

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();
}

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

  1. Включаются необходимые заголовочные файлы для работы с файлами и массивами
  2. Создается структура student для хранения данных о студентах
  3. Инициализируется указатель на структуру student и на файл с данными
  4. Создается переменная для хранения размера массива студентов
  5. Открывается файл с данными для чтения
  6. Указатель на массив студентов инициализируется как NULL
  7. В цикле while с помощью функции fscanf считываются данные из файла и сохраняются в массиве студентов
  8. Размер массива увеличивается на единицу после каждого успешного чтения
  9. Закрывается файл с данными
  10. Создается временный буферный объект типа student
  11. В цикле for выполняется сортировка массива студентов по возрастанию оценки
  12. Открывается файл F2.txt для записи
  13. В цикле for данные из массива студентов выводятся на экран и записываются в файл F2.txt
  14. Закрывается файл F2.txt
  15. Освобождается память, выделенная под массив студентов
  16. Программа ожидает нажатия любой клавиши для завершения работы

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


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

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

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