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: 12.945 ]

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

A - Comando strdup

A - Comando Break

Menu com teclas direcionais

Agenda Telefonica

Filas


  

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