TI-BASIC
From Wikipedia, the free encyclopedia
- This article is about the calculator programming language. For the TI 99/4A home computer programming language, see TI BASIC (TI 99/4A).
TI-BASIC is the unofficial name of a BASIC-like language built into Texas Instruments (TI)'s graphing calculators. (Except for the TI-85 and TI-86 variants, TI only refers to it as the calculators' "extensive programming capability".) Though the TI-BASIC name has stuck, the syntax is actually rather different from almost all standard BASIC implementations, sometimes resembling other languages such as PILOT or even Forth.
It is, for many applications, the most convenient way to program any TI calculator, since the capability to write programs in TI-BASIC is built-in. Assembly language (often referred to as "asm") can also be used, and C compilers exist for translation into assembly: TIGCC for Motorola 68000 based calculators, and Z88DK for Zilog Z80 based calculators. However, both of them are in fact cross-compilers, not allowing on-calculator programming. Although TI-BASIC is considerably slower when compared to assembly and consequently is not as useful for programming fast applications and games, it is very useful for quickly writing programs to solve math problems (formulae, etc) and for performing repetitive tasks, with some math instruction books even providing programs in TI-BASIC (usually for the widespread variant used by the TI-82/83/84 series).
Although it is somewhat minimalist compared to programming languages used on computers, TI-BASIC is nonetheless an important factor in the programming community. Because TI graphing calculators are required for advanced mathematics classes in many high schools and universities, TI-BASIC is often the first glimpse many students have into the world of programming. Learning to program in TI-BASIC is a relatively easy task, encouraging potential programmers to explore the field of computer science.
Contents |
[edit] Syntax
The syntax of all versions of TI-BASIC is rather different from typical BASIC implementations. The language itself has some basic structured programming capabilities, but makes limited to no use of or allowance for white space or indentation. It is also dependent on a slightly nonstandard character set, with specific characters for assignment (the right arrow, not readily available in most character sets), square and cube roots, and other mathematical symbols, as well as tokenized entry and storage for keywords. All statements begin with a colon, which also functions as a statement separator within lines.
Expressions use infix notation, with standard operator precedence. Many statements include their arguments in parentheses, similar to the syntax used for mathematical functions. The assignment syntax is unusual; rather than using a let statement or an equals sign, TI-BASIC uses a right-arrow operator with the syntax: source → destination.
Control flow statements include if-then-else blocks, for loops, while loops, and repeat loops, though no switch statements. Unusually for a high level language, TI-BASIC implementations include IS> (Increment and Skip if Greater Than) and DS< (Decrement and Skip if Less Than) statements, constructs generally associated with assembly languages. Sections of programs can be labeled; however, particularly on the Z80 models, the labels function primarily as destinations for GOTO statements rather than as program or block labels.
Availability of functions and subroutines depends on the implementation; the versions available on the TI-82-descended calculators do not even support a GOSUB-like function, though it is possible to call programs from within each other and share variables between programs. TI-89/92-based designs can have access to shared functions, essentially programs capable of returning a value.
[edit] Examples
These examples are slightly TI-83-series biased. For example, "ClrHome" would be "ClLCD" on the TI-85 and TI-86.
An entirely different command is required to clear the screen in the TI-89. Since output is generally displayed on the ProgramIO screen, the "ClrIO" command is required to clear the output screen. There exists a "ClrHome" command on the TI-89, and it performs its function - namely, clearing the Home screen. For programming purposes, however, this command is essentially useless.
[edit] Hello world
The following program, when executed, will display the phrase "HELLO, WORLD!"
:
Z80 Series
PROGRAM:HELLOWLD :Disp "HELLO, WORLD!"
68000 Series
hellowld() :Prgm :Disp "Hello, World!" :EndPrgm
[edit] Lists and Loops
The significance of lists in terms of programming is quite often overlooked. Needless to say, lists, in combination with loops, are quite useful in creating programs that can handle much more than a set number of inputs. That is:
[edit] Lists
Z80 Series
PROGRAM:LISTS :Input "NUMBER OF VARIABLES ",A :If A<1 or fPart(A) :Return :Input "VAR ",B :{B}→L1 :For(N,2,A) :Input "VAR ",B :B→L1(dim(L1)+1) :End :L1
In addition, lists are important for saving save game data and highscore data in programs. This is better than storing highscore or save game information as a variable, as variables are commonly used.
[edit] Elaborations
Essentially, this program can be used to compile a list containing an arbitrary number of elements, which could then be implemented in a larger program that would break up the list and put each element to use. For instance, if we were to create a polynomial equation solver, we would use the technique noted above to compile all the coefficients into a list. Under the guidelines of the Rational Root Theorem, we would implement the first and last elements into a program to be factored and paired (and put into another list). To finish, we would create another While loop which would take the list with the factored elements, raise them to the appropriate power (this can be done by finding the "dim(L1)", subtracting one from it, and implementing another While loop which would subtract from the "dim(L1)" with intervals of 1), multiplying the result to the elements of the original list, adding the new results, and checking to see if the sum (of the new result) is equal to 0.
The "If A<0 or fPart(A)" statement checks to see if the variable A is a negative number or a non-integer. If so, the program is stopped by the Return statement. If the condition is not true, then the program continues on to the rest of the code. The first variable is used to define L1. In the For( loop, only the commands between For(N,2,A) and the first End are considered. Every time the For( loop is executed, an input is asked for, and the element is added to the end of the list, and saved. By this time, the list L1 should have a dim(L1) = A and be ready for manipulation.
[edit] Counting
Z80 Series
Program:COUNTING :10^10→B :For(A,1,B) :Disp A :End
68000 Series
counting() :Prgm :Local a,b :10^10→b :For a,1,b :Disp a :EndFor :EndPrgm