StoneHaos

3

Nov 28th, 2021
789
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. // функция проверки конца серии
  4. bool move (FILE * abc)
  5. {
  6.     int tmp;
  7.     tmp = fgetc(abc); //Функция fgets считывает символы из потока до тех пор пока не наступит конец строки или пока не будет достигнут конец файла.
  8.     tmp = fgetc(abc);
  9.     if (tmp != '\'') fseek(abc,-2,SEEK_CUR); // Функция fseek перемещает указатель позиции в потоке. Устанавливает внутренний указатель положения в файле, в новую позицию, которая определяются путем добавления смещения к исходному положению.
  10.     else fseek(abc,1,SEEK_CUR);
  11.     return tmp == '\'' ? true : false;
  12. }
  13.  
  14. // функция сортировки
  15. void sort (){
  16.     FILE *f,*f1,*f2; // файловые
  17.     int a, b; // переменные для чтения из исходного файла
  18.     int x,y;
  19.     int flag;
  20.     x = y = 1;
  21.     while ( x > 0 && y > 0 ) {
  22.         flag = 1;
  23.         x = 0;
  24.         y = 0;
  25.         f = fopen("file.txt","r"); //"r" Режим открытия файла для чтения.
  26.         f1 = fopen("1.txt","w"); //"w" Режим создания файла для записи.
  27.         f2 = fopen("2.txt","w");
  28.         fscanf(f,"%d",&a); //
  29.         if ( !feof(f) ) fprintf(f1,"%d ",a);
  30.         if ( !feof(f) ) // пока не конец файла
  31.             fscanf(f,"%d",&b);
  32.         while ( !feof(f) ) {
  33.             if ( b < a ) {
  34.                 switch (flag) {
  35.                     case 1:{fprintf(f1,"' "); flag = 2; x++; break;}
  36.                     case 2:{fprintf(f2,"' "); flag = 1; y++; break;}
  37.                 }
  38.             }
  39.             if ( flag == 1 ) { fprintf(f1,"%d ",b); x++; }
  40.             else { fprintf(f2,"%d ",b); y++;}
  41.             a = b;
  42.             fscanf(f,"%d",&b);
  43.         }
  44.         if ( y > 0 && flag == 2 ) { fprintf(f2,"'");}
  45.         if ( x > 0 && flag == 1 ) { fprintf(f1,"'");}
  46.         fclose(f2);
  47.         fclose(f1);
  48.         fclose(f);
  49.  
  50.  
  51.  
  52.         //слияние
  53.         f = fopen("file.txt","w");
  54.         f1 = fopen("1.txt","r");
  55.         f2 = fopen("2.txt","r");
  56.         if ( !feof(f1) ) fscanf(f1,"%d",&a);
  57.         if ( !feof(f2) ) fscanf(f2,"%d",&b);
  58.             bool X1, X2;
  59.         while ( !feof(f1) && !feof(f2) ) {
  60.             X1 = X2 = false;
  61.             while ( !X1 && !X2 ) {
  62.                 if ( a <= b ) {
  63.                     fprintf(f,"%d ",a);
  64.                     X1 = move(f1);
  65.                     fscanf(f1,"%d",&a);
  66.                 }
  67.                 else {
  68.                     fprintf(f,"%d ",b);
  69.                     X2 = move(f2);
  70.                     fscanf(f2,"%d",&b);
  71.                 }
  72.             }
  73.             while ( !X1 ) {
  74.                 fprintf(f,"%d ",a);
  75.                 X1 = move(f1);
  76.                 fscanf(f1,"%d",&a);
  77.             }
  78.             while ( !X2 ) {
  79.                 fprintf(f,"%d ",b);
  80.                 X2 = move(f2);
  81.                 fscanf(f2,"%d",&b);
  82.             }
  83.         }
  84.         X1 = X2 = false;
  85.         while ( !X1 && !feof(f1) ) {
  86.             fprintf(f,"%d ",a);
  87.             X1 = move(f1);
  88.             fscanf(f1,"%d",&a);
  89.         }
  90.         while ( !X2 && !feof(f2) ) {
  91.             fprintf(f,"%d ",b);
  92.             X2 = move(f2);
  93.             fscanf(f2,"%d",&b);
  94.         }
  95.         fclose(f2);
  96.         fclose(f1);
  97.         fclose(f);
  98.     }
  99. }
  100.  
  101.  
  102. int main() {
  103.     sort();
  104.     return 0;
  105. }
RAW Paste Data