TI-Basic

Bei TI-Basic handelt es sich um die Programmiersprache, mit der programmierbare Taschenrechner der amerikanischen Firma Texas Instruments (TI) arbeiten. Sie unterscheidet sich leicht von der verbreiteten Programmiersprache BASIC. Da sie hauptsächlich Rechenprozessen dient, ist sie kompakter und einfacher zu erlernen als Basic. Eigentlich erfunden, um den Benutzer mehrere Rechenprozesse in einem Programm optimieren zu lassen und ihm somit Zeit und Aufwand zu ersparen, wird TI-Basic auch immer mehr zum Programmieren kleiner Spiele verwendet. Besonders für die neueren Modelle von Texas Instruments, wie den TI-83 Plus,den TI-84 Plus, den TI-89, oder den Voyage 200 gibt es heute bereits eine Vielzahl von Programmen und Spielen.
TI-83 Plus bis TI-84 Plus Silver Edition Beispiele
Hier nun einige Beispiele von Programmen für den TI-83 Plus. Die Programmiersprache anderer TI-Rechner unterscheidet sich teilweise geringfügig.
:ClrHome Löscht alle Zeichen auf dem Display :Disp "HALLO WELT" Zeigt danach "Hallo Welt"
Oder:
:ClrHome Löscht alle Zeichen auf dem Display :Output(1,1,"HALLO WELT") Zeigt in der erstern Zeile in der ersten Spalte "Hallo Welt" an
Getkey
Jede Taste (bis auf die On-Taste) des Taschenrechners hat einen eigenen Tastencode. "getKey" erwartet eine Taste und speichert danach den Tastencode auf eine beliebige Variable. Dieser Tastencode hat folgendes System: Man teile die Tasten in Reihen und Spalten auf. Die Taste [Y=] befindet sich in der ersten Reihe und der ersten Spalte. Die Reihen gibt man dann in "Zehnerzahlen" (10, 20, ...) und die Spalten in "Einerzahlen" (1, 2, ...) an. Somit hat die Taste [Y=] den Wert 11.
Bei den Pfeiltasten ist das etwas kompliziert: [<-], [^], [->] zählen in die zweite Reihe. [v] ergibt in der 3ten Reihe dann 34. Eine 35 gibt es nicht. Falls man dass nicht richtig verstanden hat, oder nicht abzählen will, kann man ein einfaches Programm zum ermitteln der Tastennummer schreiben
Getkey-Programm
:ClrHome Löscht alle Zeichen auf dem Display :0→A Speichert den Wert null in der Variable A :While A=0 Leitet eine Schleife ein die sich solange wiederholt bis eine Taste eingegeben wird :getKey→A Speichert die Tastenzahl in A und beendet somit die Schleife :End Ende der Schleife :Disp A Zeigt die Tastenzahl der gedrückte Taste an
:ClrHome Löscht alle Zeichen auf dem Display :Repeat Ans Führt die Schleife solange aus, bis eine Taste gedrückt wird :getKey Erwartet eine Taste :End :If Ans=21 Wenn die Taste mit dem Tastencode 21 (die „2nd“-Taste) gedrückt wird, dann :Then :Disp "Taste 2nd!" wird "Taste 2nd!" Angezeigt :Else Wenn nicht die Taste mit dem Tastencode 21 gedrückt wird, dann :Disp "Nicht Taste 2nd!" wird "Nicht Taste 2nd!" angezeigt :End Ende der If-Abfrage :End Ende der Repeat-Schleife

