#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
// Fazer um programa que leia uma matriz 2x3 de números reais
// e calcule a média dos seus elementos.
// Imprimir o resultado.
//
// "Versão Plus"
// Para ficar mais divertido, vamos calcular a diferença entre cada elemento e a média - sua "variância".
// E vamos mostrar o resultado de uma maneira mais formatada.
// Usaremos constantes para a quantidade de Linhas e Colunas da Matriz
const int cstNumLinhas = 2;
const int cstNumColunas = 3;
// Definição da Matriz
float M[2][3];
// E de seus indexadores
int iLinha,iColuna;
// Digitação da Matriz
for (iLinha=0; iLinha<cstNumLinhas; iLinha++)
{
for (iColuna=0; iColuna<cstNumColunas; iColuna++)
{
printf("Digite o valor M da linha %i, coluna %i: ",iLinha+1, iColuna+1);
scanf("%f",&M[iLinha][iColuna]);
}
}
// Cálculo da Média:
// Primeiro somar todos os elementos da matriz:
float Total = 0;
// E numa homenagem ao Professor Newton, vamos ser 'ultra-concisos' e usar para isto apenas uma linha de comando
for (iLinha=0; iLinha<cstNumLinhas; iLinha++) for (iColuna=0; iColuna<cstNumColunas; iColuna++) Total += M[iLinha][iColuna];
// E agora calcular a média
float Media = Total / (cstNumLinhas * cstNumColunas);
printf("\n----- Media ------\n");
printf("[%.2f]\n\n", Media);
// Imprimindo a Matriz e as Variancias
// Primeiro, os cabecalhos (note que usamos um loop para o cabeçalho das colunas...)
printf("------ Elementos da Matriz Digitada e suas Variancias ----------\n");
printf("Linha ");
for (iColuna=0; iColuna<cstNumColunas; iColuna++) printf("Valor Variancia ");
printf("\n");
// Agora, os valores e suas variancias:
// Temos um loop para as linhas
// e outro mais interno para as colunas.
// Note que o loop mais externo, das linhas, primeiro imprime o número da linha,
// então "dispara" o loop mais interno, das colunas,
// e finalmente faz a mudança da linha.
// O loop das colunas simplesmente vai imprimindo o valor e sua variância, sem mudar de linha.
for (iLinha=0; iLinha<cstNumLinhas; iLinha++)
{
printf("%i ", iLinha+1);
for (iColuna=0; iColuna<cstNumColunas; iColuna++)
{
// para detalhes sobre os "flags" ("+"), "width ("11"), "precision (".2") e "specifier" ("f")
// usados no comando abaixo, consulte o excelente site http://www.cplusplus.com/reference/clibrary/cstdio/printf/
printf("%+11.2f %+11.2f ", M[iLinha][iColuna], M[iLinha][iColuna]-Media);
}
printf("\n");
}
system("PAUSE");
return EXIT_SUCCESS;
}