Funções de soma e subtração de matrizes alocadas dinamicamente

Publicado por Daniel Moreira dos Santos (última atualização em 31/08/2009)

[ Hits: 13.316 ]

Homepage: http://www.danielmoreira.wordpress.com

Download sum_sub.tar




Dada a quantidade de linha e coluna das matrizes, fazemos a alocação dinamicamente através da função "cria". O programa inclui as funções:

Matriz* cria (int m, int n); // cria a matriz através de alocação dinâmica

Matriz* ADD (Matriz* A, Matriz* B);
// Soma duas matrizes

Matriz* MINUS (Matriz* A, Matriz* B);
// Subtrai duas matrizes (mesmo conceito da função de cima)

void libera (Matriz* mat);
// Libera a memória alocada

float acessa (Matriz* mat, int i, int j);
// Retorna um valor específico da matriz

void atribui (Matriz* mat, int i, int j, float v);
// Atribui um valor à uma posição específica

int linhas (Matriz* mat);
// Retorna número de linhas

int colunas (Matriz* mat); // Retorna número de colunas

  



Esconder código-fonte

//Este é apenas o matriz.c do programa.

# include <stdio.h>

# include <stdlib.h>

# include "matriz.h"



struct matriz {

       int lin;

       int col;

       float** v;

};



Matriz* cria (int m, int n) {

        int i;

        Matriz* mat=(Matriz*)malloc(sizeof(Matriz));

        if(mat==NULL){

          printf("Memoria Insuficiente!\n");

          exit(1);

        }

        mat->lin=m;

        mat->col=n;

        mat->v=(float**)malloc(m*sizeof(float*));

        for (i=0; i<m; i++) {

            mat->v[i]=(float*)malloc(n*sizeof(float));

        }

return mat;

}



Matriz* ADD(Matriz* A, Matriz* B){

int m, n, i, j;

float plus;

Matriz *C; 

    m=A->lin;

    n=A->col;

        C=cria(m,n);

            for(i=0; i<m; i++){

               for(j=0; j<n; j++){

                  plus=(acessa(A, i, j)) + (acessa(B, i, j));

                  atribui(C, i, j, plus);

               }

            }

return (C);

}



Matriz* MINUS (Matriz* A, Matriz* B){

int m, n, i, j;

float plus;

Matriz *C; 

    m=A->lin;

    n=A->col;

        C=cria(m,n);

            for(i=0; i<m; i++){

               for(j=0; j<n; j++){

                  plus=(acessa(A, i, j)) - (acessa(B, i, j));

                  atribui(C, i, j, plus);

               }

            }

return (C);

}



void libera (Matriz* mat) {

     int i;

     for(i=0; i<mat->lin; i++) {

        free(mat->v[i]);

     }

     free(mat->v);

     free(mat);

}



float acessa (Matriz* mat, int i, int j){

      if (i<0 || i>=mat->lin || j<0 || j>=mat->col) {

         printf("Acesso Invalido!\n");

         exit(1);

      }



return (mat->v[i][j]);

}



void atribui(Matriz* mat, int i, int j, float v) {

     if (i<0 || i>=mat->lin || j<0 || j>=mat->col) {

         printf("Nao foi possivel atribuir o valor!\n");

         exit(1);

      }

      mat->v[i][j]=v;

}



int linhas (Matriz* mat){

    return (mat->lin);

}



int colunas (Matriz* mat){

    return (mat->col);

}


Scripts recomendados

Teste de desempenho com números primos em C

Gerador de numeros da mega-sena tabajara

Gerando uma "number list" de 6 digitos

Calcular determinante de matrizes

Exibi os números primos de um numero recebido pelo usuário, sem estrutura de repetição


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts