Desenvolva um programa na linguagem de programação C que receba do usuário uma matriz de números quaisquer de dimensões 6 \times 6. A seguir, calcule e imprima na tela a média aritmética e o desvio padrão dos elementos de cada linha e de cada coluna.

Passo 1

O que o enunciado pede:
  • Escrever um programa em C que receba do usuário uma matriz de dimensões (6 \times 6).
  • Calcular e imprimir na tela a média aritmética e o desvio padrão dos elementos de cada linha.
  • Calcular e imprimir na tela a média aritmética e o desvio padrão dos elementos de cada coluna.
Informações dadas:
  • A entrada será uma matriz com 6 \times 6 = 36 números quaisquer.
  • Para cada linha i (há 6 linhas) devemos produzir a média e o desvio padrão dos 6 elementos dessa linha.
  • Para cada coluna j (há 6 colunas) devemos produzir a média e o desvio padrão dos 6 elementos dessa coluna.
O que o programa deve produzir:
  • Para cada linha i um par (média, desvio padrão).
  • Para cada coluna j um par (média, desvio padrão).

Passo 2

Definição e fórmula da média aritmética (explicação didática).
  • A média aritmética de n números x_1,x_2,\dots,x_n é a soma dividida por n.
  • Fórmula:
\mu = \frac{1}{n}\sum_{k=1}^{n} x_k
  • Aqui, quando calculamos a média de uma linha, n=6 e os x_k são os 6 elementos dessa linha. Quando calculamos a média de uma coluna, n=6 e os x_k são os 6 elementos da coluna.
  • No programa vamos usar essa fórmula em duas passagens: primeiro somamos os elementos para obter a média, depois usamos a média para calcular o desvio.

Passo 3

Definição e fórmula do desvio padrão (explicação didática e escolha do tipo).
  • Existem duas fórmulas comuns: desvio padrão populacional e amostral. A diferença é se dividimos por n (populacional) ou por n-1 (amostral).
  • Para este exercício vamos usar o desvio padrão populacional, que é a escolha mais simple e adequada quando queremos medir a dispersão dos elementos que temos (sem inferir para uma população maior). A fórmula é:
\sigma = \sqrt{\frac{1}{n}\sum_{k=1}^{n} (x_k - \mu)^2}
  • Nesta fórmula, \mu é a média definida no Passo 2 e n=6 no nosso caso.
  • Explicando em palavras: o desvio padrão é a raiz quadrada da média dos quadrados das diferenças entre cada valor e a média. A ideia é medir, em média, quanto os valores se afastam da média.

Passo 4

Como aplicar isso à matriz e índices (concretizando).
  • Seja a matriz representada em C como \text{a}[i][j] com i=0,1,\dots,5 indicando a linha e j=0,1,\dots,5 indicando a coluna.
  • Para a linha i:
    • Média da linha i:
    \mu_{\text{linha},i} = \frac{1}{6}\sum_{j=0}^{5} \text{a}[i][j]
    • Desvio padrão da linha i:
    \sigma_{\text{linha},i} = \sqrt{\frac{1}{6}\sum_{j=0}^{5} \big(\text{a}[i][j] - \mu_{\text{linha},i}\big)^2}
  • Para a coluna j:
    • Média da coluna j:
    \mu_{\text{coluna},j} = \frac{1}{6}\sum_{i=0}^{5} \text{a}[i][j]
    • Desvio padrão da coluna j:
    \sigma_{\text{coluna},j} = \sqrt{\frac{1}{6}\sum_{i=0}^{5} \big(\text{a}[i][j] - \mu_{\text{coluna},j}\big)^2}

Passo 5

Escolha do método de implementação (por que duas passagens por linha/coluna).
  • Método simples e claro (fácil de escrever e de entender numa prova): fazer duas passagens para cada linha/coluna:
    1. Passagem 1: somar os elementos para obter a média.
    2. Passagem 2: somar os quadrados das diferenças (x-\mu)^2 para obter a variância e depois tirar a raiz para o desvio padrão.
  • Justificativa: é intuitivo e num tamanho fixo pequeno ( 6\times6) a eficiência não é problema e a precisão é boa.
  • Alternativa (mais avançada): algoritmos de uma passada como o de Welford, que atualizam média e variância online. Não usaremos aqui para manter a solução simples e didática.

Passo 6

Detalhes de implementação em C (tipos, arrays, entrada/saída).
  • Usar tipo \text{double} para guardar valores reais e evitar perda de precisão.
  • Declarar matriz: \text{double a[6][6];}
  • Ler \,36 valores do usuário com \text{scanf}.
  • Arrays auxiliares para guardar médias e desvios:
    • \text{double row_mean[6], row_std[6];}
    • \text{double col_mean[6], col_std[6];}
  • Usar função \text{sqrt()} da biblioteca \text{<math.h>} para calcular raiz quadrada.
  • Formatação da saída: imprimir com algumas casas decimais, por exemplo .4f (quatro casas) para ficar legível. Você pode ajustar conforme preferir.

