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 8+0+7=4+5+6=3+10+2=8+4+3=0+5+10=7+6+2=8+5+2=3+5+7=15 :
8 0 7
4 5 6
3 10 2
Escreva uma função que recebe uma matriz quadrada, de dimensões 3 times 3, 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 é:
  1. Saber como percorrer uma matriz com loops aninhados.
  2. Entender como calcular somas de linhas, colunas e diagonais.
  3. 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.

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;
}

Exercícios relacionados