Hoje vamos aprender a fazer um programa para dizer se uma matriz é um quadrado mágico ou não, com a linguagem de programação Portugol.
Para resolver esse problema primeiro precisamos saber o que é um quadrado mágico!
O que é um quadrado mágico?
Uma matriz quadrada é dita um QUADRADO MÁGICO se a soma:
- de cada linha;
- de cada coluna;
- da diagonal principal;
- da diagonal secundária;
forem iguais.
Assim, para determinar se uma matriz é um quadrado mágico, precisamos efetuar a soma:
- de cada linha;
- de cada coluna;
- da diagonal principal;
- da diagonal secundária.
Apenas podemos afirmar que uma matriz é um quadrado mágico depois de comparar todos os resultados das somas anteriores e verificar que são iguais.
No código a seguir a primeira soma calculada é a da diagonal principal. Essa soma é armazenada na variável total. Na sequência, toda soma calculada precisa ser exatamente igual ao valor salva na variável total, caso contrário não temos um quadrado mágico.
A variável igual, que foi inicializada com o valor 0, é utilizada para indicar se alguma soma foi diferente, neste caso recebendo o valor 1. Ao final, basta olhar o valor desta variável, se for 0, indica que todas as somas foram iguais e temos um quadrado mágico, caso contrário, se for 1, indica que ao menos uma das somas foi diferente e não temos um quadrado mágico.
programa{
/* Aula 100: Faça um programa que diga se uma matriz 5 x 5 é um quadrado mágico ou não.
*
* linhas Diagonal secundária
* 11 04 17 10 23 => 65 0,4 tam - 1 - l
* 24 12 05 18 06 => 65 1,3 tam - 1 - l
* 07 25 13 01 19 => 65 2,2
* 20 08 21 14 02 => 65 3,1
* 03 16 09 22 15 => 65 4,0
*
* 65 65 65 65 65 65 <= colunas e diagonal principal
*/
funcao inicio(){
const inteiro tam = 5
inteiro jogo[tam][tam] = {{11,04,17,10,23},{24,12,05,18,06},{07,25,13,01,19},{20,08,21,14,02},{03,16,09,22,15}}
inteiro l, c, total, soma = 0, igual = 0
para(l = 0; l < tam; l++)
soma += jogo[l][l]
total = soma
escreva("\n\tDiagonal principal = ", total, "\n\n")
// -------- DIAGONAL SECUNDARIA ---------
soma = 0
para(l = 0; l < tam; l++)
soma += jogo[l][tam - 1 - l]
se(total != soma){
igual = 1
escreva("Diagonal secundária é diferente!\n")
}
// ----- linhas ------
para(l = 0; l < tam; l++){
soma = 0
para(c = 0; c < tam; c++){
soma += jogo[l][c]
}
se(total != soma){
igual = 1
escreva("A linha ", l, " é diferente!\n")
}
}
// ----- colunas ------
para(c = 0; c < tam; c++){
soma = 0
para(l = 0; l < tam; l++)
soma += jogo[l][c]
se(total != soma){
igual = 1
escreva("A coluna ", c, " é diferente!\n")
}
}
se(igual == 0)
escreva("\n\n\tTemos um quadrado mágico!\n\n")
senao
escreva("\n\n\tNão temos um quadrado mágico!\n\n")
para(l = 0; l < tam; l++){
para(c = 0; c < tam; c++){
se(jogo[l][c] < 10)
escreva("0")
escreva(jogo[l][c], " ")
}
escreva("\n")
}
}
}
