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
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);
}
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
Nenhum comentário foi encontrado.
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Pendrive Bootable [RESOLVIDO] (5)
Desenvolvi um programa de hot corner (você colocar o mouse nos cantos)... (3)









