aula 100

Descobrindo se uma matriz é um QUADRADO MÁGICO com a linguagem Portugol

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

Deixe um comentário

5 × 1 =

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.