Отсортировать бинарный файл по возрастанию - 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. Программа открывает файл, считывает из него данные, сортирует их, а затем записывает обратно в файл. Вот список действий, которые выполняет программа:
- Подключает необходимые библиотеки.
- Объявляет структуру данных
олимпиец, в которой хранятся данные об участниках соревнований (фамилия, имя, возраст). - В цикле считывает данные об участниках и записывает их в файл.
- Закрывает файл.
- Открывает файл для чтения.
- В цикле считывает данные из файла и выводит их на экран.
- Создает буфер для временного хранения данных.
- Сортирует данные в цикле, сравнивая возраст участников.
- Записывает отсортированные данные обратно в файл.
- Открывает файл для чтения.
- В цикле считывает данные из файла и выводит их на экран.
- Закрывает файл.
- В цикле ожидает ввода данных пользователем с помощью функции getch().
- Возвращает 0, что означает успешное выполнение программы.