tonibiro

PP lab10 prob3

Dec 13th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int** citire_matrice(char *nume_fisier, int *x)
  5. {
  6.     FILE *f = fopen(nume_fisier, "r");
  7.  
  8.     if(f == NULL)
  9.     {
  10.         printf("Eroare deschidere fisier.");
  11.         return NULL;
  12.     }
  13.  
  14.     int **m = (int**) malloc(0);
  15.     int i = 0;
  16.     while(1)
  17.     {
  18.         int n;
  19.         fscanf(f, "%d", &n);
  20.         if(feof(f))
  21.             break;
  22.  
  23.         m = (int**)realloc(m, sizeof(int*) * (i+1));
  24.         m[i] = (int*) malloc(sizeof(int)*(n+1));
  25.         int j;
  26.         m[i][0] = n;
  27.         for(j = 1; j <= n; ++j)
  28.             fscanf(f, "%d", &m[i][j]);
  29.         ++i;
  30.     }
  31.  
  32.     *x = i;
  33.  
  34.     fclose(f);
  35.     return m;
  36. }
  37.  
  38. void afis_matrice(int **a, int n)
  39. {
  40.     printf("n:%d\n", n);
  41.     int i, j;
  42.     for(i = 0; i < n; ++i)
  43.     {
  44.         int m = a[i][0];
  45.         for(j = 1; j <= m; ++j)
  46.             printf("%d ", a[i][j]);
  47.         printf("\n");
  48.     }
  49.     printf("\n");
  50. }
  51.  
  52.  
  53.  
  54. int cmp(const void* a, const void* b)
  55. {
  56.     int x = *((int*)a);
  57.     int y = *((int*)b);
  58.     return x - y;
  59. }
  60.  
  61. int cmp_linii(const void* a, const void* b)
  62. {
  63.     int *x = *((int**)a);
  64.     int *y = *((int**)b);
  65.     return x[0] - y[0];
  66. }
  67.  
  68. void sortare(int **a, int n)
  69. {
  70.     /*sortare pe linii*/
  71.     int i;
  72.     for(i = 0; i < n; ++i)
  73.     {
  74.         int m = a[i][0];
  75.         qsort(a[i]+1, m, sizeof(int), cmp);
  76.     }
  77.  
  78.     /*sortarea linilor*/
  79.     qsort(a, n, sizeof(int*), cmp_linii);
  80.  
  81. }
  82.  
  83. int* interclasare(int *a, int n, int *b, int m)
  84. {
  85.     int *c = (int*) malloc(sizeof(int)*(n+m));
  86.     int i = 1, j = 1, h = 0;
  87.     while(i <= n && j <= m)
  88.         if(a[i] < b[j])
  89.             c[h++] = a[i++];
  90.         else
  91.         {
  92.             if(b[j] < a[i])
  93.                 c[h++] = b[j++];
  94.             else
  95.             {
  96.                 c[h++] = a[i++];
  97.                 c[h++] = b[j++];
  98.             }
  99.         }
  100.     while(i <= n)
  101.         c[h++] = a[i++];
  102.     while(j <= m)
  103.         c[h++] = b[j++];
  104.  
  105.     a = (int*) realloc(a, sizeof(int)*(n+m));
  106.     for(i = 0; i < n + m; ++i)
  107.         a[i+1] = c[i];
  108.  
  109.     free(b);
  110.     free(c);
  111.     return a;
  112. }
  113.  
  114. void afis_vector(int *a, int n)
  115. {
  116.     int i;
  117.     for(i = 0; i < n; ++i)
  118.         printf("%d ", a[i]);
  119.     printf("\n");
  120. }
  121.  
  122. void interclasare_matrice(int **a, int n)
  123. {
  124.     int i;
  125.     for(i = 1; i < n; ++i)
  126.     {
  127.         int x = a[0][0];
  128.         printf("x:%d\n", x);
  129.         a[0][0] += a[i][0];
  130.         printf("a[i][0]:%d\n", a[i][0]);
  131.         a[0] = interclasare(a[0], x, a[i], a[i][0]);//sdrty
  132.     }
  133. }
  134.  
  135. void add_in_fisier(char *nume_fisier, int *a, int n)
  136. {
  137.     FILE *f = fopen(nume_fisier, "w");
  138.  
  139.     int i;
  140.     for(i = 0; i < n; ++i)
  141.         fprintf(f, "%d ", a[i]);
  142.  
  143.  
  144.     fclose(f);
  145. }
  146.  
  147. int main()
  148. {
  149.     int **m, n;
  150.     char nume_fisier[] = "siruri.txt";
  151.     m = citire_matrice(nume_fisier, &n);
  152.  
  153.     afis_matrice(m, n);
  154.  
  155.     sortare(m, n);
  156.  
  157.     afis_matrice(m, n);
  158.  
  159.     interclasare_matrice(m, n);
  160.  
  161.     afis_vector(m[0]+1, m[0][0]);
  162.  
  163.     char vector_final[] = "vector interclasat.txt";
  164.  
  165.     add_in_fisier(vector_final, m[0]+1, m[0][0]);
  166.     return 0;
  167. }
Add Comment
Please, Sign In to add comment