Zum Inhalt springen

TI-Basic

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 27. Juli 2007 um 10:51 Uhr durch C167 (Diskussion | Beiträge) (Strings: typo). Sie kann sich erheblich von der aktuellen Version unterscheiden.
TI-Basic auf dem TI-83 Plus
Ein Ausschnitt aus einem Programm, das anhand von 4 Punkten berechnet um was für ein Viereck →es sich handelt
Datei:Pic00.JPG
Ein mithilfe von TI-Basic gezeichnetes Bild

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


Ein Menü!

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

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