Ошибка логического теста графического калькулятора - PullRequest
1 голос
/ 03 ноября 2010

Я попытался создать следующую программу, и сначала она работала нормально.

Label 1
Input "n=", Q
If Q≤0
...Then
Goto 1
Else
Label 2
((Q-2int(Q/2))(3Q+1)+(1-Q+2int(Q/2))(Q/2))->Q
Display Q
If Q≠1
Then
Goto 2
Else
Goto 1

То, что это должно сделать, - это ввести начальный номер, а если его четное число, он наберет Q/2. если он нечетный, он делает 3Q+1 и сохраняет результат обратно в Q. Это гипотеза Коллатца, которая гласит, что если эта итерация будет выполнена, независимо от того, с какого числа вы начинаете, она всегда будет уменьшаться до 1. Некоторые начальные числа требуют большего количества шагов, чтобы достичь, а некоторые - меньше.

Проблема:

Иногда после того, как программа проходит большое количество итераций, она показывает ОШИБКУ, и когда я нажимаю отладку, она наводит курсор на Q в if Q≠1.

Знаете ли вы, почему это происходит? Спасибо.

1 Ответ

0 голосов
/ 03 ноября 2010

Препятствием, которое большинство людей преодолевают при выполнении этой головоломки, является переполнение, вызванное огромными числами - я думаю, что это происходит где-то около 23, IIRC. Это может быть так, но я не понимаю, почему это наведет курсор на Q.

...