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") } } }