Ir para conteúdo
Fórum Script Brasil
  • 0

Alocação Dinâmica de Matrizes


invader_zim

Pergunta

O exercício é o seguinte:

Faça um programa que preencha uma matriz 3x5 com números inteiros e some

cada uma das linhas, armazenando o resultado das somas em um vetor.

A seguir, o programa deverá multiplicar cada elemento da matriz pela

soma da linha correspondente e mostrar a matriz resultante.

Obs: Utilize as funções de criação de vetores e matrizes e trabalhe com

o conceito de modularização. As funções de criação de matrizes e vetores

devem ser transformadas em bibliotecas (arquivo .h) e importadas no

programa principal.

Estou resolvendo uma série de exercícios e estou chegando a algoritmos corretos (eles cumprem o que prometem),

mas eu preciso saber de que forma eu posso melhorar esses algoritmos; torná-los mais legíveis, eficientes etc.

Eu gostaria de saber o que vocês acham do código; gostaria de saber em que pontos eu poderia melhorá-lo.

Os códigos-fonte estão listados a seguir:

main.c

#include <stdio.h>
#include "matriz.h"

int main(void) {
   tMatriz matriz;
   tVetor vetor;

   matriz = AlocaMatriz(3, 5);
   vetor = AlocaVetor(3);

   PreencheMatriz(matriz, 3, 5);
   ImprimeMatriz(matriz, 3, 5);
   SomaLinhas(matriz, vetor, 3, 5);
   MultiplicaMatriz(matriz, vetor, 3, 5);
   ImprimeMatriz(matriz, 3, 5);
   LiberaMatriz(matriz, 3);
   LiberaVetor(vetor);

   return 0;
}
matriz.h
#ifndef MATRIZ_H_INCLUDED
#define MATRIZ_H_INCLUDED

typedef int** tMatriz;
typedef int*  tVetor;

tMatriz AlocaMatriz(unsigned m, unsigned n);
tVetor AlocaVetor(unsigned tam);
void PreencheMatriz(tMatriz matriz, unsigned m, unsigned n);
void ImprimeMatriz(tMatriz matriz, unsigned m, unsigned n);
void SomaLinhas(tMatriz matriz, tVetor soma, unsigned m, unsigned n);
void MultiplicaMatriz(tMatriz matriz, tVetor soma, unsigned m, unsigned n);
void LiberaMatriz(tMatriz matriz, unsigned m);
void LiberaVetor(tVetor vetor);

#endif // MATRIZ_H_INCLUDED
matriz.c
#include <stdio.h>
#include <stdlib.h>
#include "matriz.h"

tMatriz AlocaMatriz(unsigned m, unsigned n) {
   tMatriz matriz;
   unsigned i;

   matriz = (tMatriz) malloc(m*sizeof(int*));
   if (matriz == NULL)
      exit(EXIT_FAILURE);

   for (i = 0; i < m; i++) {
      matriz[i] = (int*) malloc(n*sizeof(int));
      if (matriz[i] == NULL)
         exit(EXIT_FAILURE);
   }

   return matriz;
}

tVetor AlocaVetor(unsigned tam) {

   tVetor vetor = (tVetor) malloc(tam*sizeof(int));

   return vetor;
}

void PreencheMatriz(tMatriz matriz, unsigned m, unsigned n) {
   unsigned i, j;

   for (i = 0; i < m; i++)
      for(j = 0; j < n; j++) {
         printf("Informe o valor de m[%u][%u]: ", i, j);
         scanf("%d", &matriz[i][j]);
      }
}

void ImprimeMatriz(tMatriz matriz, unsigned m, unsigned n) {
   unsigned i, j;

   printf("\n\n");
   for (i = 0; i < m; i++) {
      for (j = 0; j < n; j++) {
      printf("%4d ", matriz[i][j]);
      }
      printf("\n\n");
   }
   printf("\n\n");
}

void SomaLinhas(tMatriz matriz, tVetor soma, unsigned m, unsigned n) {
   unsigned i, j;

   for (i = 0; i < m; i++)
      soma[i] = 0;

   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
         soma[i] += matriz[i][j];

}

void MultiplicaMatriz(tMatriz matriz, tVetor soma, unsigned m, unsigned n) {
   unsigned i, j;

   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
         matriz[i][j] *= soma[i];

}

void LiberaMatriz(tMatriz matriz, unsigned m) {
   unsigned i;

   for (i = 0; i < m; i++)
      free(matriz[i]);

   free(matriz);
}

void LiberaVetor(tVetor vetor) {
   free(vetor);
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...