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.313 ]
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);
}
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como montar um servidor de backup no linux
Trazendo de volta o Serviços em Segundo Plano no Plasma6
Ativando e usando "zoom" no ambiente Cinnamon
Vídeo Nostálgico de Instalação do Conectiva Linux 9
Como realizar um ataque de força bruta para desobrir senhas?
780 mil usuários do Janelas baIxaram Linux em um mês (3)
Servidor para arquivos e banco de dados (2)
Atualizei meu ubuntu e desliguei e ele não inicia corretamente (12)









