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.289 ]
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);
}
Como verificar a validade de um CPF
Conversor decimal para binario para GNU/LINUX
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (5)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









