Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int** citire_matrice(char *nume_fisier, int *x)
- {
- FILE *f = fopen(nume_fisier, "r");
- if(f == NULL)
- {
- printf("Eroare deschidere fisier.");
- return NULL;
- }
- int **m = (int**) malloc(0);
- int i = 0;
- while(1)
- {
- int n;
- fscanf(f, "%d", &n);
- if(feof(f))
- break;
- m = (int**)realloc(m, sizeof(int*) * (i+1));
- m[i] = (int*) malloc(sizeof(int)*(n+1));
- int j;
- m[i][0] = n;
- for(j = 1; j <= n; ++j)
- fscanf(f, "%d", &m[i][j]);
- ++i;
- }
- *x = i;
- fclose(f);
- return m;
- }
- void afis_matrice(int **a, int n)
- {
- printf("n:%d\n", n);
- int i, j;
- for(i = 0; i < n; ++i)
- {
- int m = a[i][0];
- for(j = 1; j <= m; ++j)
- printf("%d ", a[i][j]);
- printf("\n");
- }
- printf("\n");
- }
- int cmp(const void* a, const void* b)
- {
- int x = *((int*)a);
- int y = *((int*)b);
- return x - y;
- }
- int cmp_linii(const void* a, const void* b)
- {
- int *x = *((int**)a);
- int *y = *((int**)b);
- return x[0] - y[0];
- }
- void sortare(int **a, int n)
- {
- /*sortare pe linii*/
- int i;
- for(i = 0; i < n; ++i)
- {
- int m = a[i][0];
- qsort(a[i]+1, m, sizeof(int), cmp);
- }
- /*sortarea linilor*/
- qsort(a, n, sizeof(int*), cmp_linii);
- }
- int* interclasare(int *a, int n, int *b, int m)
- {
- int *c = (int*) malloc(sizeof(int)*(n+m));
- int i = 1, j = 1, h = 0;
- while(i <= n && j <= m)
- if(a[i] < b[j])
- c[h++] = a[i++];
- else
- {
- if(b[j] < a[i])
- c[h++] = b[j++];
- else
- {
- c[h++] = a[i++];
- c[h++] = b[j++];
- }
- }
- while(i <= n)
- c[h++] = a[i++];
- while(j <= m)
- c[h++] = b[j++];
- a = (int*) realloc(a, sizeof(int)*(n+m));
- for(i = 0; i < n + m; ++i)
- a[i+1] = c[i];
- free(b);
- free(c);
- return a;
- }
- void afis_vector(int *a, int n)
- {
- int i;
- for(i = 0; i < n; ++i)
- printf("%d ", a[i]);
- printf("\n");
- }
- void interclasare_matrice(int **a, int n)
- {
- int i;
- for(i = 1; i < n; ++i)
- {
- int x = a[0][0];
- printf("x:%d\n", x);
- a[0][0] += a[i][0];
- printf("a[i][0]:%d\n", a[i][0]);
- a[0] = interclasare(a[0], x, a[i], a[i][0]);//sdrty
- }
- }
- void add_in_fisier(char *nume_fisier, int *a, int n)
- {
- FILE *f = fopen(nume_fisier, "w");
- int i;
- for(i = 0; i < n; ++i)
- fprintf(f, "%d ", a[i]);
- fclose(f);
- }
- int main()
- {
- int **m, n;
- char nume_fisier[] = "siruri.txt";
- m = citire_matrice(nume_fisier, &n);
- afis_matrice(m, n);
- sortare(m, n);
- afis_matrice(m, n);
- interclasare_matrice(m, n);
- afis_vector(m[0]+1, m[0][0]);
- char vector_final[] = "vector interclasat.txt";
- add_in_fisier(vector_final, m[0]+1, m[0][0]);
- return 0;
- }
Add Comment
Please, Sign In to add comment