All pastes #1732977 Raw Edit

tema 5 - versiunea 2

public c v1 · immutable
#1732977 ·published 2009-12-31 13:01 UTC
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;      }