ТИ-БЕЙСИК
Было предложено разделить эту статью на статьи под названием TI-BASIC 83 (Z80) , TI-BASIC 89 (68k) и TI-BASIC Nspire (ARM) . ( обсудить ) ( февраль 2019 ) |
TI-BASIC является официальным [ 1 ] название языка, похожего на BASIC, встроенного в Texas Instruments графические калькуляторы . TI-BASIC — это языковое семейство, состоящее из трех разных и несовместимых версий, выпущенных для разных продуктов:
- TI-BASIC 83 (на процессоре Z80 ) для серии TI-83 , серии TI-84 Plus
- TI-BASIC 89 (на 68k процессоре ) для серии TI-89 , серии TI-92 , Voyage
- TI-BASIC Nspire (на процессоре ARM ) для TI-Nspire и TI-Nspire CAS
TI редко называет язык по имени, но имя TI-BASIC использовалось в некоторой документации для разработчиков. [ 2 ] [ 3 ]
Для многих приложений это наиболее удобный способ программирования любого калькулятора TI, поскольку в него встроена возможность написания программ на TI-BASIC. Также можно использовать язык ассемблера (часто называемый «asm»), и C компиляторы для перевода на ассемблер существуют : TIGCC для калькуляторов на базе Motorola 68000 (68k) и SDCC для калькуляторов на базе Zilog Z80 . Однако оба они являются кросс-компиляторами , не позволяющими программировать на калькуляторе. TI-BASIC значительно медленнее, чем язык ассемблера (поскольку его необходимо интерпретировать ), что делает его более подходящим для написания программ для быстрого решения математических задач или выполнения повторяющихся задач, а не для программирования игр или приложений с интенсивным использованием графики. В некоторых учебниках по математике даже есть программы на TI-BASIC (обычно для широко распространенного варианта, используемого в сериях TI-82/83/84).
Несмотря на то, что TI-BASIC несколько минималистичный по сравнению с языками программирования, используемыми на компьютерах, он, тем не менее, является важным фактором в сообществе программистов. Поскольку графические калькуляторы TI необходимы на уроках математики углубленного уровня во многих средних школах и университетах, TI-BASIC часто дает многим студентам возможность впервые познакомиться с миром программирования.
Синтаксис
[ редактировать ]Синтаксис всех версий TI-BASIC несколько отличается от типичных реализаций BASIC. Сам язык имеет некоторые базовые возможности структурного программирования , но не допускает использования пробелов или отступов. Это также зависит от несколько нестандартного набора символов с определенными символами для назначения (правая стрелка «STO», недоступная в большинстве наборов символов), квадратными и кубическими корнями и другими математическими символами, а также токенизированной записью. и хранилище для ключевых слов. Все операторы начинаются с двоеточия, которое также выполняет функцию разделителя операторов внутри строк. В моделях TI-83/84 закрывающие скобки, скобки, фигурные скобки и кавычки при желании можно опустить в конце строки или перед токеном STO, чтобы сэкономить место, хотя иногда их лучше оставить. Например, в моделях TI 83/84 функция цикла for работает намного медленнее без закрытия круглых скобок в определенных обстоятельствах. [ 4 ]
В выражениях используется инфиксная запись со стандартным приоритетом операторов . Многие операторы требуют аргументов в круглых скобках, аналогично синтаксису, используемому для математических функций. Синтаксис присваивания (копирования данных в переменную) необычен по сравнению с большинством обычных языков программирования для компьютеров; вместо использования оператора let в стиле BASIC со знаком равенства или алгоритма algol . типа :=
оператор, TI-BASIC использует стрелку вправо sto→
оператор с синтаксисом: источник → пункт назначения . Это похоже на некоторые японские калькуляторы, такие как Casio, Canon и Sharp, которые часто использовали аналогичный синтаксис с тех пор, как в конце 1970-х - начале 1980-х годов появились первые японские буквенно-цифровые калькуляторы для массового рынка.
Поток управления
[ редактировать ]Операторы потока управления включают блоки if-then-else , циклы for , циклы while и циклы повторения , но не содержат операторов переключения . Основные операторы потока управления:
If condition Then ... Else ... End For(variable,start,stop,step) ... End While condition ... End Repeat condition ... End
Реализации TI-BASIC, что необычно для языка высокого уровня, включают операторы IS> (Увеличить и пропустить, если больше) и DS< (Уменьшить и пропустить, если меньше), конструкции, обычно связанные с языками ассемблера . Разделы программ могут быть помечены ; однако, особенно на моделях Z80, метки служат пунктами назначения для операторов Goto или Menu(
функции, а не как метки программ или блоков.
Доступность функций и подпрограмм зависит от реализации; версии, доступные на калькуляторах TI-82, даже не поддерживают функцию, подобную GOSUB , хотя можно вызывать программы друг из друга и совместно использовать переменные между программами. Проекты на основе TI-89/92 могут иметь доступ к общим функциям, по сути, к программам, способным возвращать значение.
Типы данных
[ редактировать ]TI-BASIC — строго и динамически типизированный язык. Доступные типы данных значительно различаются в версиях 68k и Z80. Невозможно создать пользовательские типы данных без использования библиотеки, написанной на ассемблере. Списки часто используются вместо структур .
ТИ-83/84 (З80)
[ редактировать ]- Числовые переменные , в том числе
A
-Z
иθ
(тета). Они позволяют действительные числа или комплексные числа хранить (реализованные как пары действительных чисел) в формате с плавающей запятой . Значения могут варьироваться от 1 E -99 до 1 E 99 с точностью до десяти цифр. Однако предел в 27 переменных может быть расширен за счет использования списков, матриц и манипуляций с целочисленной записью. Список или матрица могут использоваться для хранения уникальных реальных переменных, на которые можно ссылаться индивидуально. Целые числа можно объединить в одну действительную переменную, определив их как целую и десятичную половины действительного числа; доступ к каждой половине затем осуществляется независимо с помощью команд параметрической детали и fPart. Переменные с двоичными значениями можно хранить как одно целое число путем преобразования между базой 2 и базой 10. - Струны , в том числе
Str0
-Str9
. В них может храниться любое количество символов или даже названий функций, если имеется свободная память. Их можно оценить как выражение сexpr()
функция, которая находится в каталоге. - Списки, в том числе
L1
-L6
, с возможностью создания дополнительных. По сути, это одномерные массивы, используемые для хранения вещественных или комплексных чисел в каждом из их элементов . Размерность доступная списка, количество его элементов, может варьироваться от 1 до 999, хотя память может быть ограничивающим фактором . Если размер списка установлен ниже, чем был раньше, элементы в конце обрезаются. Если установлено более высокое значение, дополнительные элементы в конце заполняются нулями. Размеры устанавливаются путем сохранения действительного числа вdim(
имени списка. Списки по умолчанию называются L 1 –L 6 , но можно создавать собственные списки. Это делается путем установки размера списка, на который ссылается L токен вLists
, за которым следует имя длиной от 1 до 5 символов , начинающееся с заглавной буквы.A
-Z
иθ
. Доступ к отдельным элементам списков можно получить, поместив номер элемента в скобках после названия списка. - Матрицы , в том числе
[A]
-[J]
. На их элементы распространяются те же ограничения, что и на списки. Их размеры могут быть определены до 99x99 элементов, хотя, опять же, доступная память ограничивает это. Невозможно создавать пользовательские матрицы, поэтому можно использовать только десять встроенных. - Переменные уравнения, включая
Y0
-Y9
,r1
-r6
, иu
,v
,w
. По сути, это строки, в которых хранятся уравнения. Они оцениваются для возврата значения при использовании в выражении или программе. Конкретные значения (константа, C) можно вставить в качестве независимой переменной (X), указав после имени уравнения (зависимого, Y) значение константы в круглых скобках. В приведенном ниже примере используется «(4)» (без особой причины). (Y1
(4) вернет значениеY1
при Х=4)
К типам данных, которыми нельзя манипулировать напрямую, относятся:
- Картинки (
Pic0
-Pic9
) - Фон (
Image0
-Image9
) - Программы (
prgm
) - Графовые базы данных (
GDB0
-GDB9
) - Цвет (
BLUE
,RED
,...,GRAY
) (всего 15 цветов)
ТИ-89 (68к)
[ редактировать ]- Целые числа, которые могут хранить большой объем данных. Калькуляторы 68k могут хранить очень большие числа, вплоть до , с идеальной точностью.
- Действительные числа с использованием десятичной дроби с плавающей запятой . Они хранят до 14 значащих цифр в зависимости от модели калькулятора.
- Комплексные числа , реализованные как пары действительных чисел.
- Струны
- Списки — одномерные связанные списки , поддерживающие поэлементные операции. В калькуляторах 68k элементами могут быть целые, действительные, комплексные числа, строки или выражения.
- Матрицы с элементами, на которые распространяются те же ограничения в списках.
- Символические выражения , уникальные для серии 68k.
Типы данных, которыми нельзя манипулировать напрямую (ввод только их имени в строке приведет к ошибке), включают:
- Картинки
- Данные
- Программы
- Функции
Переменные
[ редактировать ]Гибкость использования переменных сильно зависит от модели калькулятора. Например, на TI-84 Plus доступны все буквы английского языка, а также тета (Θ).
ТИ-83/84 (З80)
[ редактировать ]На ТИ-83/84 программатор может создавать списки, имена которых имеют длину до пяти символов. Все остальные типы данных ограничены, например, 27 действительных или комплексных переменных, а также ряд предопределенных имен переменных других типов (например, матрицы должны быть одной из десяти переменных). [A]
- [J]
). На TI-83/84 некоторые переменные, такие как Ans
а финансовые переменные имеют фиксированные адреса в оперативной памяти, что делает доступ к ним намного быстрее, чем к 27-буквенным переменным. Ans
действует как специальная переменная, содержащая результат последнего вычисленного кода. Строка, содержащая только переменную, все равно будет оценена, а ее содержимое сохранено в Ans
как результат. Потому что Ans
пересчитывается так часто, что чаще всего используется для хранения очень временных вычислений или для хранения значений, доступ к которым в противном случае был бы медленным, например элементов из списка. Все переменные глобальные.
ТИ-89 (68к)
[ редактировать ]Напротив, калькуляторы 68k позволяют всем именам переменных содержать до восьми буквенно-цифровых символов, включая греческий . Кроме того, переменные можно сгруппировать в «папки» или сделать локальными для программы, объявив их с помощью Local
заявление.
Комментарии
[ редактировать ]ТИ-83/84 (З80)
[ редактировать ]Программисты Z80 часто начинают строки с " (двойные кавычки) для обозначения комментария. Строки, начинающиеся с ", фактически выполняются, изменяя Ans
переменная, но это не влияет ни на что, кроме производительности, если только Ans
читается сразу после этого.
ТИ-89 (68к)
[ редактировать ]Калькуляторы 68k позволяют программам включать однострочные комментарии , используя © в качестве символа комментария. Если комментарий появляется в первой строке после оператора «Prgm», он отображается в строке состояния при выборе программы в каталоге; такие комментарии часто используются для документирования названий или типов параметров. Интерпретатор 68k имеет встроенную функцию для хранения количества пробелов в начале строки, что позволяет использовать отступы .
Функции
[ редактировать ]ТИ-83/84 (З80)
[ редактировать ]Версия TI-BASIC для Z80 делает невозможными явные «функции», подобные тем, что есть в 68k. Однако все переменные являются глобальными, поэтому функции можно эмулировать, устанавливая переменные, аналогичные аргументам, перед вызовом другой программы. Возвращаемые значения не существуют; тот Return
оператор останавливает текущую программу и продолжает работу с того места, где программа была вызвана.
ТИ-89 (68к)
[ редактировать ]Версия TI-BASIC 68k позволяет создавать пользовательские функции. Функции имеют тот же синтаксис, что и программы, за исключением того, что они используют Func
... EndFunc
ключевые слова вместо Prgm
... EndPrgm
и что им не разрешено использовать инструкции, выполняющие ввод-вывод, изменять нелокальные переменные или вызывать программы. Однако функции все равно могут быть нечистыми , поскольку они могут вызывать встроенные функции, такие как getTime()
, getKey()
, или rand()
. Все функции имеют возвращаемое значение, которое при отсутствии явного Return
оператор — это последнее вычисленное выражение.
Сторонние языковые расширения
[ редактировать ]Сторонние приложения, в хронологическом порядке Omnicalc, [ 5 ] кслиб, [ 6 ] «Селтик» и «Дорз CS», [ 7 ] перегрузили функции TI-BASIC на калькуляторах Z80, чтобы обеспечить дополнительные языковые функции. Сторонние библиотеки перегружают sum()
, real()
, det()
и identity()
функции, которые обрабатываются и интерпретируются соответствующими приложениями. Среди дополнительных функций - процедуры быстрого рисования фигур, инструменты спрайтов и тайловых карт, возможности модификации и доступа к программам и НДС, функции построения графического пользовательского интерфейса и многое другое, большинство из которых обычно ограничены для использования программистами на ассемблере. Для всех функций требуется, чтобы на калькуляторе пользователя присутствовало такое приложение, как Doors CS 7.0 , что иногда считается препятствием для использования библиотек.
Примеры
[ редактировать ]Привет, мир
[ редактировать ]Следующие программы при запуске будут отображать фразу " HELLO, WORLD!
".
ТИ-83/84 (серия Z80)
[ редактировать ]:Disp "HELLO, WORLD!"
ТИ-89 (серия 68к)
[ редактировать ](PS этот код можно сократить до функции Disp, как в TI-83/84, при этом hellowld, prgm и endprgm генерируются автоматически.)
:hellowld() :Prgm :ClrIO :Disp "HELLO, WORLD!" :Pause :ClrIO :DispHome :EndPrgm
ТИ-Энспайр
[ редактировать ]text "HELLO, WORLD!"
TI-Nspire CX
[ редактировать ]text "HELLO, WORLD!"
Списки и циклы
[ редактировать ]ТИ-83/84 (серия Z80)
[ редактировать ]PROGRAM:LISTS :"ASK FOR THE NUMBER OF VARIABLES :Input "NUMBER OF VARS? ",A :"VALIDATE INPUT OR STOP :If A<1 or fPart(A) :Stop :"A FOR LOOP TO ASK FOR EACH VALUE TO BE IN THE LIST :For(N,1,A) :Input "VAR ",B :"STORE THE VALUE INTO THE NTH ELEMENT :B→L1(N) :End :"IMPLICITLY RETURN THE FINAL LIST :L1
ТИ-89 (серия 68к)
[ редактировать ]lists() :Prgm : Local n,i,c © Declare local variables n, i, and c. : {}→list © Initialize list as an empty list. : Input "Number of variables?",n : For i,1,n : Input "Variable #"&string(i),c © & concatenates i after it is converted to a string. : c→list[i] : EndFor :EndPrgm
Списки имеют много возможных имен, это позволяет многим программам манипулировать многими списками, не переопределяя предыдущие данные. Списки на TI-82 не могут иметь произвольные имена (от L 1 до L 6 запрограммированы заранее). TI-85 и TI-86 не имеют возможности обрабатывать имя переменной с индексами. TI-81 совершенно не умеет работать со списками. Списки могут использоваться многочисленными встроенными функциями TI-BASIC для расчета статистики, включая различные регрессионные анализы и многое другое . [ 1 ] Их можно вызывать внутри программ, однако они по-прежнему отображают информацию во время приостановки выполнения и не могут сохранять определенные результаты в переменных.
Рекурсия
[ редактировать ]Рекурсия возможна. Программа может быть вызвана из самой себя или из другой программы.
ТИ-83/84 (серия Z80)
[ редактировать ]Пример ниже используется для вычисления факториалов . Для того, чтобы это работало, X
является параметром факториала и A
должно быть равно 1.
PROGRAM:FACT :If X=0 :Then :Disp A :Stop :End :XA→A :X-1→X :prgmFACT
ТИ-89 (серия 68к)
[ редактировать ]factui() :Prgm : Local n : Define fact(x)=Func : If x=0 : Return 1 : Return x*fact(x-1) : EndFunc : Input "Input a number", n : Disp "n! = " : Disp fact(n) :EndPrgm
Функции
[ редактировать ]Серия 68k проводит различие между программами и функциями. Функции аналогичны программам, за исключением того, что они не допускают операторов, выполняющих ввод-вывод, включая изменение нелокальных переменных, и возвращают значение, которое при отсутствии явного указания Return
оператор — это последнее вычисленное выражение.
fact(x) :Func : If x=0 : Return 1 : If x<0 : Return undef : x*fact(x-1) :End Func
Редакторы и инструменты
[ редактировать ]Рост сообщества любителей графических калькуляторов в 1990-х годах повлек за собой обмен информацией и сотрудничество, включая необходимость делиться кодом TI-BASIC в списках рассылки и дискуссионных форумах. Сначала это делалось путем набора кода TI-BASIC с экрана калькулятора на компьютер вручную или, наоборот, ввода программ в калькуляторы вручную. Программы TI-BASIC хранятся в токенизированном формате, их нельзя редактировать с помощью стандартных компьютерных текстовых редакторов, поэтому по мере взросления сообщества программистов калькуляторов возникла необходимость в автоматизированном конвертере. Формат хранящихся на компьютере программ TI-BASIC, созданных приложением TI-GraphLink компании Texas Instruments, в конечном итоге был декодирован, и для управления этими файлами были созданы сторонние инструменты. Компания TI создала редактор BASIC, который включили в некоторые выпуски программы связывания TI-GraphLink, но он не получил широкого распространения. В частности, использовался собственный набор символов, который не отображался должным образом при копировании и вставке на форум.
В 2005 году Джо Пенна создал OptiBASIC, инструмент-переводчик для преобразования текста из редактора TI-GraphLink в стандартный Unicode. Вскоре проект расширился и включил оптимизатор TI-BASIC на основе регулярных выражений. [ 8 ] Независимо Кристофер «Керм Марсианин» Митчелл из Cemetech начал создавать онлайн-конвертер для извлечения содержимого в виде простого текста (а позже в формате HTML и BBCode ) из токенизированных программ TI-BASIC. [ 9 ] который расширился и теперь включает онлайн-редактор программ, экспортер и эмулятор TI-83 Plus. [ 10 ] Проект SourceCoder поглотил OptiBASIC в конце 2005 года. Единственный другой крупный редактор TI-BASIC, используемый в настоящее время, - это TokenIDE (или «Tokens»), созданный Шоном «Merthsoft» Макфоллом. Автономный редактор Tokens может импортировать, редактировать и экспортировать программы TI-BASIC, включает в себя инструменты для отслеживания размера и правильности программы, а также предлагает вспомогательные функции, такие как редактор спрайтов/изображений. Построенный на основе определений токенов, хранящихся в файлах XML , он должен быть расширяемым для работы с любым сопоставлением токенов, заданным пользователем. [ 11 ]
Программы серии NSprire, а также калькуляторов TI 92 plus и Voyage 200 можно переносить и сохранять в формате простого открытого текста (Ansi/Ascii/ISO 8859-*), и существует несколько IDE для программирования калькуляторов TI. Для калькуляторов TI доступен ряд определений синтаксиса TextPad , фрагментов кода и диаграмм, а определения синтаксиса также были преобразованы в формат, используемый редактором Zeus . [ 12 ] [ 13 ] Формат открытого текста также используется для интерпретатора Lua на калькуляторе.
Существует независимый проект по разработке интерпретатора на стороне ПК для варианта TI Basic TI89-92-Voyage 200, который позволит запускать программы для калькулятора напрямую. [ 14 ] а также комбинированные программы других языков, вызывающие этот интерпретатор. Интерпретатор использует стандартные файлы ввода, вывода, ошибок и определяемые файлы журналов и конфигурации в консольном режиме под Windows, а вторая программа для репликации графики, используемой на калькуляторе, будет связана с ней так же, как инструменты Tk, интегрированные с Tcl , Perl , Rexx , C и другие языки. Источником этого инструмента является родственный проект по разработке инструмента типа Tk для использования VBScript. [ 14 ] Также предусмотрен третий инструмент, который интегрирует TI Basic на стороне ПК с программами для работы с электронными таблицами и базами данных через механизмы VBA и WSH. Этот проект также включает в себя оболочку в стиле Unix на стороне калькулятора, интерпретаторы Rexx и Perl, интерпретатор Fortran 77, а также преобразователи для переключения между различными языками программирования калькуляторов Casio, HP, Sharp и Texas Instruments, а также между ними. из этих и различных языков сценариев . [ 14 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б «ТИ-84 Плюс» . Education.ti.com .
- ^ https://education.ti.com/educationportal/sites/US/productDetail/us_ti89ti.html?bid=5 TI-89 на education.ti.com
- ^ «Lua-скрипты» . Education.ti.com . Проверено 5 июня 2011 г.
- ^ https://tibasicdev.wikidot.com/timings Анализ различного времени выполнения команд.
- ^ ticalc.org. Выпущена версия Omnicalc v1.00
- ^ Эванс, Трэвис. xLIB Патрика Прендергаста
- ^ Сазерленд, Никки. Найдите оазис в Doors CS 7.0
- ^ «Cemetech – Архивы United-TI – Идеи проектов/Начать новые проекты – opTI-BASIC [Тема]» . Архив Cemetech UnitedTI . Проверено 5 августа 2012 г.
- ^ Майкл Винсент. «Марсианин разрабатывает SourceCoder; покоряет BASIClings» . ticalc.org . Проверено 5 августа 2012 г.
- ^ Трэвис Эванс. «Обновление SourceCoder Cemetech» . ticalc.org . Проверено 5 августа 2012 г.
- ^ Райан Бойд. «TokenIDE / Интервью с Шоном Макфоллом» . ticalc.org . Проверено 18 января 2013 г.
- ^ Сайт TextPad
- ^ Программирование - ticalc.org
- ^ Перейти обратно: а б с «Программирование калькуляторов сегодня», Электронная таблица, том VI, № 14, 23. Ноябрь 2004 г., стр. 5.