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.245 ]
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); }
Pra quem gosta de RPG. Um sistema de lutas.
Cálculo de Fatorial usando Loop
Organizar variáveis em ordem crescente
Rotinas para manipulação de matrizes
Nenhum comentário foi encontrado.
Wayland em alta, IA em debate e novos ventos para distros e devices
Qt 6.10 e Python 3.14 puxam o ritmo do software livre nesta quarta
Atualizações de Apps, Desktop e Kernel agitam o ecossistema Linux nesta terça-feira
Miyoo Mini Plus + Onion OS (Linux)
IA local no bolso, novo visual no Raspberry Pi OS e mais destaques do software livre
Como mudar o nome de dispositivos Bluetooth via linha de comando
Adicionando o repositório backports no Debian 13 Trixie
Warcraft II Reforged no Linux? (0)
Erro ao fazer remaster usando Penguin eggs (0)
queria saber como instalar o android power tools igual ao winux no lin... (7)