Tucancitto

FP - lucru cu fișiere (sortarea unui vector citit din fișier)

Jan 31st, 2021 (edited)
1,073
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. int* alocareVector(int dimensiune)
  5. {
  6.     int* vector;
  7.     vector = (int*)calloc(dimensiune + 1, sizeof(int));
  8.     if (!vector)
  9.     {
  10.         perror(0);
  11.         return -1;
  12.     }
  13.     return vector;
  14. }
  15.  
  16. int* citireVector(FILE* fisier, int dimensiune)
  17. {
  18.     int* vector;
  19.     vector = alocareVector(dimensiune);
  20.  
  21.     fopen_s(&fisier, "numere.txt", "r");
  22.     if (!fisier)
  23.         return -1;
  24.  
  25.     fseek(fisier, sizeof(int), SEEK_SET);
  26.     fseek(fisier, -1, SEEK_CUR);
  27.  
  28.     for (int i = 0; i < dimensiune; i++)
  29.         fscanf_s(fisier, "%d", &vector[i]);
  30.     return vector;
  31. }
  32.  
  33. long lungimeFisier(FILE* fisier)
  34. {
  35.     if (!fisier)
  36.         return -1;
  37.  
  38.     long poz = ftell(fisier);
  39.     fseek(fisier, 0L, SEEK_END);
  40.     long l = ftell(fisier);
  41.     fseek(fisier, poz, SEEK_SET);
  42.  
  43.     return l;
  44. }
  45.  
  46. void QuickSort(int* vector, int stanga, int dreapta)
  47. {
  48.     int i = stanga, j = dreapta;
  49.     int pivot = vector[(stanga + dreapta) / 2];
  50.  
  51.     while (i <= j)
  52.     {
  53.         while (vector[i] < pivot)
  54.             i++;
  55.         while (vector[j] > pivot)
  56.             j--;
  57.         if (i <= j)
  58.         {
  59.             int tmp = vector[i];
  60.             vector[i] = vector[j];
  61.             vector[j] = tmp;
  62.             i++;
  63.             j--;
  64.         }
  65.     }
  66.  
  67.     if (stanga < j)
  68.         QuickSort(vector, stanga, j);
  69.     if (i < dreapta)
  70.         QuickSort(vector, i, dreapta);
  71. }
  72.  
  73. void afisareVector(int* vector, int dimensiune)
  74. {
  75.     for (int i = 0; i < dimensiune; i++)
  76.         printf("%d ", vector[i]);
  77.     puts("");
  78. }
  79.  
  80. void main()
  81. {
  82.     int dimensiune;
  83.     int* vector;
  84.  
  85.     FILE* fisier;
  86.     fopen_s(&fisier, "numere.txt", "r");
  87.     if (!fisier)
  88.         return;
  89.  
  90.     fscanf_s(fisier, "%d", &dimensiune);
  91.     vector = citireVector(fisier, dimensiune);
  92.  
  93.     fseek(fisier, 0, SEEK_END);
  94.     printf("Lungimea fisierului: %ld \n", lungimeFisier(fisier));
  95.  
  96.     printf("Am citit din fisier: ");
  97.     afisareVector(vector, dimensiune);
  98.  
  99.     printf("Vectorul dupa sortare: ");
  100.     QuickSort(vector, 0, dimensiune - 1);
  101.     afisareVector(vector, dimensiune);
  102.  
  103.     free(vector);
  104.     fclose(fisier);
  105. }
Add Comment
Please, Sign In to add comment