Enunciado:
Fazer um programa que leia uma matriz de 3x3 elementos inteiros, encontre o maior valor da matriz e multiplique este valor por cada elemento da diagonal principal.
Mostre a matriz antes e após as multiplicações.
NOTA: Para descrição detalhada de "Matriz Quadrada" e "Diagonal Principal", veja http://www.mundoeducacao.com.br/matematica/matriz-quadrada.htm .
Observações:
A solução foi implementada usando sub-funções (subrotinas). Neste caso, além da maior clareza obtida com a estruturação do código, ainda usamos a mesma rotina para imprimir a matriz conforme digitada e após atualizada.
Manuseio de Strings
Como a mesma função é usada para imprimir a matriz conforme "digitada" e depois de "atualizada", a função que a imprime recebe um parâmetro do tipo "string" com a palavra que deve ser usada.
Para lidar com strings, precisamos usar um "#include <string>"; desta forma pudemos utilizar a função "strcpy" para atribuir valores às variáveis. O "printf" usa um "%s" para lidar com estas variáveis.
Para maiores detalhes, veja http://mico.ead.cpdee.ufmg.br/cursos/C/c.html , Aula 5 - Matrizes e Strings.
Screenshot:
Código-Fonte:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
// Fazer um programa que leia uma matriz de 3x3 elementos inteiros,
// encontre o maior valor da matriz
// e multiplique este valor por cada elemento da diagonal principal.
// Mostre a matriz antes e após as multiplicações
// NOTA: Para descrição detalhada de
// "Matriz Quadrada" e "Diagonal Principal",
// veja http://www.mundoeducacao.com.br/matematica/matriz-quadrada.htm
// As dimensões da matriz são especificadas através de uma constante
// Estou usando apenas uma, pois para ter uma "Diagonal Principal",
// a matriz TEM de ser quadrada!
const int cstDimensao = 3;
// E como os indexadores vão ser usados em várias funções, vou declará-los aqui, também
int iLinha;
int iColuna;
// -----------------------------------------------------------------------------------------------------
// Funções auxiliares
void LeMatriz(int Matriz[cstDimensao][cstDimensao])
{
for (iLinha =0; iLinha<cstDimensao; iLinha++)
{
for (iColuna=0; iColuna<cstDimensao; iColuna++)
{
printf("Digite o valor do item da matriz para a linha %i, coluna %i: ", iLinha+1, iColuna+1);
scanf("%i",&Matriz[iLinha][iColuna]);
}
}
}
void ExibeMatriz(int Matriz[cstDimensao][cstDimensao], char EstadoMatriz[15])
{
printf("\n------------ Matriz %s ----------------\n", EstadoMatriz);
for (iLinha=0; iLinha<cstDimensao; iLinha++)
{
printf("Linha %i: ", iLinha+1);
for (iColuna=0; iColuna<cstDimensao; iColuna++)
printf("%9i",Matriz[iLinha][iColuna]);
printf("\n");
}
printf("\n");
}
int EncontraMaiorValor(int Matriz[cstDimensao][cstDimensao])
{
int MaiorValor = Matriz[0][0];
for (iLinha=0; iLinha<cstDimensao; iLinha++)
for (iColuna=0; iColuna<cstDimensao; iColuna++)
if (Matriz[iLinha][iColuna] > MaiorValor)
MaiorValor = Matriz[iLinha][iColuna];
}
void MultiplicaDiagonalPrincipal(int Matriz[cstDimensao][cstDimensao], int MaiorValor)
{
int IndiceLinhaColuna;
for (IndiceLinhaColuna=0; IndiceLinhaColuna<cstDimensao; IndiceLinhaColuna++)
Matriz[IndiceLinhaColuna][IndiceLinhaColuna] *= MaiorValor;
}
int main(int argc, char *argv[])
{
int I[cstDimensao][cstDimensao];
char EstadoMatriz[15];
LeMatriz(I);
strcpy(EstadoMatriz,"Digitada");
ExibeMatriz(I, EstadoMatriz);
int MaiorValor = EncontraMaiorValor(I);
MultiplicaDiagonalPrincipal(I, MaiorValor);
strcpy(EstadoMatriz,"Atualizada");
ExibeMatriz(I, EstadoMatriz);
system("PAUSE");
return EXIT_SUCCESS;
}