TI-Basic est le nom dulangage de programmation descalculatrices graphiques Texas Instruments(Depuis lors remplacé officiellement par le langagePython sur les derniers modèles).
Par sa philosophie et ses capacités, ce langage se rapproche duBASIC, d'où son nom. Cependant, sa syntaxe est substantiellement différente de celle duBASIC. Le TI-Basic descalculatrices basées sur le Motorola 68000 (« 68 K ») (TI89) n'est pas le même que celui descalculatrices basées sur le Z80 (TI-83,TI-84). Chaque modèle de calculatrice dispose de fonctionnalités particulières exploitables par les programmes, mais le cœur du langage est commun.
Selon les modèles de calculatrices, les instructions peuvent être soit choisies dans des menus, soit tapées en toutes lettres sur un clavier alphanumérique. Dans le premier cas, aucune phase delexémisation n'est nécessaire, et le programme est directement stocké sous une forme debytecode. Dans le second cas, une lexémisation est effectuée lors de la première exécution qui suit une modification. Dans tous les cas, l'interprète proprement dit travaille sur lebytecode.
Les variables utilisables sont celles accessibles depuis les écrans de calcul. Par exemple, dans le cas de laTI-82 :
LaTI-82 ne permet pas le stockage et la manipulation d'autrestypes de données, comme leschaînes de caractères. Il est uniquement possible d'afficher des chaînes. Les variables de type chaîne sont apparues sur des modèles plus récents.
Le TI-Basic est un langage àtypage fort, en considérant qu'il n'est pas possible de modifier ou de choisir le type de valeurs des variables. Les variables sont globales et n'ont pas besoin d'être déclarées avant d'être utilisées dans une expression.
Sur les calculatrices à base de Z80, les programmes ne sont pas saisis sous forme alphanumérique, mais via les menus de la calculatrice. Les lettres quant à elles représentent toujours des variables numériques, le produit étant implicite. Ainsi, les lettres « FOR » tapées l'une après l'autre ne désignent pas le début d'une boucle, mais les produits de variables F, O et R. Une expression se termine par un double-point.
Les commandes de contrôle et de boucle doivent être terminées à l'aide du mot-clefEnd, qui sert de marqueur de fin de bloc (de la même façon que l'accolade fermante dans les langages de la famille duC).
Comme pour les autres erreurs, les erreurs de syntaxe provoquent l'arrêt du programme avec unmessage d'erreur.
Le TI-Basic supporte les concepts fondamentaux de contrôle, à savoir :
Les instructions d'entrées/sorties sont :
Dans les calculatrices basées sur le Motorola 68000, une fonction ou un programme peut être créé directement en utilisant la fonctionDefine, sa syntaxe est :
Define ma_fonction(v1,..,vN) = Func : fonction... : EndFunc
Ceci peut être utilisé à l'intérieur d'une autre fonction et implémente ainsi des fonctions et programmes locaux.
Dans les calculatrices basées sur le Z80, ceci est impossible. La seule possibilité est d'appeler d'autres programmes enregistrés sur la machine, et ceux-ci ne prennent pas d'arguments : tout passage de valeur se fait via les variables globales.
Une stratégie possible pour simuler l'appel de fonction, prenant un ou plusieurs arguments, et renvoyant une ou plusieurs valeurs est la suivante : étant donné un programme PrgmA, on souhaite appeler un programme PrgmB, on peut écrire :
:{I,X,N} # liste stockée dans Ans:PrgmB:Ans→{I,X,N,Y}
Ans
représente la valeur de la dernière expression calculée.
Le programme PrgmB peut alors avoir la forme suivante :
:Ans(1)→I:Ans(2)→X:Ans(3)→N:X→Y:For(I,1,N):X+cos(I*(I+1))→X:End:{I,X,N,Y}
L'intérêt de cette méthode est néanmoins limité, étant donné que toutes les variables sont globales.
Les nombreuses fonctions mathématiques sont disponibles dans les instructions des diverses machines.
Il est possible d'échanger des programmes en reliant deux calculatrices par câble, ou encore en reliant la calculatrice à un ordinateur ; ceci permettant aussi d'avoir recours à un émulateur sur ordinateur afin de faciliter la frappe et la mise au point d'un programme.
Le mot-clefDisp permet d'afficher le traditionnelHello world à l'écran :
:Disp "HELLO, WORLD !"
Mais l'on peut aussi utiliser une autre fonction, qui afficheraHello world aux coordonnées définies par X et Y (coordonnées en pixels pour lesTI-89 ou supérieurs, en ligne/colonnes de caractères pour les plus anciennes) :
:Output(Y,X,"HELLO WORLD")
Remarque : les programmes en Ti-Basic n'effectuant qu'une instruction par ligne, les deux exemples précédents sont simplifiables respectivement en :
:Disp "HELLO, WORLD !:Output(Y,X,"HELLO WORLD
Il est important de préciser que la dernière ligne n'estpas une erreur : en effet l’interpréteur du TI-Basic accepte que des commandes ne soient pas parfaitement bien parenthésées; et il s'agit donc d'une optimisation commune que ne pas écrire les guillemets et les parenthèses en fin de ligne.
La seule faiblesse connue de cette optimisation se rencontre lorsqu'une commande finit par un guillemet, omis, et que la ligne suivante commence par unLbl[0-9].
Pour faire un programme qui affiche le carré d'un nombre, il faut :
Input
qui admet en premier argument le message d'invite et en second le nom de la variable qui va recevoir le nombre ::Input "A =",A
²
et assigner ce résultat à une variable (facultatif) avec la touchesto →
::A²→R
Disp
qui affiche un argument par ligne ::Disp "A² =",R
Les instructionsInput
etDisp
se trouvent dans le sous-menuI/O
en appuyant surPRGM
durant l'édition du programme.
Ce programme est un jeu qui simule plusieurs fois le lancer d'une pièce. Elle retombe soit sur le côté pile, soit sur le côté face. Il montre comment utiliser la fonction de génération d'entier aléatoire, autrement ditrandInt(
.Notez que ce programme est la racine du jeu, il est ensuite possible d'y ajouter des fonctionnalités.
:Lbl D Étiquette duDébut du programme.:0→N Initialisation de la variableN (Touche STO→ Pour →):Menu("PILE OU FACE","PILE",A1,"FACE",A2,"QUITTER",Q Menu préprogrammé. Si non disponible, suivre la note:Lbl A1 Étiquette du choixPILE:1→J La variableJ prend la valeur 1. Le joueur a choisiPILE:Goto B Aller à l'étiquetteB:Lbl A2 Étiquette du choixFACE:0→J La variableJ prend la valeur 0. Le joueur a choisiFACE:Lbl B ÉtiquetteB:randInt(0,1)→N La variableN prend la valeur d'un entier entre 0 et 1.:If N=J Si ce nombre aléatoire est égal à celui choisi par le joueur.:Then Alors…:Disp "GAGNE ! Afficher GAGNE !:Else Sinon…:Disp "PERDU ! Afficher PERDU !:End Fin Boucle Si:Pause Maintenir le résultat affiché.:Goto D Aller à l'étiquette duDébut du programme.:Lbl Q ÉtiquetteQuitter le jeu.:Output(1,1," Retire leDone lors de l'arrêt du programme.
NB : Si la commandeMenu(
n'est pas disponible, il est possible d'utiliser :
:Disp "0. PILE:Disp "1. FACE:Input "VOTRE CHOIX",J
Ce programme permet de trouver les diviseurs d'un nombre. Il montre plusieurs structures essentielles de la programmation TI-Basic. Il stocke ces diviseurs dans une liste L1 qu'il affiche en fin d'exécution.
:0→P Initialisation de la variable:Input "N=", N Demande le nombre dont on veut trouver les diviseurs:ClrList L1 Suppression de la liste L1 (si existante):For I,1,N Début de la boucleFor : pour I variant de 1 à N:N/I→A Divise le nombre choisi au départ (par Input) par un diviseur possible:If fPart(A)=0 Si la partie décimale de A est nulle…:Then …Alors…:P+1→P …On incrémente la variable…:I→L1(P) …Et on stocke le diviseur dans L1:End Fin de la boucleIf:End Fin de la boucleFor:Pause L1 Fin du programme par une pause sur les valeurs de L1 (les diviseurs de N), appuyer surENTER
NB : Il est inutile de tester tous les nombres de 1 à N, on peut se contenter d'aller jusque N/2, ou mieux, (Il ne faut alors pas oublier de mettre N, qui est un diviseur, dans la liste)
Ce programme permet de trouver les racines réelles d'unefonction du second degré. Il effectue le calcul du discriminant et, en fonction de celui-ci, il calcule la ou les éventuelles racines.
:Lbl 1À ne mettre que si l'on écrit la boucle entrer/annul (voir fin programme):EffEcr On efface l'écran:Disp "FORME AX²+BX+C" On indique à l'utilisateur à quoi correspondent les lettres A, B et C demandées plus tard :Prompt A,B,C Comme:Input "A=", A mais moins gourmand en caractères et en mémoire ; demande A, B et C:B²-4AC→D Calcul du discriminant Δ (Delta):Disp "DELTA=",D On informe l'utilisateur de ce que vaut le discriminant:If D<0 Si D est inférieur à 0, alors… :Disp "PAS DE RACINES" Écrit…:If D>0:Then Si D est supérieur à 0, alors…:Disp "IL Y A 2 RACINES" Écrit…:((-B+√(D))/(2A)→E Calcul et stockage de la première racine:((-B-√(D))/(2A)→F Calcul et stockage de la deuxième racine:Disp E,F On affiche les deux racines:End Fin de la condition :If D=0:Then Si D est égal à 0, alors…:Disp "IL Y A 1 RACINE" Écrit…:(-B)/(2A)→G Calcul et stockage de la racine:Disp G On affiche la racine:End Fin de la conditionFacultatif (en italique) : l'appui sur « annul » permet de quitter le programme, sur « entrer » de le recommencer:Repeat K=105Tant que l'utilisateur n'appuie pas sur entrer…:codetouche→KLa variable K est assimilée au codeTouche:If K=45:Goto 2L'appui sur la touche annul envoie à Lbl 2:EndFin de boucle:Goto 1Retour au départ:Lbl 2Après avoir appuyé sur « Annul »:EffEcrEfface l'écran:Output(1,1,"Évite l'inscription de « Fait » à l'écran