Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- // функция проверки конца серии
- bool move (FILE * abc)
- {
- int tmp;
- tmp = fgetc(abc); //Функция fgets считывает символы из потока до тех пор пока не наступит конец строки или пока не будет достигнут конец файла.
- tmp = fgetc(abc);
- if (tmp != '\'') fseek(abc,-2,SEEK_CUR); // Функция fseek перемещает указатель позиции в потоке. Устанавливает внутренний указатель положения в файле, в новую позицию, которая определяются путем добавления смещения к исходному положению.
- else fseek(abc,1,SEEK_CUR);
- return tmp == '\'' ? true : false;
- }
- // функция сортировки
- void sort (){
- FILE *f,*f1,*f2; // файловые
- int a, b; // переменные для чтения из исходного файла
- int x,y;
- int flag;
- x = y = 1;
- while ( x > 0 && y > 0 ) {
- flag = 1;
- x = 0;
- y = 0;
- f = fopen("file.txt","r"); //"r" Режим открытия файла для чтения.
- f1 = fopen("1.txt","w"); //"w" Режим создания файла для записи.
- f2 = fopen("2.txt","w");
- fscanf(f,"%d",&a); //
- if ( !feof(f) ) fprintf(f1,"%d ",a);
- if ( !feof(f) ) // пока не конец файла
- fscanf(f,"%d",&b);
- while ( !feof(f) ) {
- if ( b < a ) {
- switch (flag) {
- case 1:{fprintf(f1,"' "); flag = 2; x++; break;}
- case 2:{fprintf(f2,"' "); flag = 1; y++; break;}
- }
- }
- if ( flag == 1 ) { fprintf(f1,"%d ",b); x++; }
- else { fprintf(f2,"%d ",b); y++;}
- a = b;
- fscanf(f,"%d",&b);
- }
- if ( y > 0 && flag == 2 ) { fprintf(f2,"'");}
- if ( x > 0 && flag == 1 ) { fprintf(f1,"'");}
- fclose(f2);
- fclose(f1);
- fclose(f);
- //слияние
- f = fopen("file.txt","w");
- f1 = fopen("1.txt","r");
- f2 = fopen("2.txt","r");
- if ( !feof(f1) ) fscanf(f1,"%d",&a);
- if ( !feof(f2) ) fscanf(f2,"%d",&b);
- bool X1, X2;
- while ( !feof(f1) && !feof(f2) ) {
- X1 = X2 = false;
- while ( !X1 && !X2 ) {
- if ( a <= b ) {
- fprintf(f,"%d ",a);
- X1 = move(f1);
- fscanf(f1,"%d",&a);
- }
- else {
- fprintf(f,"%d ",b);
- X2 = move(f2);
- fscanf(f2,"%d",&b);
- }
- }
- while ( !X1 ) {
- fprintf(f,"%d ",a);
- X1 = move(f1);
- fscanf(f1,"%d",&a);
- }
- while ( !X2 ) {
- fprintf(f,"%d ",b);
- X2 = move(f2);
- fscanf(f2,"%d",&b);
- }
- }
- X1 = X2 = false;
- while ( !X1 && !feof(f1) ) {
- fprintf(f,"%d ",a);
- X1 = move(f1);
- fscanf(f1,"%d",&a);
- }
- while ( !X2 && !feof(f2) ) {
- fprintf(f,"%d ",b);
- X2 = move(f2);
- fscanf(f2,"%d",&b);
- }
- fclose(f2);
- fclose(f1);
- fclose(f);
- }
- }
- int main() {
- sort();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement