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