Marco_dev 0 Denunciar post Postado Novembro 24, 2016 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
itlpps 109 Denunciar post Postado Novembro 25, 2016 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
Marco_dev 0 Denunciar post Postado Novembro 25, 2016 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
Marco_dev 0 Denunciar post Postado Novembro 25, 2016 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