Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Explication
Pour faire ce type de boucles, nous avons besoin de deux instructions, en fait :
- Goto : [PRGM] + CTL + 0
- Lbl : [PRGM] + CTL + 9
Le principe de ces instructions est très simple : elles marchent par paires.
Un Goto permet de passer directement à la ligne d'instruction d'un Label.
Mais si on a plusieurs Goto et Labels, comment fait-on pour les différencier ?
C'est très simple : chaque
Goto et
Label doit être associé à un
indice (un chiffre allant de
0 à 99 ou une lettre allant de
A à Z + le têta).
Voilà la syntaxe :
Code : Pascal1
2 | :Lbl [indice]
:Goto [indice]
|
Par exemple :
Code : Pascal
Mais je crois que le mieux est de sortir un joli schéma pour expliquer tout ça !
Commentons ce code point par point :
- le programme commence
- Le code situé en A est exécuté
- On rencontre le goto 1 qui nous emmène au label 1 (flèche verte)
- D est exécuté
- On rencontre le goto 2 qui nous emmène au label 2 (flèche rouge)
- C est exécuté
- On rencontre le goto 3 qui nous emmène au label 3 (flèche rouge)
- Le programme se termine
Exemple
Un premier exemple concret : comment sortir d'une boucle
While en plein milieu ? ... Avec un
Goto, bien sûr !
Code : Pascal 1
2
3
4
5
6
7
8
9
10 | :0->A
:While 1 // une boucle infinie ! A bannir ou à utiliser avec précaution
:Disp "COUCOU"
:If A=4:Goto 1
:Disp "COUCOU 2"
:A+1->A
:End
:Lbl 1
:Disp "FIN"
:Output(1,1,"
|
Quand A est égal à 4, alors on sort de la boucle pour aller jusqu'au label 1. le "COUCOU 2" ne s'affiche pas, mais le texte "FIN" s'affiche !
Contre-exemple
Même si les
Goto peuvent sembler très pratiques, je vous conseille d'abord de vous habituer à utiliser les
While, qui sont souvent moins lourds.
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11 | :Lbl A
:Disp "TEST"
:If A=B:Goto B
:Goto A
:Lbl B
:Disp "FIN"
// Ce code équivaut à celui-ci !
:Repeat A = B
:Disp "TEST"
:End
:Disp "FIN"
|
La sentence est sans appel ! Le
Repeat est plus pratique, plus lisible et moins lourd !
Les Goto sont donc à utiliser avec parcimonie. Très pratiques sur des gros programmes, ils peuvent parfois fabriquer de gros bugs difficilement détectables (oubli d'un label, mauvais indice,...)
Bien ! Je vais vous poser un autre problème : si vous me codiez un joli menu ? Avec une jolie liste et plein d'options...

Compliqué, non ?
Eh bien, votre Ti vous propose une fonction tout prête pour faire ça, et elle marche avec les
Goto ! C'est la fonction
Menu.
Et voilà ce que ça donne ! Pas mal non ?
Vous trouverez le menu en faisant
[PRGM] + CLT + C.
Ce qu'il faut savoir, c'est que
chaque choix (numéroté de 1 à 7) est associé à un label. Quand vous choisissez une option en utilisant les flèches directionnelles et Enter, vous allez sauter directement à un label bien déterminé.
Pour écrire le menu, il faut d'abord indiquer son titre entre guillemets, puis pas plus de 7 fois : un nom d'option entre guillemets puis un label associé à cette option.
Code : Pascal1 | :Menu("titre","option 1",[label],"option 2",[label],...
|
Par exemple :
Code : Pascal 1
2
3
4
5
6
7
8
9
10
11 | :Menu("MENU DU SDZ","CHOIX 1",A,"CHOIX 2",B,"CHOIX 3",15
:Lbl A
:Disp "CHOIX 1"
:Goto 99
:Lbl B
:Disp "CHOIX 2"
:Goto 99
:Lbl 15
:Disp "CHOIX 3"
:Lbl 99
:Disp "FIN"
|
Pensez à prévoir la suite du comportement du programme, pour qu'il n'exécute pas des portions de codes non désirés ! C'est source de beaucoup d'erreurs !
Exercice
Allez : un petit exo tout simple. Ecrivez un programme (contenant un menu) permettant de calculer la surface de plusieurs figures géométriques.
A vos Ti...
Et voici la correction (je n'ai fait que 2 figures, à vous de rajouter les autres).
Notez l'apparition de l'instruction
Pause (
[PRGM]+Clt+8), qui permet de mettre le programme en pause jusqu'à l'appui d'une touche.
Secret (cliquez pour afficher)Code : Pascal 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | :0->C:0->H
:Lbl 0
:ClrHome
:Menu(" GEOMETRIE ","RECTANGLE",A,"TRIANGLE",B,"QUITTER",99
:Lbl A
:Input "LONGUEUR:",C
:Input "HAUTEUR:",H
:Disp C*H
:Pause
:Goto 0
:Lbl B
:Input "BASE:",C
:Input "HAUTEUR:",H
:Disp (C*H)/2
:Pause
:Goto 0
:Lbl 99
:ClrHome
:Output(1,1,"
|