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.075 ]
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); }
Criando usuários através de arquivo texto
Binário para Decimal, Hexa, Char
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Não consigo baixar e usar temas no KDE [RESOLVIDO] (5)
Wifi parou de funcionar no Inspirion N4050 com Debian 12 (2)
Como faço boot direto na área de trabalho pelo sddm? [RESOLVIDO] (2)
Mint/Ubuntu desligam ao fechar a tampa (3)
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (22)