Le tutorial de programmation

Cette page est destinée à vous apprendre à programmer sur une TI.
Je vais y tenter d’expliquer la plupart des fonctions utilisables dans un programme, je vais ensuite expliquer deux types de programmes : l'un d'entre eux utilisant le graphique, l'autre l'affichage basique.

Remarques : Je montre quand il le faut l'exemple pour remplir une commande et ce symbole : / signifie "ou" et X et Y signifient abscisse et ordonnée ou
                  rangée et colonne. Exemple : Output(X,Y,valeur/variable/"TEXTE") il faut accompagner Output, d'une valeur pour la rangée, la colonne, puis
                  d'une valeur quelconque ou d'une variable (A, B etc.) ou d'un texte entre guillemets le tout séparé par des virgules.
                  Ce symbole : / signifie "ou". Exemple : Output(X,Y,valeur/variable/"TEXTE"
                  Ce symbole : [ ] represente une touche spécifique. Exemple : [Math], Prb : Appuyer sur Math, se rendre dans le menu prb.               
                  Inutile de refermer les guillemets ou les parenthèses en fin de ligne.
                  La plupart des commandes peuvent se contenir les une dans les autres.
                  Lorsque je donne un exemple, j'écris ce qu'il faut écrire sur la calculatrice puis j'explique ce à quoi cela équivaut.

Débuter : Pour créer un programme : [Prgm], New, Create New, nommez votre programme, [Enter].
               Pour éditer un programme : [Prgm], Edit, choisissez votre programme.
             
Trés utile : Pour effacer une ligne de commande : [Clear].
                 Pour rajouter un élément dans une ligne [2nd], [Del].
                 Pour stopper brutalement un programme : [On].
                 Si vous ne voyez rien de ce qui se passe, haussez le contraste : [2nd], [Haut].
                 Quand le contraste doit atteindre 9 pour y voir clair, il serait bon de changer les piles...
                 Pour effacer un programme : [2nd], [+], Delete, Prgm.
                 DIFFERENCIEZ BIEN LA VIRGULE "," DU POINT ".".



Maintenant il va falloir construire votre programme grâce entre autre aux outils suivants :


- Le plus important : Store ([->]) : Store équivaut à "devient la valeur de", il permet d’associer une valeur à une variable.
   Exemple :
   :3->A
   En lançant le programme A deviendra égal à 3.


- Un autre très important : Random ([Math], Prb) : il permet de donner une valeur au hasard entre 0 et 1 (rand). Pour obtenir une valeur entre 0 et 292, il suffit de le multiplier par 292 (292rand). Pour obtenir une valeur entre 6 et 292, il faut le multiplier par 286 et lui ajouter 6 (286rand+6). Pour obtenir un nombre entier gràce à cette fonction, il faut rajouter Int ([Math], Num) (int286rand+6). Le nombre obtenu peut être associé à une variable : int7rand+1->X ou X sera une position sur l'écran par exemple.


- Les outils Test ([2nd], [Math], Test) : ils permettent de comparer des variables.


- Les outils Logic ([2nd], [Math], Logic) : ils permettent de lier plusieurs conditions.
   Exemple 1 : A=2 and B=4 équivaut à A=2 ET B=4.
   Exemple 2 : A=2 or A=4 équivaut à A=2 ou bien A=4.
   Exemple 3 : A=2 xor B=4 équivaut à A=2 ou alors B=4.
   Exemple 4 : notA équivaut à A=0
   Tous ces outils ne s'utilisent qu'avec If, While ou Repeat.


- Les outils I/O ([Prgm], I/O dans l’éditeur de programme).

 - Input : Input équivaut à "demander", il sert à demander la valeur d’une variable.
   Exemple 1 :
   :Input A
   En lançant le programme vous rentrerez la valeur que deviendra A.
   Exemple 2
   :Input "PRESSION:",A
   En lançant le programme vous rentrerez la valeur de la pression que deviendra A.

 - Disp variable/chiffre/"TEXTE" : Disp équivaut à "afficher", il sert à afficher une valeur ou un texte (cependant le texte doit comporter un
   maximum de 16 caractères sinon voir exemple 3).
   Exemple 1 :
   :Disp A
   En lançant le programme vous verrez la valeur associée à A.
   Exemple 2 :
   :Disp "TEST"
   En lançant le programme vous verrez apparaître le mot TEST.
   Exemple 3 :
   Disp "CECI EST UN","TUTORIAL"
   En lançant le programme vous verrez apparaître ceci sur votre écran :
   CECI EST UN
   TUTORIAL
   Exemple 4 :
   :Disp "SCORE:",S
   En lançant le programme vous verrez ceci sur votre écran (si la valeur de votre score est 10) :
   SCORE:
                          10

 - DispGraph : Dispgraph équivaut à "afficher le graphique".
   Exemple :
   :Dispgraph
   En lançant le programme vous verrez votre graphique.

 - DispTable :  DispTable équivaut à "Afficher le tableau".
   Exemple :
   :DispTable
   En lançant le programme vous verrez votre tableau.

 - Output(colonne,rangée,valeur/"TEXTE") : Output équivaut à "afficher suivant les cordonnées", la valeur de la colonne doit être comprise entre 1 et 16,    celle de la rangée entre 1 et 8.
   Exemple 1 :
   :Disp "SCORE:"
   :Output(1,7,S
   En lançant le programme vous verrez ceci sur votre écran (si votre score est de 10) :
   SCORE:10

 - Getkey : Getkey équivaut à "appui de touche". Getkey prend la valeur de la touche sur laquelle on appuie mais ce n’est pas simple : la premiere touche
   en haut à gauche porte la valeur 11, la suivante la valeur 12 puis on ajoute 10 par ligne exemple : [2nd] = 21, [Clear] = 45, [Enter]=105
   Exemple :
   :If Getkey=21
   :A+1->A
   Si vous appuyez sur [2nd], A+1 deviendra A.

 - ClrHome : ClrHome équivaut à "effacer l’écran".
   Exemple
   :Disp  « SCORE :
   :Output(1,7,S
   :Pause
   :ClrHome
   L’écran affichera la valeur de votre score puis il s’effacera après que vous ayez appuyé sur [Enter].

 - ClrTable : ClrTable équivaut à "effacer le tableau"
   Exemple :
   :DispTable
   :Pause
   :ClrTable
   L’écran Affichera le tableau puis l’effacera après que vous ayez appuyé sur [Enter].


- Les outils Ctl ([Prgm], Ctl dans l’éditeur de programme).

 - If (condition) : If équivaut à "si", il permet d’entrainer une conséquence à un fait. Si  la conséquence voulue est simple (une ligne de commande) If peut
   s’utiliser seul, sinon, vous aurez besoin de Then et bien sur de End.
   Exemple 1 :
   :If A=B
   :3->B
   Si A est égal à B, B deviendra égal à 3.
   Exemple 2 :
   :If A=B and B=4
   :3->B
   Si A=B=4, B deviendra égal à 3
   Exemple 3 :
   :If not A
   :1->A
   Si A=0, A deviendra égal à 1.

 - Then : Then équivaut à "alors", il ne s’utilise que précédé de If. Il sert à inclure une conséquence plus compliquée que précedement. Il faut penser à le
   faire suivre de End pour ne pas corrompre le programme.
   Exemple
   :If A=B
   :Then
   :3->B
   :5->C
   :End
   Si A est égal à B, B deviendra égal à 3 et C deviendra égal à 5.

 - Else : Else équivaut à "sinon", il ne s’utilise que précéde de If et de Then et suivi de End. Il sert à introduire une conséquence si le fait n’est pas juste.
   Exemple
   :If A=B
   :Then
   :3->B
   :Else
   :B-1->B
   :End
   Si A est égal à B, alors B deviendra égal à 3, sinon, B-1 deviendra B

 - For (variable,début,arrivée,écart) : For contient la notion de boucle : la commande comprise entre For et End commencera pour la variable égale à la
   valeur de début puis continuera avec la même variable plus l'écart jusqu'à atteindre la valeur d'arrivée. Si l’on ne donne pas de valeur pour l'écart, il
   sera égal à 1. Il faut penser à le faire suivre de End pour ne pas corrompre le programme. Si par erreur une de vos boucles est infinie, [On] pour
   stopper le programme brutalement.
   Exemple
   :For(X,1,10,0.5
   :Disp X
   :End
   En lançant le programme, on verra défiler les chiffres 1, 1.5, 2 jusqu'à 10 sur l’écran (puisque X adopte la valeur de 1 puis de 1.5 puis de 2 etc…).
   Cette fonction peut être utile pour éviter une Pause :
   :Disp "TEST
   :For(T,0,200
   :End
   :ClrHome
   L’écran affichera le mot TEST pendant une courte durée avant de s’effacer (augmenter la valeur de l’arrivée augmentera la durée).

 - While (condition) : While équivaut à "du moment que" : la commande comprise entre While et End sera executée en boucle si la condition est vraie, sinon
   le programme passera aux commandes écrites après End.
   Exemple :
   :While A>0
   :A-1->A
   :End
   :36->A
   Du moment que A est supérieur à 0, A-1 deviendra A et ainsi de suite... Quand A sera ne sera plus égal à 0, 36 deviendra la valeur de A.

 - Repeat (condition) : Repeat est très très semblable à While mais la commande écrite entre Repeat et End sera executée au moins une fois même si la
   condition est fausse

 - End : End équivaut à "fin de la commande" et cette commande peut etre le groupe If, Then, le groupe If, Then, Else ou bien While, Repeat, For...

 - Pause : La pause fige le programme jusqu'à ce que l'on appuie sur [Enter].
   Exemple :
   :Disp "SCORE:",S
   :Pause
   :ClrHome
   En lançant le programme, vous verrez la valeur de votre score jusqu'à ce que vous appuyez sur [Enter] et l'écran s'effacera.
   La pause peut être évitée grâce à For :
   :Disp "SCORE",S
   :For(T,0,200
   :End
   :ClrHome
   En lançant le programme, vous verrez la valeur de votre score pendant une courte durée et l'écran s'effacera.


 - Lbl lettre/nombre : Lbl équivaut à "début de", il permet de marquer un point de départ.
   Exemple :
   :Lbl A
   :A+1->A

 - Goto lettre/nombre : Goto équivaut à "aller à", il permet de se rendre à un point de départ s'il est marqué bien evidemment.
   Exemple :
   :Lbl A
   :A+1->A
   :If A>100
   :Goto 2
   :Goto A
   :Lbl 2
   En lançant le programme, A+1 deviendra A puis le programme renverra au début, donc A+1 deviendra A etc. mais si A devient supérieur à 100, le
   programme se rendra au point de départ 2 et donc quittera la première zone.
   A EVITER :
   :Lbl A
   :rand+12->A
   :Goto A
   En lançant le programme, il tournera en rond ne cessant de se renvoyer à A si par erreur cela vous arrive, [On] pour un arrêt brutal du programme.

 - Menu("TITRE","OPTION1",lettre/nombre,"OPTION2",lettre/nombre) - Cette commande permet de créer un menu qui enverra suivant l'option choisi
   à un point de départ précis.
   Exemple :
   :Menu("JEU","JOUER",J,"QUITTER",Q)
   :Lbl J
   :tout votre jeu
   :Lbl Q
   :ClrHome
   :Stop
   En lançant le programme, si vous choisissez de jouer, vous jouerez à votre jeu, si vous choisissez de quitter, l'écran s'effacera et le programme se
   terminera.

 - Stop : Stop marque la fin du programme.
   Exemple :
   :Lbl 5
   :Disp A
   :If A=12
   :Stop
   :A+1->A
   :Goto 5
   En lançant le programme, la valeur de A s'affichera, puis la valeur de A+1 etc. si A est égal à 12, le programme s'arretera.


- Les outils Draw : ils permettent d'afficher un image ou un dessin.

  - Comment dessiner?
    Pour dessiner, vous avez la fonction Pen, la fonction Pt-On(X,Y) et Pt-Off(X,Y), les fonctions Vertical(X) et Horizontal(Y), la fonction
   Circle(X,Y,Rayon) et enfin la fonction Line(X1,Y1,X2,Y2), toutes ces fonctions sont accessibles ainsi : [2nd], [Prgm], Draw/Points.
   Pour un beau dessin, il faut d'abord enlever tout ce qui est present sur le graphique (effacer les fonctions, les axes ([Window], Format, AxesOff), les
   dessins ([2nd], [Prgm], ClrDraw)).
   Pour effacer son dessin :
[2nd], [Prgm], ClrDraw.
   Pour enregistrer son dessin :
[2nd], [Prgm], Sto, StorePic, [Vars], Picture, Pic1/2/3/4/5/6...
   Pour ouvrir un dessin enregistré :
[2nd], [Prgm], Sto, RecallPic, [Vars], Picture, Pic1/2/3/4/5/6...

 - Les fonctions : Pt-On(X,Y) - dessiner le point de coordonnées (X,Y).
                          Pt-Off(X,Y) - effacer le point de coordonnées (X,Y).
                          Pxl-On(X,Y) - allumer le pixel X,Y (1<X<62 et 1<Y<94).
                          Pxl-Off(X,Y) - éteindre le pixel X,Y
(1<X<62 et 1<Y<94).
                          Pxl-Test(X,Y) - tester si le pixel X,Y est allumé ou non, s'il l'est Pxl-Test=1 sinon Pxl-Test=0.
                          Vertical(X) - tracer la ligne vertical passant par le point d'abscisse X.
                          Horizontal(Y) - tracer la ligne horizontale passant par le point d'ordonnée Y.
                          Circle(X,Y,R) - tracer un rond de centre (X,Y) est de rayon R.
                          Line(X1,Y1,X2,Y2) - tracer une ligne du point de coordonnées (X1,Y1) au point de coordonnées (X2,Y2).
 sont toutes utilisables dans un programme : elles permettent de voir le dessin s'afficher en direct (exemple : tir dans Starwars). Mais attention au Zoom! Il est parfais sujet à des problèmes dans le cas d'un dessin qui apparait dans un programme en effet dessiner le point 1,2 sous un zoom standard et sous un zoom integer ne reviendra pas du tout au même alors comment changer de zoom dans un programme : [Zoom] et choisissez! Rien de plus simple... Remarques : ZoomStandard : -10, 10 l'affichage basique mais l'échelle des ordonnées n'est pas la même que celle des abscisses...
                  ZoomInteger : le plus pratique pour le dessin puisque un point = un pixel !
                  ZoomSquare : il permet de tracer des ronds ronds (essayer avec ZoomStandard vous verrez) car l'échelle des ordonnées et des abscisses est
                                       la même.

- Les outils GDB : ils permettent de rappeler des paramètres de fenêtre.
   A un GDB est associé : la valeur de Xmin, Xmax, Xscl, Ymin, Ymax, Yscl, CoordOn/Off, AxesOn/Off, GridOn/Off.
   Pour enregistrer un GDB : Régler les paramètres voulus, [2nd], [Prgm], Sto, StoreGDB, [Vars], GDB, GDB1/2/3/4/5/6...
   Pour rappeler un GDB :
[2nd], [Prgm], Sto, RecallGDB, [Vars], GDB, GDB1/2/3/4/5/6...




Maintenant que vous avez compris toutes les commandes utilisables dans un programme, je vais vous expliquer comment les utiliser en décortiquant le contenu de deux de mes programmes. Le premier : SLALOM :

:ClrHome                                         Toute cette partie commande la présentation de début.  
:Output(4,6,"MAXIME           
:Output(5,5,"PRESENTE
:For(T,0,300
:End
:ClrHome
:Output(4,6,"SLALOM
:For(T,0,300
:End
:4->A                                              A est en fait la hauteur initiale des skis, pour qu'ils débutent au milieu de l'écran, A doit être egal à 4.
:0->S                                              S est en fait le score, il est mis à zéro en début de partie.
:Lbl 0                                              Lbl 0 : point de départ du jeu.
:ClrHome                                         Effacement de l'écran.
:round(7rand+1,0)->X                       Toute cette partie sert à donnerune valeur au hasard de la hauteur de la porte dans laquelle il faut passer.
:If X#1
:Output(X-1,8,"+
:If X#8
:Output(X+1,8,"+
:16->B
:Lbl 1                                               Lbl 1 : point de départ du défilement des skis.
:Output(A,B,"=
:B-1->B
:getKey->K                                       Toute cette partie commande la réaction des skis si l'on appuie sur une touche.
:If (K=105 or K=25) and A#1            Si on appuie sur [Enter] ou [Haut] la valeur de la hauteur A monte d'un cran.
:A-1->A
:If (K=104 or K=34) and A#8
:A+1->A
:If A=X and B=8                               Si au niveau de la porte on est bon, le score monte de 1.
:S+1->S
:If A->X and B=8                              Sinon, game over...
:Then
:ClrHome
:Disp ""," TU AS LOUPE"," UNE PORTE!!"," SCORE:
:Output(4,8,S
:Pause
:Lbl Q
:ClrHome
:Goto Q
:End
:If B=1                                           Si les skis arrivent au bout de l'écran, retour au début (sans remise à zéro du score évidemment).
:Goto 0
:Goto 1                                           Retour systématique au défilement des skis (faut bien qu'ils avancent !).

Deuxième programme : BAZOOKA :

:RecallGDB GDB2                                                       Rappel d'un paramètre de fenêtre (Xmin, Xmax, Ymin, Ymax, Axes, Coord, Grid...)
:ClrHome                                                                    Toute cette partie commande la présentation de début.
:Output(4,6,"MAXIME
:Output(5,5,"PRESENTE
:For(T,0,300
:End
:ClrHome
:Output(4,5,"BAZOOKA
:For(T,0,300
:End
:ClrHome
:Lbl 0                                                                            Lbl 0 : Point de départ du jeu.
:Menu("BAZOOKA","JOUER",J,"QUITTER",Q             Menu de début.
:Lbl J
:ClrDraw                                                                      
:31->X                                                                           Détermination de la position de la minuscule cible à toucher.
:int (45rand+10)->Z
:For(T,0,50                                                                   Début de la boucle (le compte à rebour en fait).
:Pxl-On(Z,1                                                                   Dessin du personnage suivant des variables (important pour pouvoir le faire bouger).
:Pxl-On(X,85
:Pxl-On(X-1,85
:Pxl-On(X-2,85
:...                                                                                 J'abrège un peu pour le dessin il est très long...
:getKey->K                                                                    Cette partie commande la réaction du personnage suivant les touches appuyées.
:If K
:ClrDraw
:If K=25                                                                       Si l'on appuie sur [Haut] la variable de hauteur descend ce qui fait remonter le personnage.
:X-1->X
:If K=34                                                                       A l'inverse, il descendra.
:X+1->X
:End                                                                              Fin du compte à rebour.
:For(Y,1,77                                                                    Le missile se rapprochera de plus en plus de la cible au fur et à mesure de la boucle.
:80-Y->W
:Pxl-On(X,W
:Pxl-On(X,W-1
:Pxl-Off(X,W+1
:End                                                                              Fin du tir.
:If X=Z                                                                        Si le missile est au niveau de la cible c'est gagné sinon c'est perdu !
:Then
:Text(25,30,"BRAVO!
:Else
:Text(25,30,"TIR MANQUE...
:End
:Pause
:Goto 0                                                                          Retour au menu.
:Lbl Q                                                                           Lbl Q : point de départ de la sortie du jeu.
:RecallGDB GDB1                                                           Rappel des paramètres de fenêtre standard.



- Pour finir : votre programme ne fonctionne pas? Explication des erreurs les plus fréquentes:
 - Argument : il manque des données pour l'execution d'une commande. Exemple : il manque la valeur de l'abscisse d'un point à dessiner.
 - Syntax : vous avez rentré une donnée erronée. Exemple : If =3 : il manque quelque chose !
 - Domain : vous avez rentré une donnée trop élevée. Exemple : Output(20,2,"TEST") : l'écran ne comporte pas plus de 16 colonnes !
 - Label : vous demandez l'envoi à un point de départ qui n'existe pas.
 - Overflow : une valeur depasse 10^99
 - Undefined : vous demandez l'ouverture d'un fichier qui n'existe pas (image, GDB...)
 - Enfin si votre programme ne fait pas ce qu'il devrait assurez vous d'avoir bien placé les marqueurs End.



 - Comment mettre son programme sur ordinateur?
  - Téléchargez TI Graph Link.
  - Installez le, démarrez le.
  - Onglet "Link", "Receive", "Individual File"
  - Envoyez de votre calculatrice à l'ordi par le cable. gràce à la procédure habituelle ([2nd], [X, T, Téta], Select Current, Send).
 - Si le transfert ne fonctionne pas : onglet "File", "New program", "Window" ," TI82 Keypad", recopiez au clavier en respectant les espaces
    obligatoires ou à la souris et enregistrez votre programme.



Voilà je pense que mon tutorial est terminé... Je n'utilise que ces commandes pour mes jeux mais je sais que l'utilisation de listes et de matrices que je ne maitrise pas peut être fort pratique. Mais la programmation en TI Basic a des limites, certains programmes se voient ralentir au fil du temps pour une raison inexpliquée voila pourquoi certains de mes programmes ont un menu et d'autre non, car certains doivent s'arrêter pour ne pas ralentir encore plus...
J'éspère vraiment que mes explications vous aideront à créer plein de petits jeux sympas ou des programmes de calcul bien utiles...
Faites moi parvenir vos programmes créés
ici, s'ils sont interressants je les mettrait en ligne.
Un ptit mail de remerciement pour le travail que représente cette page fera toujours paisir...

Les jeux
Comment transférer les jeux sur votre calculatrice?
Comment fabriquer son propre cable de liaison?

Retour à l'acceuil