Junte todos os trechos de código solicitados nos exercícios a seguir em um código só, completo, conforme o que se pede.
Um quadrado mágico é uma matriz quadrada na qual a soma dos elementos de cada linha, a soma dos elementos de cada coluna, e a soma dos elementos das diagonais são todos iguais. Por exemplo, a matriz abaixo é um quadrado mágico, pois
:
Um quadrado mágico é uma matriz quadrada na qual a soma dos elementos de cada linha, a soma dos elementos de cada coluna, e a soma dos elementos das diagonais são todos iguais. Por exemplo, a matriz abaixo é um quadrado mágico, pois
8 | 0 | 7 |
---|---|---|
4 | 5 | 6 |
3 | 10 | 2 |
Escreva uma função que recebe uma matriz quadrada, de dimensões
, e retorna 1 se ela é um quadrado mágico, ou 0 caso contrário.
Passo 1
Beleza, o enunciado pede pra gente criar uma função que recebe uma matriz 3×3 e devolve 1 se ela for um quadrado mágico (ou seja, todas as linhas, colunas e as duas diagonais somam o mesmo valor) ou 0 caso contrário. Aqui a matéria é manipulação de matrizes em C (loops, funções e índices), e o que precisamos é:
- Saber como percorrer uma matriz com loops aninhados.
- Entender como calcular somas de linhas, colunas e diagonais.
- Comparar esses resultados para decidir se é mágico ou não.
Passo 2
Primeiro a gente define qual será a “soma mágica” alvo. Uma forma prática é usar a primeira linha:
.
Esse vai ser o valor que todas as outras linhas, colunas e diagonais devem alcançar.
Esse
Passo 3
Agora vamos verificar todas as linhas e colunas:
- Para cada linha
(de 0 a 2), computamos
.
Se, a gente já sabe que não é mágico e retorna 0. - Para cada coluna
(de 0 a 2), computamos
.
Se, retorna 0 também.
Passo 4
Faltam só as diagonais:
- Diagonal principal:
. - Diagonal secundária:
.
Se qualquer uma delas for diferente de, retorna 0. Se chegar até aqui sem dar problema, devolvemos 1, porque todas as somas bateram.
Resposta
#include <stdio.h>
int ehQuadradoMagico(int m[3][3]) {
// Passo 2: soma mágica a partir da primeira linha
int S = m[0][0] + m[0][1] + m[0][2];
// Passo 3: checar linhas e colunas
for (int i = 0; i < 3; i++) {
int somaLinha = 0, somaColuna = 0;
for (int j = 0; j < 3; j++) {
somaLinha += m[i][j];
somaColuna += m[j][i];
}
if (somaLinha != S || somaColuna != S)
return 0;
}
// Passo 4: checar diagonais
int diagP = m[0][0] + m[1][1] + m[2][2];
int diagS = m[0][2] + m[1][1] + m[2][0];
if (diagP != S || diagS != S)
return 0;
// Se passou em tudo, é mágico
return 1;
}
// Exemplo de uso
int main() {
int quad[3][3] = {
{8, 0, 7},
{4, 5, 6},
{3, 10, 2}
};
printf("%d\n", ehQuadradoMagico(quad)); // deve imprimir 1
return 0;
}