TI-BASIC - TI-BASIC

TI-BASIC является официальным названием на BASIC -like языка , встроенный в компании Texas Instruments (TI) «s графических калькуляторы . TI-BASIC - это языковая семья из трех разных и несовместимых версий, выпущенных для разных продуктов:

TI редко ссылается на язык по имени, но имя TI-BASIC использовалось в некоторой документации для разработчиков.

Для многих приложений это наиболее удобный способ программирования любого калькулятора 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:

Синтаксис

Синтаксис всех версий TI-BASIC несколько отличается от типичных реализаций BASIC. Сам язык имеет некоторые базовые возможности структурированного программирования , но не позволяет использовать или допускать пробелы или отступы. Он также зависит от несколько нестандартного набора символов с конкретными символами для присвоения (правая стрелка «STO», не всегда доступна в большинстве наборов символов), квадратными и кубическими корнями и другими математическими символами, а также токенизированной записью. и хранилище для ключевых слов. Все операторы начинаются с двоеточия, которое также служит разделителем операторов внутри строк. В моделях TI-83/84 закрывающие круглые скобки, скобки, фигурные скобки и кавычки могут опционально опускаться в конце строки или перед маркером STO для экономии места, хотя иногда их лучше оставить. Например, в моделях TI 83/84 функция цикла for работает намного медленнее без закрытия скобок в определенных обстоятельствах.

Выражения используют инфиксную нотацию со стандартным приоритетом операторов . Многие операторы требуют аргументов в круглых скобках, аналогично синтаксису, используемому для математических функций. Синтаксис присваивания (копирования данных в переменную) необычен по сравнению с большинством традиционных языков программирования для компьютеров; вместо использования BASIC-подобного let со знаком равенства или algol- подобного :=оператора, TI-BASIC использует оператор «STO» со стрелкой вправо с синтаксисом: источник → пункт назначения . Это похоже на несколько японских калькуляторов, таких как Casio, Canon и Sharp, которые часто использовали аналогичный синтаксис с тех пор, как первые массовые японские алфавитно-цифровые калькуляторы появились в конце 1970-х - начале 1980-х годов.

Поток управления

