Как создавать формы ввода TI-BASIC (TI-84+)?

На языке программирования TI-BASIC (в частности, TI-84+), как вы создаете формы ввода, такие как те, которые включены в приложения по умолчанию на TI-84+.

На приведенном здесь изображении показан пример того, что я пытаюсь создать: меню, которое вы можете прокручивать и свободно вводить несколько переменных перед выполнением функции.

Кроме того, возможно ли сделать это меню динамически обновляемым при вводе переменных?


person Psifrost    schedule 26.02.2015    source источник


Ответы (2)


На языке программирования TI-BASIC (в частности, TI-84+), как вы создаете формы ввода, такие как те, которые включены в приложения по умолчанию на TI-84+.

Есть много способов запросить ввод в вашей программе:

  • Подсказка: запрашивает ввод и сохраняет его в переменной. Например, Prompt A. Самый простой способ запросить ввод, но не очень визуально привлекательный.

  • Ввод: аналогично команде "Подсказка", за исключением того, что теперь вы можете включать текст в поле ввода. Например, Input "What is your name?",A.

  • Меню (): ввод нескольких вариантов, и каждый вариант связан с маркером Lbl в другом месте скрипта. Многое как экран ошибки с вариантами выхода/перехода, которые вы, вероятно, видели.Например, Menu("Are you a boy or a girl?","Boy",B,"Girl",G).

  • getKey: проверяет, нажата ли определенная клавиша, и выводит True (1), если эта клавиша нажата. Например, getKey 105. См. здесь, каким числам соответствует каждый ключ.

На приведенном здесь изображении показан пример того, что я пытаюсь создать: меню, которое вы можете прокручивать и свободно вводить несколько переменных перед выполнением функции http://imgur.com/ulthDRV

Боюсь, это невозможно в программах. Вы можете либо ввести несколько входных данных, либо вам может быть интересно заняться созданием приложений.

Кроме того, возможно ли сделать это меню динамически обновляемым при вводе переменных?

Если вы говорите о тексте поверх скриншота, да, вы можете; просто поместите команду Disp или что-то в этом роде после каждой строки ввода, чтобы он постоянно перезаписывал текст выше новым текстом после ввода переменной.

person user3932000    schedule 27.02.2015
comment
Немного обидно, но спасибо за помощь, особенно с третьим пунктом. - person Psifrost; 27.02.2015
comment
Prompt обычно используется при получении нескольких входных данных для разных переменных, потому что его можно использовать как Prompt A,B,C, а Input нельзя. - person Timtech; 03.03.2015
comment
@Timtech Я предпочитаю Input "A: ",A Input "B: ",B Input "C: ",C просто потому, что мне нравится, чтобы мои дисплеи были красивыми и красивыми. - person user3932000; 04.03.2015
comment
Это правда, но моя цель — создавать небольшие программы :) Впрочем, тут вы правы. Интересно, можно ли сделать утилиту для этого, чтобы сократить код... хм... - person Timtech; 04.03.2015
comment
you might be interested in looking into making apps instead. Это неправильно; в мире TI приложения и программы — это две разные вещи. Правильная формулировка здесь была бы you might be interested in looking into assembly programming instead, поскольку ассемблер можно использовать для написания как программ, так и приложений. Разница в основном в том, как они хранятся и выполняются калькулятором. - person hallo; 24.06.2015
comment
@ user3932000 по вводу, если вы хотите, чтобы он запрашивал строку (имя), вы хотите сохранить ее как STR1, а не как обычную переменную, иначе она будет просто сохранена как логическое значение, 1 - person Moshe Goldberg; 03.07.2015

Вы поставили перед TI-Basic довольно высокий заказ. user3932000 правильный; нет встроенной функции для создания формы ввода запрашиваемого типа.

Однако ничто не мешает вам создать интерактивный интерфейс самостоятельно. Создание его с нуля займет много времени и потребует значительного объема памяти на вашем калькуляторе. Нет стандартного кода, в который вы вставляете свои переменные, чтобы получить желаемые результаты, но вам может повезти смоделировать его после написанного мной квадратичного решателя.

ClrHome
a+bi
Output(1,1,"    QUADRATIC
Output(2,1,"    AX²+BX+C
Output(3,1,"ZEROS:
Output(6,1,"A=
Output(7,1,"B=
Output(8,1,"C=

DelVar YDelVar D
"             →Str1

While Y≠105
getKey→Y

If Ans
Then
Output(X,4,Str1
Output(3,7,Str1+Str1+Str1+"   
End

X+(Ans=34)-(Ans=25
If Ans<6:8
If Ans>8:6
Ans→X

Output(Ans,16,"◄

D(Y≠45→D

If Y=25 or Y=34
sum({A,B,C}(X={6,7,8→D

If Y=104:⁻D→D

10not(Y)+Y(102≠Y)-13int(Y/13(2>abs(5-abs(5-abs(Y-83
If Ans≤9
D10+Ans-2Ans(D<0→D

If X=6:D→A
If X=7:D→B
If X=8:D→C

If A
Then
2ˉ¹Aˉ¹(⁻B+{1,⁻1}√(B²-4AC
Else
If B
Then
⁻C/B
Else
If C
Then
"No Zeros
Else
"All Numbers
End
End
End

Output(3,7,Ans
Output(6,3,A
Output(7,3,B
Output(8,3,C
End
ClrHome
Ans

Вот GIF того, что он делает для вас.

Еще немного работы. Этот код можно использовать на экране графика вместо главного экрана, что дает больше возможностей для компоновки и дизайна.

person ankh-morpork    schedule 27.02.2015
comment
Превосходно! +10 кстати у тебя вроде хорошо с оптимизацией, но можно сохранить байт 16→X:0→D можно Delvar D6→X еще и длинные пробелы, можно вначале " →Str1 а потом Output(X,4,Str1:Output(3,7,Str1+Str1+Str1+" " - person Timtech; 02.03.2015
comment
@Timtech Хороший улов с улучшением Delvar. Что касается улучшения Str1, я задумался о стоимости конкатенации в TI-basic. Если бы он был постоянным, проблем бы не было, но если бы он работал в линейном времени, это могло бы повлиять на скорость. - person ankh-morpork; 04.03.2015
comment
Вы правы, я думал о том же. Однако вы, похоже, не запускаете этот код, пока не нажмете Enter, поэтому это не должно влиять на скорость. - person Timtech; 04.03.2015
comment
P.S. D*10+Ans→D можно сократить до D10+Ans→D - person Timtech; 11.03.2015
comment
@Timtech Я не уверен, почему я изначально не использовал неявное умножение - person ankh-morpork; 11.03.2015
comment
Также While Y!=105 может быть Repeat Y=105; затем вы можете удалить первый getKey->Y - person Timtech; 11.03.2015
comment
@Timtech Я внес некоторые дополнительные изменения в код и обновил свой ответ. Дополнительные предложения всегда приветствуются. - person ankh-morpork; 12.03.2015
comment
Вау, это действительно хорошо. Я думаю, что буду использовать его для динамического решателя теоремы Пифагора, который может решать для двух сторон :) - person Timtech; 12.03.2015