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.341 ]
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);
}
Retirar ocorrências de uma substring dentro de uma string
[C] Decompositor de números em fatores primos
Balanceamento de parênteses utilizando Pilha
Preloader.c - Adaptação do Tarik Ahmad (Thiago Alexandre) para linux
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
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
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux









