aula 76

Exercício 4 | Leia um número x maior que 1 e diga se é um número perfeito em Portugol

Nesta aula vamos resolver o exercício 4 com a linguagem de programação portugol.

4) Leia um número x maior que 1 e diga se ele é um número perfeito.

Antes de qualquer ação precisamos entender o que é um número perfeito, só assim conseguiremos elaborar um algoritmo para descobrir se um número é um número perfeito ou não.

O que é um número perfeito?

Dizemos que x é um número perfeito quando a soma de seus divisores, exceto o próprio x, é igual a x.

A princípio pode parecer confuso, mas não é. Vamos a alguns exemplos de números perfeitos.

6 -> 1 + 2 + 3 = 6

Os divisores do número 6 são: 1, 2, 3 e 6. Excluindo o próprio 6, temos: 1, 2 e 3. A soma desses divisores é: 1 + 2 + 3 = 6.

28 -> 1 + 2 + 4 + 7 + 14 = 28

O número 28 também é um número perfeito pois a soma de seus divisores exceto o próprio 28 também resulta em 28.

Agora que já sabemos identificar um número perfeito, vamos elaborar um algoritmo para fazer isso.

Como precisamos descobrir os divisores de x entre 1 e x – 1, inicializamos a variável valor com 1 e divisores com zero.

Iniciamos com uma repetição, garantindo que será digitado um valor maior que 1.

Em seguida temos a repetição em busca dos divisores de x. Se o resto da divisão de x por valor for igual a zero, significa que valor é um divisor de x, então já somamos ele na variável divisores.

O conteúdo da variável valor sempre será incrementado em uma unidade, independente do resultado do teste, até ser igual a x – 1.

Quando a variável valor for exatamente igual a x a repetição será finalizada. Agora basta verificar se o valor da variável divisores, que contém a soma dos divisores exceto o próprio x, é exatamente igual a x.

programa{
	
	funcao inicio(){
		inteiro x, valor = 1, divisores = 0

		faca{
			escreva("Digite um valor maior que 1: ")
			leia(x)
		}enquanto(x < 2)

		enquanto(valor < x){
			se(x % valor == 0){
				escreva(valor,", ")
				divisores += valor
			}
			valor++
		}
		escreva("\n\n")
		se(divisores == x){
			escreva(x, " é um número perfeito.\n")
		}
		senao{
			escreva(x, " não é um número perfeito.\n")
		}
	}
}


Deixe um comentário

dois × 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.