Created
July 27, 2017 18:34
-
-
Save gavr123456789/c4be7481b3108674e7f17da4e2b4ff00 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <conio.h> | |
#include <stdlib.h> | |
main() | |
{ | |
FILE *in[5], *out[5]; | |
char files [10][15] ={"t1.txt", "t2.txt", "t3.txt", "t4.txt","t5.txt", "t6.txt", "t7.txt", "t8.txt","t9.txt", "t10.txt"}; | |
int number [10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; | |
int i, k, ks, n[5], flag[5], flags, a, minn;//флагс признак окончания файлов, если равен нулю значит все файлы прочитались | |
// 1-e razdelenie | |
//ОТСЮДА | |
in[0] = fopen("int1.txt","r"); | |
flags = !in[0]; | |
for (i=0; i<5; i++) | |
{ | |
out[i] = fopen(files[i+5],"w"); | |
flags += !out[i];//флаги шо открылись все файлы | |
} | |
if (flags)// если флаги остались пустыми значит чето не открылось | |
{ | |
perror ("Error open file"); | |
getch(); | |
return 1; | |
} | |
//ДОСЮДА идет открытие 5ти файлой и они помещаются в out[12345] (массив указателей на файны) | |
ks=0; k=0; | |
fscanf (in[0], "%d", &n[1]); // в n[1] помещается первый символ из первого файла | |
while (!feof(in[0]))// пока не закончится первый файл | |
{ | |
fprintf (out[k], "%d ", n[1]);//записать в первый а потом и остальные файлы, считанные символы из файла | |
while (fscanf (in[0], "%d", &n[0]) != EOF && n[0]>=n[1])//пока читается первый файл | |
{//в н каждую итерацию цикла помщается число из файла | |
fprintf (out[k], "%d ", n[0]);//запись в файл к числа помещенного сначала в н[0] | |
n[1] = n[0]; | |
} | |
n[1] = n[0];//еще одно чтение потому что после предыдищего цикла не произойдет последнего присваивания | |
ks++; | |
k = (k+1)%5; | |
} | |
fclose (in[0]); | |
for (i=0; i<5; i++) | |
fclose (out[i]); | |
if (ks == 1) | |
{ | |
printf ("File sorted"); | |
getch(); | |
return 0; | |
}// все это первое разбиение на пары и сортировка, а если в файле только 1 число то прога завершается, массив сортирован | |
// slyanie + razdelenie | |
do | |
{ | |
for (i=0; i<10; i++) | |
number[i] = (number[i] + 5) % 10; | |
flags = 0; | |
for (i=0; i<5; i++) | |
{ | |
in[i] = fopen(files[number[i]],"r"); | |
out[i] = fopen(files[number[i+5]],"w"); | |
flags = flags || !in[i] || !out[i]; | |
} | |
if (flags) | |
{ | |
perror ("Error open file"); | |
getch(); | |
return 1; | |
} | |
k = 0; ks = 0; | |
flag[0] = fscanf (in[0], "%d", &n[0]) != EOF; | |
flags = flag[0]; | |
a = n[0]; | |
for (i=1; i<5; i++) | |
{ | |
flag[i] = fscanf (in[i], "%d", &n[i]) != EOF; | |
flags += flag[i]; | |
if (flag[i] && n[i]<a) | |
a = n[i]; | |
} | |
while (flags>1) | |
{ | |
for (i=0; !flag[i] ;i++); | |
minn = n[i]; | |
for (i=i+1; i<5; i++) | |
if (flag[i] && minn<n[i]) minn = n[i]; | |
if (minn<a) | |
{ | |
ks++; | |
k = (k+1)%5; | |
for (i=0; !flag[i];i++); | |
minn = i; | |
for (i=i+1; i<5; i++) | |
if (flag[i] && n[minn]>n[i]) minn = i; | |
} | |
else | |
{ | |
for (i=0; !flag[i] || flag[i] && n[i]<a ;i++); | |
minn = i; | |
for (i=i+1; i<5; i++) | |
if (flag[i] && n[i]>=a && n[minn]>n[i]) minn = i; | |
} | |
fprintf (out[k], "%d ", n[minn]); | |
a = n[minn]; | |
flag[minn] = fscanf (in[minn], "%d", &n[minn]) != EOF; | |
for (flags=i=0; i<5; i++) | |
flags += flag[i]; | |
} | |
for (i=0; i<5; i++) | |
if (flag[i]) flags = i; | |
if (n[flags]<a) | |
{ | |
ks++; | |
k = (k+1)%5; | |
} | |
fprintf (out[k], "%d ", n[flags]); | |
while (fscanf (in[flags], "%d", &n[flags]) != EOF) | |
fprintf (out[k], "%d ", n[flags]); | |
ks++; | |
for (i=0; i<5; i++) | |
{ | |
fclose (in[i]); | |
fclose (out[i]); | |
} | |
} | |
while (ks>1); | |
printf ("Result file - %s\n", files[number[k+5]]); | |
getch(); | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment