Aller au menu - Aller au contenu

Icône Labels & Goto

Avatar
Mise à jour : 22/08/2008
1 010 visites depuis 7 jours, dont 33 sur ce chapitre classé 126/786
Nous avons déja plusieurs types de boucles avec les Repeat & les Whiles qui permettaient de revenir en arrière dans votre programme.

Mais je vais vous apprendre à vous servir d'un autre type de "boucle" : Les Goto.

Pourquoi ? Eh bien c'est ce que nous allons voir ! :p
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Lbl & Goto

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 ? o_O

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 : Pascal
1
2
:Lbl [indice]
:Goto [indice]

Par exemple :
Code : Pascal
1
2
:Lbl 15
:Goto 15


Mais je crois que le mieux est de sortir un joli schéma pour expliquer tout ça ! :D



Image utilisateur

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 ! :p
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 ! :D

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,...)

On retient donc : utiliser les boucles While et Repeat dès que possible, sinon les Goto ! :)

Menu

Bien ! Je vais vous poser un autre problème : si vous me codiez un joli menu ? Avec une jolie liste et plein d'options... :p 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 ? ;)

Image utilisateur


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 : Pascal
1
: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"

Plusieurs options peuvent pointer vers un même label ! :D

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... :p

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,"

Chapitre précédent Sommaire Chapitre suivant

Partager

3 commentaires pour "Labels & Goto"
Note moyenne : 3.82 / 4 (60 votes)
Pseudo Commentaire
Hors ligne spider-mario # Posté le 05/07/2007 à 16:24:25
Avatar

Ville : Montigny-lès-cormeilles
Pays : France métropolitaine
Études : INSA Rouen

Il est vrai que les Goto sont plutôt pratiques :)
D'ailleurs, en C++, bien que je préfère la syntaxe
Code : C++

do
{
// ...
}
while(continuer);
 

à
Code : C++

loop1:
// ...
if(continuer)
{
    goto loop1;
}
 

pour les boucles normales, pour les boucles infinies, je trouve plus élégant de faire
Code : C++

start:
// ...
goto start;
 

que
Code : C++

while(true)
{
// ...
}
 


Ah, je déteste les while(true), je déteste, je déteste, je déteste :colere2:
Hors ligne ricky la racaille # Posté le 29/07/2007 à 11:10:18

Les labels peuvent aussi êtyre defini par 2 lettres !
Exemple :
LblAA

95% des bugs viennent de l'interface Chaise / Ecran , c'est dire VOUS !!
 
Hors ligne ][ase # Posté le 16/12/2007 à 20:28:51

Bonjour,

Merci pour se que tu fait Lanfeust 313,je trouve sa super !! ;)

A quand la suite ? ? :-°

Voir tous les commentaires