Desenvolva um programa na linguagem de programação C que receba do usuário uma matriz de números quaisquer de dimensões
. 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
. - 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
números quaisquer. - Para cada linha
(há 6 linhas) devemos produzir a média e o desvio padrão dos 6 elementos dessa linha. - Para cada coluna
(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
um par (média, desvio padrão). - Para cada coluna
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úmeros é a soma dividida por . - Fórmula:
- Aqui, quando calculamos a média de uma linha,
e os são os 6 elementos dessa linha. Quando calculamos a média de uma coluna, e os 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
(populacional) ou por (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 é:
- Nesta fórmula,
é a média definida no Passo 2 e 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
com indicando a linha e indicando a coluna. - Para a linha
:- Média da linha
:
- Desvio padrão da linha
:
- Média da linha
- Para a coluna
:- Média da coluna
:
- Desvio padrão da coluna
:
- Média da coluna
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:
- Passagem 1: somar os elementos para obter a média.
- Passagem 2: somar os quadrados das diferenças
para obter a variância e depois tirar a raiz para o desvio padrão.
- Justificativa: é intuitivo e num tamanho fixo pequeno (
) 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
para guardar valores reais e evitar perda de precisão. - Declarar matriz:
- Ler
valores do usuário com . - Arrays auxiliares para guardar médias e desvios:
-
- Usar função
da biblioteca para calcular raiz quadrada. - Formatação da saída: imprimir com algumas casas decimais, por exemplo
(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
como exemplo pedagógico: - Para a primeira linha
:- Média:
. - Variância:
. - Desvio padrão:
.
- Média:
- 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
até , para até , ler . - Para cada linha
:- Calcular soma
, obter . - Calcular soma das diferenças ao quadrado
, obter variância dividindo por e desvio com .
- Calcular soma
- Para cada coluna
:- Calcular soma
, obter . - Calcular soma das diferenças ao quadrado
, obter variância dividindo por e desvio com .
- Calcular soma
- 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
para usar e compilar com a opção adequada se necessário (normalmente não é preciso nada extra). - Verifique o índice: em C usamos índices
a para uma matriz de tamanho . - Se quiser usar
na divisão para o desvio amostral, substitua o divisor por , 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
, 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;
}