Mike Shadow 0 Denunciar post Postado Dezembro 3, 2016 Olá a todos, fiz esse algoritmo no visualg e encontro um erro onde o programa fica fazendo os cálculos até retornar um erro. Ao fazer um código em java baseado no algoritmo encontro o resultado desejado. Tentei encontrar o erro mas estou cego, não o encontro.Eis o dito cujo: algoritmo "semnome" // Função : // Autor : // Data : 02/12/2016 // Seção de Declarações var x:numerico y:numerico inicio // Seção de Comandos x<-13 y<-0 enquanto (x <> 1) faca se (x % 2 = 0) entao y <- x / 2 senao y <- 3 * x + 1 fimse x <- y escreva(y) fimenquanto fimalgoritmo Alguém pode dar uma luz - eu sei que deve ser uma besteira, mas não estou com a cabeça boa para interpretá-lo no momento. Compartilhar este post Link para o post Compartilhar em outros sites
itlpps 109 Denunciar post Postado Dezembro 5, 2016 Você não colocou uma condição de saída do seu enquanto. O valor de x nunca muda, está em loop infinito, até da overflow na memória; Compartilhar este post Link para o post Compartilhar em outros sites
Mike Shadow 0 Denunciar post Postado Dezembro 6, 2016 OLá itlpps, cara na boa eu analisei esse código e era para tudo funcionar! Coloquei o desgraçado no netbeans e mandei rodar e tudo funcionou! Agora no visualg não. Ele fica preso na segunda condição onde vai pegar o valor de x e multiplicar por 3 adicionando 1 em seguida, ficando assim: valor inicial de x = 13 verifica se x é diferente de 1. É? Sim! Então vai fazer uma verificação para constatar se o módulo do valor atual de x por 2 é zero é? Não! Então vai para a segunda verificação: pega o valor atual de x multiplica por 3 e acrescenta 1. Ficando assim: x = 13 -> 13*3 +1 = 40 // novo valor de x // x agora é 40. Só que ao invés de ir para a primeira tarefa ele a ignora e vai para a segunda tarefa como se o novo valor de x não fosse par. Fazendo assim: 40 multiplicado por 3 +1 = 121 e assim vai até dá erro de overflow. Na boa não estou entendendo. Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Dezembro 7, 2016 Mas veja aqui: enquanto (x <> 1) faca O X é sempre diferente de 1, ele vai executar isso eternamente. Compartilhar este post Link para o post Compartilhar em outros sites
Mike Shadow 0 Denunciar post Postado Dezembro 7, 2016 Olá Moderadores,primeiramente meu muito obrigado por disponibilizar o tempo precioso dos senhores em questão tão banal.Entendi perfeitamente que o x sempre será diferente de 13 e que é necessário uma condição para sair do loop ou o mesmo será executado até o overflow de memória.Para o visualg eu compreendo que o erro deva ser isso, mas o que me incomoda é que se eu colocar o algoritmo no netbeans o mesmo funciona, entenderam? Não funciona no visualg mas funciona no netbeans.E por falar em netbeans segue o código com sua respectiva saída: public class Regressao { public static void main(String[] args) { int x, y; x = 13; y = 0; while (x != 1) { if (x % 2 == 0) { y = x / 2; } else { y = 3 * x + 1; } x= y; System.out.println(y); } }} SAÍDA: 4020105168421CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos) Entendem a minha agonia em compreender esse tipo de erro? <risos> Partindo do princípio que há um erro no algoritimo por que o mesmo funciona em um programa e em outro não, já que a lógica é a mesma? Compartilhar este post Link para o post Compartilhar em outros sites