Отсортировать структуры по одному из полей - C (СИ) (74990)

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

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

Есть программа, пользователь вводит 4 поля данных, для пяти разных товаров и они записываются в файл. Как можно отсортировать данные,например, по году выпуска ?
Листинг программы
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. void main()
  7. {
  8. struct tovari
  9. {
  10. char name[10];
  11. char cena[10];
  12. char year[10];
  13. char kol[10];
  14. };
  15. struct tovari tovari[6];
  16. int i;
  17. char tmp;
  18. FILE *output;
  19. output=fopen("rez.txt","w");
  20. for (i=1;i<=5;i++)
  21. {
  22. printf("Nazvanie %d tovara\n",i);
  23. scanf("\n%s",tovari[i].name);
  24. printf("Cena\n");
  25. scanf("\n%s",tovari[i].cena);
  26. printf("God\n");
  27. scanf("\n%s",tovari[i].year);
  28. printf("Kolichestvo\n");
  29. scanf("\n%s",tovari[i].kol);
  30. }
  31. for (i=1;i<=5;i++)
  32. {
  33. fprintf(output,"%d-Tovar:\n",i);
  34. fprintf(output,"%s\n",tovari[i].name);
  35. fprintf(output,"%s\n",tovari[i].cena);
  36. fprintf(output,"%s\n",tovari[i].year);
  37. fprintf(output,"%s\n",tovari[i].kol);
  38. }
  39. }

Решение задачи: «Отсортировать структуры по одному из полей»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct tovari
  6. {
  7.     char name[10];
  8.     char cena[10];
  9.     char year[10];
  10.     char kol[10];
  11. };
  12.  
  13. int Compare(const void* first, const void* second)
  14. {
  15.     return strcmp(((struct tovari*)first)->year, ((struct tovari*)second)->year);
  16. }
  17.  
  18. int main()
  19. {
  20.     struct tovari tovari[5];
  21.     int i;
  22.  
  23.     FILE* output;
  24.     output = fopen("rez.txt", "w");
  25.  
  26.     for (i = 0; i < 5; i++)
  27.     {
  28.         printf("Nazvanie %d tovara\n", i + 1);
  29.         scanf("\n%s", tovari[i].name);
  30.         printf("Cena\n");
  31.         scanf("\n%s", tovari[i].cena);
  32.         printf("God\n");
  33.         scanf("\n%s", tovari[i].year);
  34.         printf("Kolichestvo\n");
  35.         scanf("\n%s", tovari[i].kol);
  36.  
  37.     }
  38.  
  39.     qsort(tovari, 5, sizeof(struct tovari), Compare);
  40.  
  41.     for (i = 0; i < 5; i++)
  42.     {
  43.         fprintf(output, "%d-Tovar:\n", i + 1);
  44.         fprintf(output, "%s\n", tovari[i].name);
  45.         fprintf(output, "%s\n", tovari[i].cena);
  46.         fprintf(output, "%s\n", tovari[i].year);
  47.         fprintf(output, "%s\n", tovari[i].kol);
  48.     }
  49.  
  50.     fclose(output);
  51.  
  52.     return 0;
  53. }

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

  1. Включаются необходимые заголовочные файлы
  2. Объявляется структура tovari с полями name, cena, year, kol
  3. Создается функция сравнения Compare, которая будет использоваться в функции сортировки qsort
  4. В функции main создается массив структур tovari, инициализированный нулевыми значениями
  5. Открывается файл rez.txt в режиме записи
  6. В цикле запрашиваются значения полей структуры tovari и сохраняются в соответствующих переменных
  7. Вызывается функция qsort для сортировки массива tovari по полю year с использованием функции сравнения Compare
  8. В цикле выводятся отсортированные значения полей структуры tovari в файл rez.txt
  9. Файл rez.txt закрывается
  10. Возвращается 0, что означает успешное выполнение программы

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


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

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

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы