Отсортировать бинарный файл по возрастанию - C (СИ)

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

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

Отсортировать бинарный файл по возрастанию. Олимпиада: спортсмен, фамилия, фирма, возраст. Отсортировать по возрастанию. моя структура:
#include <conio.h>
#include <stdio.h>
typedef struct 
    {
            char fa[20], fi[30];
            int vo;
    }
    olimpiada; 
int main()
{
    printf("vvedi kolichestvo uchastnikov olimpiadi:\n");
    int k,i,j;
    scanf("%d",&k);
    olimpiada ol[k];
    olimpiada temp;
    for (i=0;i<k;i++)
    {
        printf("SPOTSMEN # %d",i+1);
        printf("\nvvedite familiyu:\n");
        scanf("%s",ol[i].fa);
        printf("vvedite firmu:\n");
        scanf("%s",ol[i].fi);
        printf("vvedite vozrast:\n");
        scanf("%d",&ol[i].vo);
    }
    printf("\nINFORMACIYA O SPORTSMENAH:\n");
    for (i=0;i<k;i++)
    {
        printf("Sportsmen #%d\n",i+1);
        printf("familiya: %s; firma: %s; vozrast: %d\n",ol[i].fa,ol[i].fi,ol[i].vo);
    }  
    for (i=k-1;i>0;i--)
    for (j=0;j<i;j++)
    if(ol[j+1].vo<ol[j].vo) 
    {
                            temp=ol[j+1];
                            ol[j+1]=ol[j];
                            ol[j]=temp;
    }
    printf("\nPOSLE SORTIROVKI:\n");
    for(i=0;i<k;i++)
    {
        printf("Sportsmen #%d\n",i+1);
        printf("familiya: %s; firma: %s; VOZRAST: %d\n",ol[i].fa,ol[i].fi,ol[i].vo);
    }
    getch();
    return 0; 
}

Решение задачи: «Отсортировать бинарный файл по возрастанию»

textual
Листинг программы
#include <conio.h>
#include <stdio.h>
typedef struct 
{
        char fa[30];
        char fi[30];
        int vo;
}
olimpiada;
int main()
{
    char fn[50];
    printf("vvedite imya fayla:\n");
    scanf("%s",fn);
    olimpiada ol;
    FILE *f=fopen(fn,"wb");
    int i,k;
    printf("scol'ko olimpiycev?\n");
    scanf("%d",&k);
    for (i=0;i<k;i++)
    {
        printf("vvedite familiyu:\n");
        scanf("%s",ol[i].fa);
        printf("vvedite firmu:\n");
        scanf("%s",ol[i].fi);
        printf("vvedite vozrast sportsmena:\n");
        scanf("%d",ol[i].vo);
        fwrite(&ol,sizeof(ol),1,f);
    }
    fclose(f);
    FILE *f=fopen(fn,"rb");
    olimpiada ol;
    for(int i=0;i<k;i++)
    printf("%s %s %d\n",ol[i].fa,ol[i].fi,ol[i].vo);
    fclose(f);
    olimpiada buffer;
    FILE *f=fopen(fn,"rb");
    int i,j;
    printf("\nSORTIROVKA:\n");
    for(i=k-1;i>0;i--)
    for(j=0;j<i;j++)
    if(ol[j+1].vo<ol[j].vo)
    {
                           buffer=ol[j];
                           ol[j]=ol[j+1];
                           ol[j+1]=buffer;
    }
    FILE *f=fopen(fn,"rb");
    olimpiada ol;
    for(int i=0;i<k;i++)
    printf("%s %s %d\n",ol[i].fa,ol[i].fi,ol[i].vo);
    fclose(f);
    getch();
    return 0;
}

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

В этом коде используется язык программирования C. Программа открывает файл, считывает из него данные, сортирует их, а затем записывает обратно в файл. Вот список действий, которые выполняет программа:

  1. Подключает необходимые библиотеки.
  2. Объявляет структуру данных олимпиец, в которой хранятся данные об участниках соревнований (фамилия, имя, возраст).
  3. В цикле считывает данные об участниках и записывает их в файл.
  4. Закрывает файл.
  5. Открывает файл для чтения.
  6. В цикле считывает данные из файла и выводит их на экран.
  7. Создает буфер для временного хранения данных.
  8. Сортирует данные в цикле, сравнивая возраст участников.
  9. Записывает отсортированные данные обратно в файл.
  10. Открывает файл для чтения.
  11. В цикле считывает данные из файла и выводит их на экран.
  12. Закрывает файл.
  13. В цикле ожидает ввода данных пользователем с помощью функции getch().
  14. Возвращает 0, что означает успешное выполнение программы.

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


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

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

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