Оператор Repeat всегда повторяется ровно один раз

Я только начинаю программировать TI-86 BASIC со следующей игрой в угадайку:

:randInt(1,10)→X
:0→A
:Repeat A=X
:Disp "Guess the number"
:Input "between 1 and 10.", A
:End

Насколько я понимаю оператор Repeat, блок будет выполняться до тех пор, пока условие не станет истинным. В моем случае я обнаружил, что блок выполняется ровно один раз. Это означает, что значение A, которое вводит пользователь, всегда совпадает со случайным значением X, во что мне трудно поверить.

Любая идея, что я делаю неправильно?


person Distortum    schedule 20.12.2015    source источник
comment
У меня отлично работает на TI-84 SE+. Не могли бы вы опубликовать свой полный код, а не только этот отрывок?   -  person user3932000    schedule 20.12.2015
comment
Это это полный код. Программа должна завершиться, когда догадка окажется правильной. Полировка может прийти позже, если вообще.   -  person Distortum    schedule 21.12.2015
comment
Ха, это очень странно. Даже на TI-89 оператор равенства используется для сравнения двух объектов. Может попробовать ==?   -  person user3932000    schedule 22.12.2015
comment
Да. См. мой ответ.   -  person Distortum    schedule 22.12.2015


Ответы (2)


= - это "назначение переменной уравнения", а не проверка на равенство

У меня нет TI-86, но я уверен, что это правильно.

Менее часто используемый метод сохранения значения в переменной — оператор «=». Код

:A=45

делает почти то же самое, что и [стрелка сохранения], за исключением того, что она делает A «переменной уравнения» (которую можно использовать в решателе уравнений) вместо «действительной переменной».

Источник

Поскольку A сохраняется в, выражение A=X вернет новое значение A; то есть X. Поскольку TI-BASIC считает все ненулевые числа истинными, а X всегда находится в диапазоне от 1 до 10, A=X присваивает X значение A и возвращает истинное значение, тем самым останавливая цикл.

Как сказал OP, вместо этого используйте == для сравнения на равенство.

person lirtosiast    schedule 20.12.2015
comment
Спасибо, это работает. Я бы хотел, чтобы был менее неуклюжий способ сравнить две переменные на равенство. Я думал об использовании TI-86 в качестве среды, не отвлекающей моего сына, для изучения программирования, но теперь я не уверен. - person Distortum; 21.12.2015
comment
While A/=X (/= представляет знак «не равно») тоже подойдет, верно? - person ; 21.12.2015

Переменные в версии TI-BASIC для TI-86 можно сравнивать с помощью оператора ==. Так программа становится

:randInt(1,10)→X
:0→A
:Repeat A==X
:Disp "Guess the number"
:Input "between 1 and 10.", A
:End
person Distortum    schedule 21.12.2015