Menü
In einem Menü kann man aus bis zu sieben verschiedenen Möglichkeiten auswählen.
:ClrHome Löscht alle Zeichen auf dem Display :Menu("Magst du Mathe?","Ja",1,"Nein",2) Zeigt ein Menü an und lässt zwischen Ja (Führt zum Label 1) und Nein (Label 2) auswählen. :Stop :Lbl1 Wenn "Ja" ausgewählt wurde :Disp "Gut! Du magst es!" wird "Gut! Du magst es!" angezeigt :Stop :Lbl2 Wenn "Nein" ausgewählt wurde :Disp "Warum denn nicht?" wird "Warum denn nicht?" angezeigt
Schleifen mit For(
:ClrHome Löscht alle Zeichen auf dem Display :Output(1,1,"Hallo") Zeigt "Hallo" links in der ersten Zeile an :For(X,1,200) Nach einigen Sekunden... :End :ClrHome werden alle Zeichen auf dem Display wieder gelöscht :Output(1,1,"Thomas") und "Thomas" wird an der selben Stelle angezeigt
:Lbl 1 :ClrHome Löscht alle Zeichen auf dem Display :For(X,1,8) 1-8 wird auf X gespeichert :Output(X,5,"FOR LOOP") Zeigt "FOR LOOP" in jeder der 8 Zeilen an :End Beendet den For loop :Stop Beendet das Programm
Ein etwas komplexeres Programm
:ClrHome Löscht alle Zeichen auf dem Bildschirm :1→A Speichert 1 in die Variable :1→B Speichert 1 in die Variable :While 1 Wiederholt die Schleife immer wieder :Output(A,B,"Hallo Wikipedia! Zeigt in Zeile A und Spalte B Hallo Wikipedia! an :Repeat Ans=25 xor Ans=34 Wiederholt die Schleife... :getkey ...bis die Taste gedrückt wird. :End Kehrt zum Repeat-Befehl zurück :Ans→K Der Tastencode wird in K gespeichert :A-(K=25)+(K=34)→A Ändert die Zahlen für A und B je nach Tastendruck. :B-(K=24)+(K=26)→B :If A=0:8→A Verhindert einen... :If A=9:1→A ...Domain-Error. :If B=0:16→B Das selbe für B :If B=17:1→B :ClrHome Löscht alle Zeichen auf dem Bildschirm :End Kehrt zur While-Bedingung zurück
Nun kann der Benutzer mit Drücken auf die Pfeiltasten die Wörter Hallo Wikipedia! über den Bildschirm bewegen.
Übersicht der wichtigsten Befehle auf dem TI- 83+
:ClrHome Löscht den Bildschirm :If Startet eine Abfrage :Then Nachstehendes wird erfüllt, falls die If Abfrage wahr ist :Else Wenn die If Abfrage falsch ist, dann... :End Beendet If, While, Repeat und For Abfragen :Stop Beendet das Programm :Pause Um fortzufahren muss Enter gedrückt werden :Menu( Öffnet ein Menü :For( Speichert alle Zahlen von A bis B in einer bestimmten Variable, z.B. For(A,1,8 :Prompt Fragt eine Zahl ab und speichert diese in der gewünschten Variable :Input Wie Prompt, nur kann der Input definiert werden :Output( Zeigt in einer gewünschten Zeile und Spalte einen Text oder eine Variable an :Disp Zeigt in der ersten freien Zeile einen Text oder eine Variable an :Lbl Setzt ein Label an einer gewünschten Stelle :Goto Geht zum gewünschten Label :While Während die Bedingung erfüllt ist, wird der nachstehende Code ausgeführt :Repeat Wie While, nur dass der Code solange wiederholt ist bis die Bedingung wahr ist :GetKey Speichert den Code für die gedrückte Taste :DelVar Löscht die nachstehende Variable
Komplexere Befehle
Hier werden nicht nur vollständige Programme gezeigt sondern auch Befehls-Zeilen, die man gut in Programm, Spiele usw. integrieren kann.
Zufällige Werte
Um ein Zufälligen Wert zu erzeugen gibt es eine sehr einfache Funktion [randInt()]. Man findet diese wie alle im Catalog ( [2nd]+[0] ), oder einfacher unter [MATH] zu PRB springen und 5:randInt( anklicken. Wer dies macht dem fällt auf, dass es noch rand, randBin(, randNorm( diese erfüllen jedoch andere Aufgaben wie z.B. einen Mittelwert zu bilden.
randInt-Syntax
:randInt(1,12)→A Speicher einen zufälligen Wert von 1 bis 12 in A
Variabeln, Listen, Matrizen und andere Speicher
Listen
Da wenn man viele Variabeln braucht der Ti 83 oder 84 nur das Alphabet bietet gibt es noch Listen und Matrizen. Listen sind aneinander gekettete Variabeln die alle den selben Namen tragen wenn man die Standard Listen benutzt L1-L6 diese Listen sind unter [2nd]+[1]-[6] zu erreichen. Um ei besseren überblick zu erlangen muss man auf die Taste [STAT] klicken und 1:Edit... anwählen. Hier sieht man alle Werte die man in die listen gespeichert hat und die Werte mit [DEL] auch einzeln löschen. Mit [Clear] auf den Listenname sogar alle Werte macht man das selbe mit [DEL] wird die Liste gelöscht. Aber keine Angst wenn man die Liste wieder haben will muss man einfach soweit wie möglich nach links Springen wo anstatt eines Listennamens ... steht, klickt man mit [ENTER] auf die Punkte kann man die Standard Listennamen oder neue mit dem Alphabet eingeben noch mal [ENTER] erzeugt dann die Liste. Jedoch kann man eine Liste mit einem eigenem Namen nicht einfach durch den Namen anwählen man muss [2nd]+[STAT] klicken und die Liste aussuchen dabei fällt einem sicherlich auf das es schon mehr Listen gibt. Listen haben einen entscheidenden Vorteil vor Variabeln sie können mehrere Werte speichern! gibt man also einfach in den Rechner
{15,1453,456,723,42,}→ L1
ein werden diese fünf Werte in L1 gespeichert. Wenn man dann einfach [2nd]+[1] drückt wird
{15 1453 456 723 42}
ausgegeben. Man kann aber auch indem man hinter den Listennamen (2) schreibt nur den zweiten Wert ausgeben. Das sieht dann so aus
L1(2) 1453
Mann kann natürlich für die zwei auch andere Zahlen eingeben, allerdings muss es den Wert auch immer geben, z.B.
L1(1) 15 L1(3) 456 L1(4) 723 L1(5) 42 L1(6) ERR:INVALID DIM 1:Quit 2:Goto
Solche Listen könne ein Programm sehr vereinfachen, da man z.B. Die Koordinaten eines Punktes für Y Wert mit L1(1) definieren und den X Wert mit L2(1) definieren kann. Jedoch muss man beachten, dass man vorher die Stellen auch definiert haben muss.
Ein weitere Vorteil ist das man anstatt von
L1(4)
auch
4→A L1(A)
schreiben kann. Man kann anstatt von A natürlich auch L2(3) schreiben.
Matrizen
Vielleicht ist jemandem bei den Listen aufgefallen, dass sie ziemlich genau den Eindimensionalen Feldern von c++ entsprechen. Bei c++ gibt es aber auch noch Zweidimensionale Felder. Dies nennt man bei Ti-Basic Matrizen und sind unter [2nd]+[x−1] zu finden. Es gibt [A]-[J] jedoch kann man Matrizen nur mit einem klick auf sie aufrufen wenn man einfach [A] schreibt würde das die Variabel A in Eckigen Klammern sein. Um eine Matrize zu nutzen muss man diese jedoch erstmal definieren. dies geht in dem man im Matrizen-Menu auf EDIT springt und eine anklickt, dann wird man als erster gefragt wie groß sie sein soll:
MATRIX[A] 2 x2 [1 0 ] [0 0 ]
Man kann also sagen, dass Matrizen Schachfelder sind deren Felder mit einem Y und einem X Wert benannt sind. Außerdem kann man diese Felder mit Zahlen belegen. Man kann diese Werte so eingeben:
6→[A](1,1) [A](1,1) 6
oder auch:
1→A [A](A,A) 6
Um in einem Programm jedoch Matrizen einsetzen zu können muss man diese Definieren. Dies geht ähnlich wie bei Listen:
[[1,2,3][4,5,6]]→[A] [A] [[1,2,3] [4,5,6]] [A](2,4) 4
Hierbei muss man als erstes eine Eckige Klammer öffnen, die die gesamte Matrize definiert, als nächstes muss man noch mal eine eckige Klammer öffnen, die die Zeile Definiert, in diese Schreibt man dann die Werte durch ein Komma getrennt und macht diese wieder u. Will man noch eine Zeile öffnet man erneute eine eckige Klammer, wenn man das nicht will schließt man einfach die erste Klammer und fertig ist die Definition der Matrize. Wichtig ist aber das alle Zeilen gleich viele Werte enthalten sonst kommt ein ERROR (Invalid Dim).
Strings
Bis jetzt gab es nur Variabeln in denen man Zahlen speichert, doch wenn man auf die Taste [VARS] klickt kann man zwischen mehreren Funktionen wählen darunter auch Strings. Geht man auf String kommt man auf ein Menü in dem 10 String-Variabeln sind (Str0-Str9). So kann man in einem String ein Wert Speichern:
"HALLO WORLD"→Str1 Str1 Hallo Welt
Hierbei begrenzen die " den String und können so nie in einem String gespeichert werden. Man kann aber in einen String alle Zeichen auf der Tastatur des Ti's speichern, also Zahlen, Funktionen und Gleichungen. Strings bieten viele Möglichkeiten wie z.B.:
:"HALLO WORLD"→Str1 :Disp Str1
So kann man an viel mehr Positionen die Nachricht ausgeben ohne sie immer zu schreiben. Oder man speichert andere Werte in Strings:
:0→A :While A=0 :getKey→A :End :If A=21 :"Du hast 2nd gedrückt"→Str1 :If A=31 :"Du hast Alpha gedrückt"→Str1 :Disp Str1
Stringbefehle
Strings bieten auch eine große Zahl an Funktionen die man alle im CATALOG findet ( [2nd]+[0] ). Hier eine Liste der Befehle:
Equ‣String( Konvertiert eine Funktion in einen String String‣Equ( Konvertiert einen String in eine Funktion expr( Konvertiert einen String in einen Ausdruck sub( Konvertiert einen Teilstring aus einem String inString( liefert die Position eines Zeichens in einem String length( Liefert die Länge eines Strings + Fügt Strings zusammen
Ein paar Beispiele
+
:"HALLO"→Str1 Speichert in Str1 HALLO :" WELT"→Str2 Speichert in Str2 WELT :"!"→Str3 Speichert in Str3 ! :Str1+Str2+Str3→Str4 Speichert in Str4 HALLO WELT! :Disp Str4 Gibt Str4 aus
String‣Equ
:"6X-2"→Str1 Speichert 6x-2 in Str1 :String‣Equ(Str1,Y1) Konvertiert Str1 in die Funktion Y1 (Y1 muss über, [VARS] auf Y-Vars springen 1:Function anklicken und auswählen, geholt werden. :DispGraph Zeigt den Graphen an
Equ‣String
:"6X-2"→Y1 Speichert 6x-2 in Y1 (Y1 muss über, [VARS] auf Y-Vars springen 1:Function anklicken und auswählen, geholt werden. :Equ‣String(Y1,Str1) Konvertiert Y1 in den String Str1 :Disp Str1 Zeigt den String an
expr
:5→X Speichert für X den Wert 5 :"2X"→Str1 Speichert in Str1 2X :expr(Str1)→A Wandelt den String in eine Rechnung und speichert das Ergebnis in A :Disp A Zeigt A an
length
:"HALLO WELT"→Str1 Speichert HALLO WELT in Str 1 :Disp length(Str1) Gibt die durch length ermittelte Länge von Str1 aus, hier 10
inString
:"HALLO WELT"→Str1 Speichert HALLO WELT in Str 1 :inString(Str1,"WELT")→A Speichert die Position von WELT im Str1 in A, die Position wäre hier 7 (Gespeichert wir nur die Position des Anfangs Buchstabe) :Disp A Gibt A aus also: 7
Oder:
:"WELT WELT"→Str1 Speichert WELT WELT in Str 1 :"WELT"→Str2 Speichert WELT in Str 2 :inString(Str1,Str2,5)→A Ermittelt die Position von Str2 (WELT) in Str1 (WELT WELT), ab Position 5 und Speichert sie unter A wäre hier 6 (würde man hier die Startposition weglassen würde nur 1 gespeichert da nur bis zu WELT gesucht wird und dann abgebrochen wird) :Disp A Gibt A aus also: 6
sub
:"HALLO WELT HALLO"→Str1 Speichert HALLO WELT HALLO in Str1 :inString(Str1," ")→A Ermittelt die Position des ersten Leerzeichens :inString(Str1," ",A+1)→B Ermittelt hinter der Position des ersten Leerzeichen das nächste Leerzeichen und speichert es in B :sub(Str1,A+1,B-1)→Str3 Liefert den Teilstring zwischen dem ersten und dem zweiten Leerzeichen und speichert in Str3 (lässt man das +1 und -1 weg würden die Leerzeichen mit gespeichert!) :Disp Str3 Gibt den Teilstring Str3 aus
Bilder
Der Letzte Variablen-Typ sind Bilder hierzu gibt es zwei Formate GDB und Pic. Pic steht für Picture (engl. Bild) und enthält, wie ein Screenshot beim Computer, den gesamten Inhalt (Punkte, Linien, Text, Funktionen usw.) des Graph-Bildschirm (wird mit [GRAPH] aufgerufen). Im Gegensatz dazu enthält GDB, was für Graph-Datenbanken steht, nur die Window-Einstellungen und die Y= Funktionen und deren Stil. Man kann jeweils nur 10 GDBs und 10 Pics speichern. Um ein Pic oder ein GDB zu speichern muss man auf [2nd]+[PRGM] klicken, danach auf STO springen und entweder 1:StorePic oder 3:StoreGDB anklicken. Danach kommt man auf den Hauptbildschirm und muss entweder eine Zahl zwischen 0 und 9, wobei 0 der Zehn entspricht, eingeben oder man klickt auf [VARS] für GDB klickt man danach auf 3:GDB und wählt ein GDB aus oder für Pics geht man auf 4:Picture und wählt hier eins aus. Wenn man dann zurück auf dem Hauptbildschirm ist klickt man [ENTER] und das bild ist gespeichert. In einem Programm würde das so aussehen
:StorePic Pic1 Speichert das Bild in Pic1 :RecallPic Pic1 Öffnet Pic1 im Graph-Bildschirm
TI-89 (Titanium),TI-92 (Plus),Voyage 200 Beispiele
Hier nun einige Beispiele für den Taschenrechner des Typus 68k (obige). Hinweis zu den verwendeten Codes: Das @-Zeichen fungiert in TI-Basic als "Kommentar-Zeichen", d.h. dass der folgende Text der selben Zeile nicht interpretiert wird. Es ist identisch mit dem "/* */" in CSS, dem "" in HTML und dem "//" in PHP. "Kommentar-Zeichen" kommen in fast allen Programmiersprachen vor und dienen dazu, dem Programmierer eine Möglichkeit zu geben übersichtlichen Code zu schreiben.
:Prgm :ClrIO :Disp "Hallo Welt" :EndPrgm
Oder:
:Prgm :ClrIO :PxlText "Hallo Welt",0,0 :EndPrgm
Oder:
:Prgm :Dialog :Title "Example" :Text "Hallo Welt" :EndDlog :EndPrm
Unterschiede zum TI-83+
Strings
Strings können unter jedem beliebigen Namen gespeichert werden
"hallo welt"->hw "String" => STO>-Taste => Name under welchem der String gespeichert werden soll
Die Verknüpfung zweier Strings erfolg mit dem "&"-Zeichen
"abc"&"def" --> "abcdef"
string( gibt einen Ausdruck als String aus
string(1+2+3) --> "1+2+3"
dim( gibt die Länge eines Strings, einer Liste oder einer Matrix aus
dim("hallo") --> 5 dim({"hallo","welt"}) --> 2 dim([1,2;3,4;5,6]) --> {3 6} Zeilenanzahl Spaltenanzahl in einer Liste
ord( gibt den Zahlenwert des ersten Buchstaben eines Strings aus
ord("hallo welt") --> 104 da das Zeichen "h" den wert 104 hat ord({"hallo","welt"}) --> {104 119} bei Listen werden die Werte aller Anfangsbuchstaben in einer Liste ausgegeben
char( gibt einen Wert zwischen 0 und 255 als Zeichen (Buchstabe oder Symbol) aus
char(104) --> "h"
rotate( rotiert die Werte einer Liste oder eines Strings nach rechts oder links
rotate({1,2,3,4}) --> {4 1 2 3} rotate({1,2,3,4},-2) --> {3 4 1 2} rotate({1,2,3,4},1) --> {2 3 4 1} Wird ein Sting anstatt einer Liste verwendet werden die einzelnen Buchstaben rotiert
Einfaches Menü
:Prgm :Dialog :Title "Example" :DropDown "Menü",{"Auswahl 1","Auswahl 2","Auswahl 3"},x :EndDlog :If x=1 :Disp du hast Auswahl 1 gewählt @dieser Text wird bei Auswahl 1 angezeigt :If x=2 :Disp du hast Auswahl 2 gewählt @dieser bei Auswahl 2 :If x=3 :Disp du hast Auswahl 3 gewählt @und dieser bei Auswahl 3 :EndPrgm
Weblinks
- Tetris in TI-Basic Tetris in TI-Basic für den TI-89 (Titanium)- Beispiel eines komplexen Programmes in TI-Basic
- Offizielle TI Homepage
- TI-83+ BASIC-Programme
- TI-Basic Compiler für den PC