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.053 ]

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

Função para concatenar texto ilimitada

Mini-editor de texto intuitivo em ncurses

JokenPo em C

Matrizes esparsas, produto por escalar e produto por um vetor

Damas em C


  

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