Ir para conteúdo

Arquivado

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

Mike Shadow

Gostaria de entender onde estou errando nesse algoritmo.

Recommended Posts

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

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

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

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:

40
20
10
5
16
8
4
2
1
CONSTRUÍ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

×

Informação importante

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