Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
20.06.2014
Размер:
116.74 Кб
Скачать

5

Задание кафедры

Написать программу, осуществляющую сортировку переменных из входного

файла и записывающую результат в выходной файл. Имена входного и выходного файлов вводятся пользователем. На экране должны отображаться исходная и сортированная последовательности. Формат файлов текстовой, кол-во записей в файле неограниченно.

Вариант: 2i

2-метод подсчета

i-целые

Блок схема алгоритма сортировки

B[i] ++

B[i] ++

B[i] ++

B[i] ++

B[i] ++

#include<stdio.h>

#include<conio.h>

int read(char*name);

int write(char*name);

void sort();

void print();

int *arr,*sortarr;

int n;

main()

{

char f1[256],f2[256];

int res;

printf("Input source file name:");

scanf("%s",f1);

printf("Input destination file name:");

scanf("%s",f2);

res = read(f1);

if (res)

{

printf("Error reading file.");

getch();

return 0;

}

print();

sort();

print();

res = write(f2);

if (res)

{

printf("Error writing file.");

getch();

return 0;

}

getch();

delete arr;

return 0;

}

int read(char*name)

{

FILE*f;

int tmp,i;

f = fopen(name,"rt");

if (f == NULL) return 1;

// count

for(i=0; ;i++)

{

if (feof(f)) break;

fscanf(f,"%d",&tmp);

}

n=i;

arr = new int [n];

fclose(f);

// read

f= fopen(name,"rt");

if (f == NULL) return 1;

for(i=0;i<n ;i++)

{

fscanf(f,"%d",&arr[i]);

}

fclose(f);

return 0;

}

int write(char*name)

{

int i;

FILE *f;

f=fopen(name,"wt");

if (f == NULL) return 1;

for(i=0;i<n;i++)

{

fprintf(f,"%d ",arr[i]);

}

fclose(f);

return 0;

}

void sort()

{

int i,j,*B;

sortarr = new int [n];

B = new int [n];

for(i=0;i<n;i++) B[i]=0;

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

if(arr[i]>arr[j]) B[i]++;

}

}

printf("\n");

for(i=0;i<n;i++)

{

for(j=i+1;j<n;j++)

{

if(arr[i]==arr[j]) B[i]++;

}

}

for(i=0;i<n;i++)

{

sortarr[B[i]]=arr[i];

}

for(i=0;i<n;i++)

{

arr[i]=sortarr[i];

}

delete B,sortarr;

}

void print()

{

int i;

for(i=0;i<n;i++)

{

printf("%d ",arr[i]);

}

}