Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AmigaBasic - Les boucles et les sauts (2e partie)
(Article écrit par Michel Descoins et extrait d'Amiga News Tech - octobre 1989)
|
|
Où en étions-nous restés, le mois dernier ? Ah oui, ça me revient :
aux boucles et aux sauts. Ça tombe bien, il y a encore quelques petites choses à approfondir de ce côté-là...
Rappel sur les labels
Avant de commencer, je voudrais savoir ceux qui, dans la salle, ont tout compris au petit programme du
mois dernier ? M'enfin, il est pourtant très simple : nous avons défini ce que l'on appelle "un label",
c'est-à-dire une marque dans notre programme, à laquelle nous pourrons nous référer plus tard, pour
effectuer, justement, des sauts. Si j'osais une comparaison hardie, je dirais que le label est au programme
ce que le code postal est à la lettre : il permet au préposé aux PTT de savoir à quelle agglomération la
missive est destinée. Lorsqu'il rencontre par exemple 42160, le facteur sait qu'il doit déposer le courrier
à Grézolles, dans la Loire (vous pouvez vérifier !). Dans un programme, c'est la même chose : lorsqu'il
rencontre un "GOTO", l'interpréteur effectue un saut, le label étant la destination de ce saut.
Mais revenons à nous moutons. Notre label était ici dénommé "Menu". On reconnaît que c'est un label parce
qu'il est suivi du double-point ":". Vient alors l'affichage des différentes options que notre menu propose,
puis l'attente de la réponse de l'utilisateur. Bien que nous n'avons pas explicitement effectué un test
de la validité de cette réponse, les lignes suivantes permettent de détecter une éventuelle erreur.
Lesdites lignes sont donc destinés à tester le choix effectué, et à se brancher (sauter) à l'option correspondante.
Les tests sont bien entendus réalisés par l'instruction "IF... THEN".
Si le nombre entré n'était ni 1,
ni 2, ni 3, ni 4, ni 5, on retourne alors au menu. Le reste du programme, c'est-à-dire le corps des options lui-même,
est laissé à votre discrétion.
Branchements multiples
Cette méthode est claire et nette ; mais imaginez qu'au lieu de cinq options, le programme en propose 20, voire
30 ou même 40... Cela représenterait un certain nombre de lignes de programme à écrire, toutes de la forme :
IF x=y THEN GOTO Label. Il doit y avoir plus simple.
Le "plus simple" en question, c'est l'instruction "ON... GOTO". Elle permet de tester une valeur quelconque, soit
explicite, soit implicite (c'est-à-dire calculée), et de se brancher, suivant le résultat de ce test, à l'un
des labels dont elle est suivie. Reprenons le même exemple, pour plus de clarté :
Menu:
PRINT "1 - Première option"
PRINT "2 - Seconde option"
PRINT "3 - Troisième option"
PRINT "4 - Quatrième option"
PRINT "5 - Cinquième option"
INPUT "Votre choix : "Choix
'
REM : attention la ligne qui suit
REM : est une seule et même ligne !
ON Choix GOTO Option1, Option2
Option3, Option 4, Option5
GOTO Menu
'
Option1:
'Ici, on fait plein de choses
...
'Et on retourne au menu
GOTO Menu
'
Option2:
'Suite du programme ici
'avec les autres options
|
Si vous comparez ce programme avec celui du mois dernier, vous ne trouverez que peu de différence... Pour être
tout à fait objectif, elle ne tient qu'à une seule ligne, celle où figure l'instruction "ON... GOTO".
L'utilisation même de cette instruction renseigne plus avant sur son utilité et son emploi. Dans notre
exemple, la valeur de la variable "Choix" est testée ; si cette valeur est égale à 1, on se branche au
label "Option1", sinon, si elle est égale à 2, on se branche au label "Option2", sinon... Et ainsi de
suite tant qu'il y a des labels spécifiés (et il peut y en avoir jusqu'à 255 !). Pratique, non ?
Avant de voir un type particulier de branchement, les sous-programmes pour ne pas les nommer,
il me faut signaler, mais vous vous en étiez sans doute déjà aperçu, que GOTO peut servir à réaliser des
boucles infinies. Le programme suivant - qui est totalement idiot, ne le tapez pas -
en est l'illustration vivante (ou presque) :
BoucleInfinie
GOTO BoucleInfinie
|
Ridicule, non ?
Les sous-programmes
Qu'est-ce donc qu'un sous-programme ? Pour simplifier, il s'agit d'une portion du programme que
l'on peut appeler à maintes reprises depuis divers endroits du programme, et qui possède la particularité
de "retourner à l'envoyeur".
x=2
Boucle
GOSUB Carre 'le "é" est interdit!
IF x 256 THEN END
GOTO Boucle
'
Carre:
PRINT x
x=x2
RETURN
|
Si vous exécutez ce programme, vous verrez s'afficher à l'écran les nombres 2, 4, 16 et 256.
Le sous-programme "Carre" est appelé par l'instruction "GOSUB Carre" : il calcule le carré
du nombre x, avant de retourner continuer l'exécution du programme juste après l'instruction
GOSUB qui l'a appelé.
Vous vous en doutez certainement, les sous-programmes simplifient énormément la programmation. Ils
permettent de rendre un programme structuré, c'est-à-dire composé de modules pour ainsi dire
indépendants, avant chacun une tâche particulière à accomplir (calcul, attente d'une entrée au
clavier, graphisme, musique, etc.).
D'ailleurs, l'usage veut que l'on proscrive tant que possible l'instruction GOTO, considérée, à
juste titre à mon avis, comme le symbole de la programmation "spaghetti" (comme les westerns
du même nom). Cela n'a bien sûr rien d'obligatoire, mais c'est un bon exercice que de l'éviter
chaque fois que vous le pouvez. On s'en sort toujours par un WHILE ou un GOSUB.
Les sous-branchements multiples
Eh oui, il fallait s'en douter ; de même que GOTO, GOSUB permet la programmation de branchements
multiples, grâce à l'instruction "ON... GOSUB". Reprenons une fois de plus notre menu :
Menu:
PRINT "1 - Première option"
PRINT "2 - Seconde option"
PRINT "3 - Troisième option"
PRINT "4 - Quatrième option"
PRINT "5 - Cinquième option"
INPUT "Votre choix : ":Choix
REM : attention la ligne qui suit
REM : est une seule et même ligne !
ON Choix GOSUB Option1, Option2
Option3, Option 4, Option5
GOTO Menu
'
Option1:
'Ici, on fait plein de choses
...
'Et on retourne au menu
RETURN
'
Option2:
'Suite du programme ici
'avec les autres options
...
|
Le résultat est le même, mais la programmation est "plus propre". De plus, il sera toujours plus
facile d'apporter d'éventuelles modifications au programme par la suite (ajout ou retrait d'option(s).
A bientôt
Cela suffit pour aujourd'hui. Nous aborderons dès le mois prochain le
délicat problème des paramètres (transmission, variables locales et globales, etc.).
Un sujet conséquent mais ô combien passionnant.
|