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.169 ]
Homepage: http://www.danielmoreira.wordpress.com
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
//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); }
Matrizes esparsas, produto por escalar e produto por um vetor
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Aplicativo simples para gravar tela
Quebra de linha na data e hora no Linux Mint
trocar linhas [RESOLVIDO] (11)
Firefox não abre em usuário não administradores (2)
Ubuntu com problemas no áudio (1)