Flow Control отчетность включает в себя , если-то-иначе блоки , для петель , в то время как петли и повторные циклы , хотя нет заявлений переключателя . Основные операторы потока управления:

 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 (Z80)

  • Числовые переменные , включая A- Zи Θ(тета). Они позволяют хранить действительные числа или комплексные числа (реализованные как пары действительных чисел ) в формате с плавающей запятой . Значения могут находиться в диапазоне от 1 E -99 до 1 E 99 с точностью до десяти цифр. Однако ограничение в 27 переменных может быть расширено за счет использования списков, матриц и манипуляций с целочисленной нотацией. Список или матрица могут использоваться для хранения уникальных реальных переменных, на которые можно ссылаться индивидуально. Целые числа можно объединить в одну действительную переменную, обозначив их как целые и десятичные половинки действительного числа; затем доступ к каждой половине осуществляется независимо с помощью команд iPart и fPart. Переменные с двоичными значениями могут быть сохранены как одно целое число посредством преобразования между основанием 2 и основанием 10.
  • Струны , в том числе Str0- Str9. Они могут хранить любое количество символов или даже имена функций, пока есть доступная память. Их можно оценить как выражение с expr()функцией, которая находится в каталоге.
  • Списки, в том числе - , с возможностью создания дополнительных. По сути, это одномерные массивы, используемые для хранения действительного или комплексного числа в каждом из своих элементов . Размер списка, его количество элементов, может находиться в диапазоне от 1 до 999, хотя имеется память может быть ограничивающим фактором . Когда размер списка устанавливается ниже, чем было, элементы в конце обрезаются. При установке выше дополнительные элементы в конце заполняются нулями. Размеры устанавливаются путем сохранения действительного числа в имени списка. Списки по умолчанию называются L 1 –L 6 , но можно создавать собственные списки. Это делается путем установки размера списка, на который ссылается токен L в , за которым следует имя в диапазоне от 1 до 5 символов, которое начинается с заглавной буквы - и . Доступ к отдельным элементам списков можно получить, поместив номер элемента в круглые скобки после имени списка.L1L6 dim( ListsAZΘ
  • Матрицы , в том числе [A]- [J]. На их элементы распространяются те же ограничения, что и на списки. Их размеры могут быть определены до 99x99 элементов, хотя, опять же, доступная память ограничит это. Невозможно создать пользовательские матрицы, поэтому можно использовать только десять встроенных матриц.
  • Уравнение переменных, в том числе - , - , и , , . По сути, это строки, в которых хранятся уравнения. Они оцениваются как возвращающие значение при использовании в выражении или программе. Конкретные значения (константа, C) могут быть вставлены для независимой переменной (X), следуя имени уравнения (зависимая, Y) за постоянным значением в круглых скобках. В приведенном ниже примере используется «(4)» (без особой причины). ( (4) вернет значение при X = 4)Y0Y9r1r6uvwY1Y1

Типы данных, которыми нельзя управлять напрямую, включают:

  • Картинки ( Pic0- Pic9)
  • Программы ( prgm)
  • Базы данных графов ( GDB0- GDB9)

ТИ-89 (68к)

  • Целые числа, которые могут хранить большой объем данных. Калькуляторы 68k могут хранить очень большие числа, вплоть до , с идеальной точностью.
  • Действительные числа с использованием десятичных чисел с плавающей запятой . В них хранится до 14 значащих цифр в зависимости от модели калькулятора.
  • Комплексные числа , представленные как пары вещественных чисел.
  • Струны
  • Списки, которые представляют собой одномерные связанные списки, поддерживающие поэлементные операции. На калькуляторах 68k элементы могут быть целыми, действительными, комплексными числами, строками или выражениями.
  • Матрицы с элементами, на которые распространяются те же ограничения в списках
  • Символические выражения , уникальные для серии 68k.

Типы данных, которыми нельзя управлять напрямую (ввод только их имени в строке приведет к ошибке), включают:

  • Фотографий
  • Данные
  • Программ
  • Функции

Переменные

Гибкость использования переменных широко варьируется в зависимости от модели калькулятора. Например, на TI-84 Plus доступны все буквы английского языка, а также тета (Θ).

ТИ-83/84 (Z80)

На TI-83/84 программист может создавать списки, имена которых содержат до пяти символов. Все другие типы данных ограничены, например, 27 действительных или комплексных переменных, а также ряд предопределенных имен переменных других типов (например, матрицы должны быть одной из десяти переменных [A]- [J]). В TI-83/84 некоторые переменные, такие как Ansи финансовые переменные, имеют фиксированные адреса в ОЗУ, что делает их намного более быстрыми доступными, чем 27-буквенные переменные. Ansдействует как специальная переменная, содержащая результат последнего выполненного кода. Строка, содержащая только переменную, все равно будет оцениваться, и в результате ее содержимое будет сохранено Ans. Поскольку Ansон переоценивается так часто, он чаще всего используется для хранения очень временных вычислений или для хранения значений, доступ к которым в противном случае был бы медленным, например, к элементам из списка. Все переменные глобальные.

ТИ-89 (68к)

Напротив, калькуляторы 68k позволяют всем именам переменных содержать до восьми буквенно-цифровых символов, включая греческий . Более того, переменные можно сгруппировать в «папки» или сделать локальными для программы, объявив их с помощью Localоператора.

Комментарии

ТИ-83/84 (Z80)

Программисты Z80 часто начинают строки с "(двойные кавычки) для обозначения комментария. Строки, начинающиеся с", на самом деле выполняются при изменении Ansпеременной, но это не влияет ни на что, кроме производительности, если они Ansне считываются сразу после этого.

ТИ-89 (68к)

Калькуляторы 68k позволяют программам включать однострочные комментарии , используя © в качестве символа комментария. Если комментарий появляется в первой строке после оператора «Prgm», он отображается в строке состояния, когда программа выбрана в каталоге; такие комментарии часто используются для документирования имен или типов параметров. Интерпретатор 68k имеет встроенную функцию для хранения количества пробелов в начале строки, что позволяет делать отступы .

Функции

ТИ-83/84 (Z80)

Версия TI-BASIC для Z80 делает невозможными явные «функции», подобные тем, что есть в 68k. Однако все переменные являются глобальными, поэтому функции можно эмулировать, задавая переменные, аналогичные аргументам, перед вызовом другой программы. Возвращаемых значений не существует; Returnоператор останавливает текущую программу и продолжается где называлась программа.

ТИ-89 (68к)

Версия TI-BASIC 68k позволяет создавать пользовательские функции. Функции имеют тот же синтаксис, что и программы, за исключением того, что они используют ключевые слова Func... EndFuncвместо Prgm... EndPrgm, и что им не разрешается использовать инструкции, которые выполняют ввод-вывод, изменяют нелокальные переменные или вызывают программы. Однако функции по- прежнему может быть не- чистым , потому что они могут назвать встроенные функции , такие как getTime(), getKey()или rand(). Все функции имеют возвращаемое значение, которое в отсутствие явного Returnоператора является последним вычисленным выражением.

Сторонние языковые расширения

Сторонние приложения, расположенные в хронологическом порядке Omnicalc, xLIB, Celtic и Doors CS, перегружали функции TI-BASIC на калькуляторах Z80 для обеспечения дополнительных языковых функций. Сторонние библиотеки перегружают функции sum () , real () , det () и identity () , которые обрабатываются и интерпретируются соответствующими приложениями. Среди дополнительных функций - быстрые процедуры рисования фигур, инструменты спрайтов и тайловых карт, возможности модификации и доступа к программам и НДС, функции построения графического интерфейса пользователя и многое другое, большинство из которых обычно ограничено для использования программистами на сборке. Все функции требуют, чтобы на калькуляторе пользователя присутствовало такое приложение, как Doors CS 7.0 , что иногда считается ограничением использования библиотек.

Примеры

Привет, мир

Следующие программы при выполнении будут отображать фразу " HELLO, WORLD!".

TI-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

TI-Nspire

text "HELLO, WORLD!"

TI-Nspire CX

text "HELLO, WORLD!"

Списки и петли

TI-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 для расчета статистики, включая различные регрессионные анализы и многое другое . Их можно вызывать внутри программ, однако они по-прежнему показывают информацию при приостановке выполнения и не могут сохранять конкретные результаты в переменных.

Рекурсия

Возможна рекурсия. Программа может быть вызвана из самой программы или из другой программы.

TI-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 на основе регулярных выражений. Независимо, Кристофер «Керм Марсианин» Митчелл из Cemetech начал создавать онлайн-конвертер для извлечения текстового (а затем отформатированного в HTML и BBCode ) содержимого из токенизированных программ TI-BASIC, который был расширен за счет включения в него онлайн-редактора программ, экспортера и TI. -83 Plus эмулятор. Проект SourceCoder поглотил OptiBASIC в конце 2005 года. Единственный другой крупный редактор TI-BASIC, который в настоящее время используется, - это TokenIDE (или «Токены»), созданный Шоном «Merthsoft» Макфоллом. Автономный редактор Tokens может импортировать, редактировать и экспортировать программы TI-BASIC, включает инструменты для отслеживания размера и правильности программы, а также предлагает дополнительные функции, такие как редактор спрайтов / изображений. Построенный на основе определений токенов, хранящихся в файлах XML , он предназначен для расширения для работы с любым заданным пользователем отображением токенов.

Программы на калькуляторах серии NSprire, а также на калькуляторах TI 92 plus и Voyage 200 можно передавать и сохранять в формате простого текста (Ansi / Ascii / ISO 8859- *), а также существует несколько IDE для программирования калькуляторов TI. Для калькуляторов TI доступен ряд определений синтаксиса TextPad , фрагментов кода и диаграмм, а определения синтаксиса также были преобразованы в формат, используемый редактором Zeus . Формат открытого текста также используется интерпретатором Lua на калькуляторе.

Существует независимый проект по разработке интерпретатора на стороне ПК для варианта TI Basic TI89-92-Voyage 200, который позволил бы запускать программы для калькулятора напрямую, а также комбинированные программы других языков, которые вызывают этот интерпретатор. Интерпретатор использует стандартные файлы ввода, вывода, ошибок и настраиваемые файлы журнала и конфигурации в режиме консоли под Windows, а вторая программа для репликации графики, используемой на калькуляторе, будет связана с ним так же, как инструменты Tk, которые интегрированы с Tcl , Perl , Rexx , C и другие языки. Связанный проект по разработке инструмента типа Tk для использования в VBScript является источником этого инструмента. Также предполагается третий инструмент, который интегрирует TI Basic на стороне ПК с программами электронных таблиц и баз данных через механизмы VBA и WSH. Этот проект также включает в себя оболочку в стиле Unix на стороне калькулятора и интерпретаторы Rexx и Perl, интерпретатор Fortran 77, а также преобразователи для переключения между различными языками программирования калькуляторов Casio, HP, Sharp и Texas Instruments, а также с и с этих и различных языков сценариев .

Смотрите также

использованная литература

внешние ссылки