invader_zim Postado Maio 14, 2012 Denunciar Share Postado Maio 14, 2012 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); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
invader_zim
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
matriz.h matriz.cLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.