include stdio include stdlib include conio define FN1 file1 bin по убы

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define FN1 "file1.bin" // по убыванию
#define FN2 "file2.bin" // по возрастани
#define FNRES "result.bin" // результат
void genTest()
{
FILE *f1,*f2;
int i;
f1 = fopen(FN1,"w+b");
f2 = fopen(FN2,"w+b");
for(i=0;i<6;i+=2)
fwrite(&i,sizeof(int),1,f1);
for(i=7;i>2;i-=2)
fwrite(&i,sizeof(int),1,f2);
fclose(f1);
fclose(f2);
}
void showF()
{
FILE *f1, *f2, *res;
int i;
if(f1=fopen(FN1,"r"))
{
puts("\nF1:");
while(!feof(f1))
{
if(!(fread(&i,sizeof(int),1,f1))) break;
printf(" %d",i);
}
} else printf("\nCant open F1");
if(f2=fopen(FN2,"r"))
{
puts("\nF2:");
while(!feof(f2))
{
if(!(fread(&i,sizeof(int),1,f2))) break;
printf(" %d",i);
}
} else printf("\nCant open F2");
if(res=fopen(FNRES,"r"))
{
puts("\nFRES:");
while(!feof(res))
{
if(!(fread(&i,sizeof(int),1,res))) break;
printf(" %d",i);
}
} else printf("\nCant open FRES");
}
void sortIn()
{
FILE *f1, *f2, *fres;
fpos_t p1,p2,p3;
int d1,d2;
bool canReadF1=true, canReadF2=true;
f1 = fopen(FN1,"rb");
f2 = fopen(FN2,"rb");
fseek(f1,0,SEEK_END); // шуруем в конец
//fgetpos(f1,&p1);
fres = fopen(FNRES,"w+b");
while(1)
{
if (canReadF1)
{
fseek(f1,-sizeof(int),SEEK_CUR);
fread(&d1,sizeof(int),1,f1);
fseek(f1,-sizeof(int),SEEK_CUR);
fgetpos(f1,&p1);
}
if (canReadF2)
{
fread(&d2,sizeof(int),1,f2);
}
if(p1 && feof(f2)) // если дошли до конца f2 и в f1 еще есть элементы
{
do
{
fwrite(&d1,sizeof(int),1,fres);
fseek(f1,-sizeof(int),SEEK_CUR);
fread(&d1,sizeof(int),1,f1);
fseek(f1,-sizeof(int),SEEK_CUR);
fgetpos(f1,&p1);
fwrite(&d1,sizeof(int),1,fres);
} while(p1);
return;
}
if(!feof(f2) && !p1) // если дошли до конца f1 и в f2 еще есть элементы
{
do
{
fread(&d2,sizeof(int),1,f2);
fwrite(&d2,sizeof(int),1,fres);
} while(!feof(f2));
return;
}
if(d1<d2)
{
fwrite(&d2,sizeof(int),1,fres);
canReadF1=false;
canReadF2=true;
}
else
{
fwrite(&d1,sizeof(int),1,fres);
canReadF1=true;
canReadF2=false;
}
}
}
int main()
{
genTest();
sortIn();
showF();
getch();
return 0;
}