aule 126

Como descobrir se uma matriz é um quadrado mágico com a linguagem de programação C?

Seja muito bem vindo à aula 126 do nosso curso gratuito de programação com a linguagem C. Na aula de hoje nós iremos resolver o exercício para descobrir se uma matriz é um quadrado mágico ou não com a linguagem de programação C.

Exercício 15) Dada uma matriz 4 x 4 faça um programa que diga se ela é um quadrado mágico ou não.

Abrir o computador e sair digitando código loucamente na tentativa de resolver um problema é a fórmula para o fracasso. Primeiro, precisamos pensar em como resolver o problema para só depois codificar essa solução.

Você sabe o que é um quadrado mágico?

Uma matriz quadrada é um quadrado mágico se:
– a soma de cada linha;
– a soma de cada coluna;
– a soma da diagonal principal, e;
– a soma da diagonal secundária;
forem exatamente iguais.

Perceba que este exercício não é difícil, ele é trabalhoso.

Primeiro, precisamos calcular e salvar em uma variável uma das somas mencionadas acima, por exemplo, a soma dos elementos da diagonal principal.

Agora que temos a soma da diagonal principal em uma variável, precisamos calcular todas as demais e comparar com a da diagonal principal. Se todas forem iguais, então temos um quadrado mágico.

#include <stdio.h>
#include <stdlib.h>
/*
            Aula 126: Eercício 15
        15) Dada uma matriz 4 x 4 faça um programa que diga se ela é um Quadrado Mágico
        ou não.

        -> Soma de todas as linhas, colunas, diagonal principal e secundária são iguais.
        Exemplo:
        16  3  2 13  = 34
         5 10 11  8  = 34
         9  6  7 12  = 34
         4 15 14  1  = 34
                            16 + 10 + 7 + 1 = 34
        34 34 34 34         13 + 11 + 6 + 4 = 34
*/

int main(){
    int tam = 4, l, c, soma, total, falha = 0;
    int mat[4][4] = {16,3,2,12,5,10,11,8,9,6,7,12,4,15,14,1};

    soma = 0;
    for(l = 0; l < tam; l++){ // soma da diagonal principal
        soma += mat[l][l];
    }
    printf("Diag. principal: %d\n", soma);
    total = soma; // salva a soma da diagonal principal na variável total

    soma = 0;
    for(l = 0; l < tam; l++){ // soma da diagonal secundária
        soma += mat[l][tam - 1 - l];
    }
    printf("Diag. secundaria: %d\n", soma);

    if(total != soma)
        printf("Diagonal secundaria eh diferente!\n");

    for(l = 0; l < tam; l++){ // soma da linhas
        soma = 0;
        for(c = 0; c < tam; c++)
            soma += mat[l][c];
        printf("Linha %d: %d\n", l, soma);

        if(total != soma){
            printf("Linha %d eh diferente\n", l);
            falha++;
        }
    }

    for(c = 0; c < tam; c++){ // soma das colunas são iguais
        soma = 0;
        for(l = 0; l < tam; l++)
            soma += mat[l][c];
        printf("Coluna %d: %d\n", c, soma);

        if(total != soma){
            printf("Coluna %d eh diferente\n", c);
            falha++;
        }
    }

    if(falha == 0)
        printf("\nHe um quadrado magico!!!!\n");

    return 0;
}

Deixe um comentário

doze − dois =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.