Obligement - L'Amiga au maximum

Jeudi 28 mars 2024 - 14:02  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


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.


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]