Skip to content

Instantly share code, notes, and snippets.

@gavr123456789
Created July 27, 2017 18:34
Show Gist options
  • Save gavr123456789/c4be7481b3108674e7f17da4e2b4ff00 to your computer and use it in GitHub Desktop.
Save gavr123456789/c4be7481b3108674e7f17da4e2b4ff00 to your computer and use it in GitHub Desktop.
#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