Passo 7

Exemplo rápido e numérico (para ver as fórmulas em ação).
  • Considere uma matriz pequena 2\times 2 como exemplo pedagógico: \begin{pmatrix} 1 & 2\\[4pt] 3 & 4 \end{pmatrix}
  • Para a primeira linha (1,2):
    • Média: \mu = \dfrac{1+2}{2} = 1{,}5.
    • Variância: \dfrac{(1-1{,}5)^2 + (2-1{,}5)^2}{2} = \dfrac{0{,}25 + 0{,}25}{2} = 0{,}25.
    • Desvio padrão: \sigma = \sqrt{0{,}25} = 0{,}5.
  • Mesmo raciocínio para colunas. Esse exemplo mostra cada passo: média primeiro, depois somar quadrados das diferenças e tirar raiz.]

Passo 8

Fluxo final do programa em pseudocódigo (para implementar com segurança)
  • Inicializar matriz.
  • Ler os 36 valores em laços aninhados: para i=0 até 5, para j=0 até 5, ler \text{a}[i][j].
  • Para cada linha i:
    • Calcular soma \sum_{j=0}^5 \text{a}[i][j], obter \mu_{\text{linha},i} = \text{soma}/6.
    • Calcular soma das diferenças ao quadrado \sum_{j=0}^5 (\text{a}[i][j]-\mu)^2, obter variância dividindo por 6 e desvio com \sqrt{}.
  • Para cada coluna j:
    • Calcular soma \sum_{i=0}^5 \text{a}[i][j], obter \mu_{\text{coluna},j} = \text{soma}/6.
    • Calcular soma das diferenças ao quadrado \sum_{i=0}^5 (\text{a}[i][j]-\mu)^2, obter variância dividindo por 6 e desvio com \sqrt{}.
  • Imprimir resultados de forma clara (por exemplo: “Linha 1: media = …, desvio = …”).

Passo 9

Observações finais e dicas para a prova
  • Não esqueça de incluir \text{#include <math.h>} para usar \text{sqrt()} e compilar com a opção adequada se necessário (normalmente não é preciso nada extra).
  • Verifique o índice: em C usamos índices \,0 a \,5 para uma matriz de tamanho \,6.
  • Se quiser usar \,n-1 na divisão para o desvio amostral, substitua o divisor 6 por 5, mas deixe claro que isso muda a interpretação estatística.
  • Teste o programa com valores simples (por exemplo, linhas todas iguais) para verificar se o desvio fica 0, o que confirma que o cálculo está certo.
  • Vai dar certo — respira e escreve o código seguindo o pseudocódigo do Passo 8.

Resposta

#include <stdio.h>
#include <math.h>

int main(void) {
    double a[6][6];
    double row_mean[6], row_std[6];
    double col_mean[6], col_std[6];
    int i, j;

    printf("Digite os 36 elementos da matriz 6x6 (linha por linha):\n");
    for (i = 0; i < 6; i++) {
        for (j = 0; j < 6; j++) {
            if (scanf("%lf", &a[i][j]) != 1) {
                fprintf(stderr, "Erro na leitura.\n");
                return 1;
            }
        }
    }

    /* Cálculo das médias e desvios por linha */
    for (i = 0; i < 6; i++) {
        double sum = 0.0;
        for (j = 0; j < 6; j++) {
            sum += a[i][j];
        }
        row_mean[i] = sum / 6.0;

        double sum_sq_diff = 0.0;
        for (j = 0; j < 6; j++) {
            double diff = a[i][j] - row_mean[i];
            sum_sq_diff += diff * diff;
        }
        row_std[i] = sqrt(sum_sq_diff / 6.0); /* desvio populacional */
    }

    /* Cálculo das médias e desvios por coluna */
    for (j = 0; j < 6; j++) {
        double sum = 0.0;
        for (i = 0; i < 6; i++) {
            sum += a[i][j];
        }
        col_mean[j] = sum / 6.0;

        double sum_sq_diff = 0.0;
        for (i = 0; i < 6; i++) {
            double diff = a[i][j] - col_mean[j];
            sum_sq_diff += diff * diff;
        }
        col_std[j] = sqrt(sum_sq_diff / 6.0); /* desvio populacional */
    }

    /* Impressão dos resultados */
    printf("\nResultados por linha:\n");
    for (i = 0; i < 6; i++) {
        printf("Linha %d: media = %.4f, desvio = %.4f\n", i + 1, row_mean[i], row_std[i]);
    }

    printf("\nResultados por coluna:\n");
    for (j = 0; j < 6; j++) {
        printf("Coluna %d: media = %.4f, desvio = %.4f\n", j + 1, col_mean[j], col_std[j]);
    }

    return 0;
}

Exercícios relacionados