Advertisement
VSZM

Számokat tartalmazó bináris fájlt rendező program.

May 15th, 2014
317
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3.  
  4.  
  5.  
  6. int main()
  7. {
  8.     FILE* f;
  9.     int n, tmp, i, j;  
  10.     f = fopen("szamok.bin", "rwb+");
  11.  
  12.     printf("Rendezés előtt:\n");
  13.    
  14.     // Megszámoljuk, hány elem van a fájlban.
  15.     n = 0;
  16.     while(fread(&tmp, sizeof(int), 1, f) > 0)
  17.     {
  18.         n++;
  19.         printf("%d ", tmp);
  20.     }
  21.  
  22.     rewind(f);
  23.  
  24.     // Minimum kiválasztásos rendezés
  25.     for(i = 0; i < n-1 ;++i)
  26.     {
  27.         int min_value, min_index;
  28.         min_index = i;
  29.         fseek(f, sizeof(int) * i, SEEK_SET);
  30.         fread(&min_value, sizeof(int), 1, f);
  31.  
  32.         //printf("i kezdetben = %d", min_value);
  33.  
  34.         for(j = i+1; j < n ;++j)
  35.         {
  36.             int act_value;
  37.             fseek(f, sizeof(int) * j, SEEK_SET);
  38.             fread(&act_value, sizeof(int), 1, f);
  39.            
  40.             if(act_value < min_value)
  41.             {
  42.                 min_value = act_value;
  43.                 min_index = j;
  44.             }
  45.         }
  46.  
  47.     //  printf(" min value = %d\n", min_value);
  48.         if(min_index != i)// volt az i. értéknél kisebb a maradék résztömbben
  49.         {
  50.        
  51.             int i_value;
  52.             fseek(f, sizeof(int) * i, SEEK_SET);
  53.             fread(&i_value, sizeof(int), 1, f);// az i. érték beolvasása
  54.  
  55.        
  56.             fseek(f, sizeof(int) * i, SEEK_SET);
  57.             fwrite(&min_value, sizeof(int), 1, f);//Minimum érték beírása az i. pozícióba
  58.  
  59.             fseek(f, sizeof(int) * min_index, SEEK_SET);
  60.             fwrite(&i_value, sizeof(int), 1, f);// Az i. érték beírása a min_index pozícióba
  61.         }
  62.  
  63.     }
  64.  
  65.  
  66.     rewind(f);
  67.  
  68.     printf("\nRendezés után:\n");
  69.     for(i = 0; i < n ; ++i)
  70.     {
  71.         int tmp;
  72.         fread(&tmp, sizeof(int), 1, f);
  73.         printf("%d ", tmp);
  74.     }
  75.     printf("\n\n");
  76.  
  77.     fclose(f);
  78.     return 0;
  79. }
Advertisement
RAW Paste Data Copied
Advertisement