rendered paste body#include <stdio.h>#include <stdlib.h>char ** initMatrix (char *filename, int *nlinii, int *ncoloane);char ** getSubMatrix (char **A, int l, int c, int *nlinii, int *ncoloane);char ** getXorSubMatrix (char **A, int *nlinii, int *ncoloane);void deleteMatrix (char **A);int isValid (char **A);void finishedTest();struct nod_matrice { struct nod_matrice *parinte; struct nod_matrice *copil; struct nod_matrice *frate; char ** matrice; int linii; int coloane; }; struct nod_matrice init = {NULL, NULL, NULL, NULL, 0, 0};struct nod_matrice * gaseste_Matrice (char **A);char ** initMatrix (char *filename, int *nlinii, int *ncoloane) { FILE *f; f = fopen(filename, "r"); int M, N; fscanf(f, "%d %d", &M, &N); char tmp; fscanf(f, "%c", &tmp); int i,j; char **a; a = (char **) malloc (M * sizeof (char *)); for (i = 0; i < M; i++) a[i] = (char *) malloc (N * sizeof (char)); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) fscanf(f, " %c", &a[i][j]); fscanf(f, "%c", &tmp); } fclose(f); *nlinii = M; *ncoloane = N; struct nod_matrice *nod_matr = (struct nod_matrice *) malloc (sizeof (struct nod_matrice)); nod_matr->matrice = a; nod_matr->linii = M; nod_matr->coloane = N; nod_matr->parinte = init; nod_matr->copil = NULL; nod_matr->frate = init.copil; init.copil = nod_matr; return a; } char ** getSubMatrix (char **A, int l, int c, int *nlinii, int *ncoloane) { struct nod_matrice *p = gaseste_Matrice(A); if (p == NULL || p == &init) { *nlinii = 0; *ncoloane = 0; return NULL; } char **a = p->matrice; char **b; b = (char **) malloc ( ( (p->linii) - l ) * sizeof (char *)); int i; for (i = 0; i < ((p->linii) - l); i++) b[i] = a[l+i] + c; struct nod_matrice *q = (struct nod_matrice *) malloc (sizeof (struct nod_matrice)); q->frate = p->copil; p->copil = q; q->parinte = p; q->copil = NULL; q->matrice = b; q->linii = (p->linii) - l; q->coloane = (p->coloane) - c; return b; } char ** getXorSubMatrix (char **A, int *nlinii, int *ncoloane) { struct nod_matrice *p = gaseste_Matrice(A); if (p == NULL || p == &init) { *nlinii = 0; *ncoloane = 0; return NULL; } char **a = p->matrice; char **b = (char **) malloc ((p->linii) * sizeof (char *)); int i,j; for (i = 0; i < (p->linii); i++) b[i] = (char *) malloc ((p->coloane) * sizeof (char)); struct nod_matrice *q = (struct nod_matrice *) malloc (sizeof (struct nod_matrice)); int linii = p->linii; int coloane = p->coloane; b[0][0] = a[0][0]; i = 0; j = 0; // neterminat } void deleteMatrix (char **A) { struct nod_matrice *p = gaseste_Matrice(A); if (p == NULL || p == &init) return; p->parinte->copil = p->frate; } int isValid (char **A) { } void finishedTest() { }struct nod_matrice * gaseste_Matrice (char **A) { struct nod_matrice *p; p = &init; while (((p->matrice) != A) && (p != NULL)) { if (p.copil != NULL) { p = p.copil; continue; } if ((p.copil == NULL) && (p.frate != NULL)) { p = p.frate; continue; } if ((p.copil == NULL) && (p.frate == NULL)) { while ((p.parinte != &init) && (p.parinte.frate == NULL)) p = p.parinte; p = p.frate; continue; } } return p; }