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.204 ]
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); }
Patch para Zsnes 1.51 com GCC>=4.3
Painel de configuração placas ati
Nenhum coment�rio foi encontrado.
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Debian 13 "trixie&... lançado! (44)
Rust é o "C da nossa geração"? (3)
Gerenciador de arquivos é finalizado ao abrir pasta específica (2)