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.206 ]
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); }
Pedindo uma senha ao usuário!!!
Manipulação de letras maiusculas e minusculas
Nenhum coment�rio foi encontrado.
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
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
Realizar overclock no Miyoo Mini (plus ou normal)
Otimização de memória para máquinas modestas
Unbuntu não atualiza o firmware [RESOLVIDO] (2)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (0)
Dúvidas sobre a originalidade de conteúdos online (10)
Erro de interface de Rede no Virt Manager dentro Debian 13 KDE [RESOLV... (12)