Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marco_dev

Algoritmo Portugol para informar os números perfeitos

Recommended Posts

Pessoal,

Estou fazendo um curso de lógica e no momento me encontro no aprendizado de estruturas de repetição. Ocorre que estou com dificuldade para resolver o seguinte algoritmo:

Escreva um programa para informar todos os números perfeitos entre 1 e 104.

Tenho como exemplo, um algoritmo que informa se um número ao ser digitado é ou não perfeito. Por isso estou tentando utilizá-lo por acreditar que adaptá-lo ao exercício, seria mais fácil e uma forma de demonstrar que aprendi com este mas, não estou conseguindo.

Nesse que estou postando já fiz algumas alterações mas, da forma como está, ele informa que todos os números de 1 até 100 (reduzi para não sobrecarregar a memória até funcionar) não são perfeitos, o que obviamente está errado.

programa
{
	funcao inicio()
	{
		inteiro x, y, resto, soma=0, metade
		
		x = 1
		metade = x/2
		
		enquanto (x <= 100) {
			para (y=1; y <= metade; y=y+1) {
				resto = x % y
				se (resto ==0) {
					soma = soma + y				
				}
			}
			
			se (soma == x) {
				escreva ("\n", x, " é um Número Perfeito")			
			}
			senao {
				escreva ("\n", x, " Não é um Número Perfeito")
			}
		x = x + 1
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A variável metade está sendo iniciado no lugar errado; ela está recebendo 1/2 e nunca muda.

Coloca ela entre o enquanto e o para;

metade = 0
        
        enquanto (x <= 100) {
            metade = x/2
            para (y=1; y <= metade; y=y+1) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei isso itlpps, mas não funciona. Concordo que esteja no lugar errado mas, o curioso é que se usar esse mesmo código apenas alterando permitindo a entrada de um valor depois usando leia e tirando o enquanto ele analisa normalmente se o valor digitado é ou não um número perfeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de conseguir resolver. Venho desde ontem tentando adaptar o código que resolve quando um número é digitado por um usuário à esse em que é dado um número inicial no caso 1 e final, 104.

Após várias tentativas usando inclusive soluções aqui mesmo do fórum, consegui adaptar dessa forma que deixo para quem possa interessar.

programa
{
	funcao inicio()
	{
		inteiro x, y, resto, soma=0, metade
		
		x = 1
		
		para (metade=1; x<=10000; metade=metade+1) {
			para (y=1; y < metade; y=y+1) {
				resto = metade % y
				se (resto == 0) {
					soma = soma + y				
				}
			}
			se (soma == metade) {
				escreva ("\n", metade, " é um Número Perfeito")
				x = x + 1
			}
			soma=0
		}
	}
}

Agradeço pela disposição em ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.