sexta-feira, 6 de setembro de 2013

2013/2-AED-2013.09.05: TAD Matriz (ATUALIZADA)

// tad matriz

// definição da TAD
typedef int TipoChave;

struct t_matriz{
  int capacidade;
  int tamanho;
  int linha;
  int coluna;
  int numLinhas;
  int numColunas;
  TipoChave **a;
};

typedef struct t_matriz TipoMatriz;

// operações da TAD matriz

// criar uma nova matriz
void criarMatriz(TipoMatriz *m, int numLinhas, int numColunas);

void imprimirMatriz(TipoMatriz m);

void inserirMatriz(TipoMatriz *m, TipoChave c);

TipoChave obterElementoEm(TipoMatriz m, int linha, int coluna);

void obterPosicaoDe(TipoMatriz m, TipoChave c, 
    int *linha, int *coluna);

int cheiaMatriz(TipoMatriz m);

// implementacao

void criarMatriz(TipoMatriz *m, int numLinhas, int numColunas){
  int c = 0;
  m->numLinhas = numLinhas;
  m->numColunas = numColunas;
  m->capacidade = numLinhas * numColunas;
  m->tamanho = 0;
  m->linha = 0;
  m->coluna = 0;
  
  m->a = (int **) malloc(numLinhas * sizeof(int *));
  for (c = 0; c < numLinhas; c++){
    m->a[c] = (int *) malloc (numColunas * sizeof (int));
  }
  
}

void imprimirMatriz(TipoMatriz m){
  printf("Tamanho: %d\n", m.tamanho);
  printf("Capacidade: %d\n", m.capacidade);
  printf("Dimensao: %dx%d\n", m.numLinhas, m.numColunas);
  int i, j;
  for (i = 0; i < m.numLinhas; i++){
    for (j = 0; j < m.numColunas; j++){
 printf("%d ", m.a[i][j]);
}
  }
}

TipoChave obterElementoEm(TipoMatriz m, int linha, int coluna){
  if (linha == m.numLinhas || coluna == m.numColunas){
    printf("ERRO: posição incorreta!\n");
return -1;
  }
  return m.a[linha][coluna];
}

void obterPosicaoDe(TipoMatriz m, TipoChave c, 
    int *linha, int *coluna){

int i, j;
for (int i = 0; i < linhas; i++){
 for (j = 0; j < colunas; j++){
   if (c == m.a[i][j]){
 *linha = i;
 *coluna = j;
 return;
}
 }
}
*linha = -1;
*coluna = -1;
}

int cheiaMatriz(TipoMatriz m){
  return m.tamanho - m.capacidade;
}

Nenhum comentário:

Postar um comentário