Archive

QBasic – Introduction au QBasic

This entry is part 1 of 30 in the series QBasic - Tutoriel

Le QBasic est un langage de programmation que l’on a coutume de qualifier de
‘langage de programmation de haut niveau’. C’est à dire qu’il vous propose
des fonctions simples à utiliser pour réaliser des opérations qui pourraient
être longues et fastidieuses dans d’autres langages. Par exemple, pour écrire
Bonjour sur l’écran de votre ordinateur, il faudra plusieurs lignes
en Assembleur, alors qu’en QBasic, il en suffira d’une seule :


PRINT « Bonjour »

D’ailleurs, QBasic est plus ou moins directement issu du BASIC (oui! celui des
ATARI & Co.) et Basic, ça veut dire ce que ça veut dire :

Beginner’s All-Purpose Symbolic Instruction Code

Qui en gros veut dire, Code d’Instructions Symboliques pour Tous Usages et pour
Débutants
. QBasic est un bon langage pour débuter dans la programmation. On
peut par contre regretter l’absence de compilateur qui permettrait de créer des
fichiers EXE. En effet, on dit que QBasic est un langage ‘interprété’. Mais ce
qui fait du Basic un langage très facile d’utilisation. De plus, il existe désormais
sur la toile des utilitaires créés par des programmeurs de génie permettant de
compiler vos programmes en EXE. Ou alors, vous pouvez passer à QuickBasic qui s’articule sur
la même conception de la programmation, mais qui est beaucoup plus puissant.

Un autre point faible de ce langage interprété est la faible vitesse d’exécution.
Pour débuter, je pense que ça suffit bien et avec les machines actuelles…
Mais rien ne vous empêche de faire de l’Assembleur…

Pour pouvoir vous lancer dans QBasic, il vous suffit d’une machine tout ce qu’il y a
d’ordinaire. Il vous suffit de MS-Dos et de l’application Microsoft QBasic. Si vous
utilisez Windows, QBasic est présent sur le CD-ROM. La version que j’utilise est la
version 1.1. Je ne pense pas qu’il y ait des différences majeures entre les versions,
mais bon…

Ca y est, vous êtes dans QBasic. Normalement, « l’affaire » doit se présenter ainsi :

  • En haut de la fenêtre, la barre de menu.

  • A l’arrière plan, deux fenêtres (nous y reviendrons).

  • Tout en bas, une barre avec les raccourcis des commandes les plus utilisées ainsi que les coordonnées du curseur.

  • Enfin, une fenêtre au centre de l’écran vous souhaite la bienvenue. L’option guide
    vous amène dans l’aide en ligne de QBasic.


Appuyez sur Echap. Vous remarquez qu’il y a deux fenêtres : une grande et une petite.

  • La fenêtre Immédiate (la petite), ne permet d’exécuter qu’une instruction à la fois.

  • La fenêtre Programme (la grande), est celle qui permet d’écrire de vrais programmmes.


Dans les premiers temps, nous nous servirons seulement de la fenêtre immédiate. Si vous avez déjà
utilisé des versions antérieures de Basic (ATARI & Co.), vous devez savoir qu’en QBasic :

  • La numérotation des lignes (10, 20, 30, etc) n’est plus nécessaire, bien que cette opération soit
    encore supportée.

  • La fenêtre immédiate correspond à l’ancien mode immédiat, c’est à dire qu’une commande tapée dans
    cette fenêtre est immédiatement exécutée après avoir appuyé sur Entrée.

  • La fenêtre programme représente le mode programme et permet de rédiger un programme et de le
    lancer ultérieurement.

Categories: QBasic Tags:

QBasic – Ecrire sur l’écran

This entry is part 2 of 30 in the series QBasic - Tutoriel

Nous allons maintenant rentrer dans le vif du sujet et découvrir l’ensemble de
ce langage de haut niveau qui est le QBasic. Tout d’abord l’instruction PRINT.

Déplacez-vous dans la fenêtre immédiate. C’est fait ? Bien. Maintenant, écrivez :


PRINT 3 + 4

N’oubliez pas d’appuyer sur la touche Entrée à la fin. L’écran de sortie doit
ressembler plus ou moins à :

7
Appuyez sur une touche pour continuer

Que s’est-il passé ? Vous venez tout simplement de demander à l’ordinateur
d’effectuer l’addition du chiffre 3 et du chiffre 4, comme à une calulatrice
(avouez qu’il y a moins cher…).

À ce stade de l’apprentissage, il est bon de préciser que vous pouvez taper
PRINT ou bien print ou encore PrInT,
cela revient au même. De même, 3+4 ou 3   &nbsp+    4
sont toujours égal à 7.

Contrairement à ce que son nom laisse indiquer, l’instruction PRINT
affiche du texte sur l’écran. Si vous vouliez imprimer le résultat de cette
fabuleuse opération, il aurait fallu utiliser l’instruction LPRINT
à la place de PRINT et ‘7′ aurait été imprimé sur l’imprimante.
Mais laissons ceci de côté pour l’instant, nous y reviendrons en temps utile.

Toujours dans la fenêtre immédiate, écrivez :

PRINT « 3 + 4″

Que s’est-il passé ? L’ordinateur n’affiche plus 7 comme il était prévu, mais
3 + 4 !

Et oui! L’instruction PRINT ne sert pas qu’à réaliser de l’arithmétique
basique, mais aussi à afficher n’importe quel texte, pour peu que celui-ci soit
placé entre apostrophes « .

Par contre, pour afficher l’apostrophe elle-même, on ne pourra pas la doubler comme dans d’autres
langages qui le permettent. Il faudra utiliser le caractère ASCII correspondant qui est 34. Nous
verrons plus tard comment utiliser la table de caractère ASCII.

Categories: QBasic Tags:

QBasic – Mathématiques élémentaires

This entry is part 3 of 30 in the series QBasic - Tutoriel

Ha, les maths! Et oui, en programmation les maths sont quasi-omniprésentes et on peut
dire qu’elles sont à la base de toute application qui se respecte, en particulier
des jeux. Rassurez-vous, vous n’aurez nul besoin d’effectuer des manipulations de BITS
ou autre, comme c’est le cas en Assembleur. Pour l’instant nous nous limiterons aux mathématiques
de base, puis nous approfondirons au fil du temps. Le principal à savoir se trouve dans le tableau
ci-dessous :



































Récapitulatif des opérateurs arithmétiques
Opérateur Fonction Exemple de code Résultat
+ Addition PRINT 3 + 4 7
- Soustraction PRINT 7 – 4 3
* Multiplication PRINT 4 * 5 20
/ Division PRINT 63 / 9 7



A noter encore que QBasic connait lui aussi les priorités d’opérations. C’est à dire
que si vous voulez additionner 4 à 3 puis multiplier le résultat par 5, il vous
faudra user des parenthèses et écrire :

PRINT (4 + 3) * 5

dont le résultat serait

35

et non pas

PRINT 4 + 3 * 5

dont le résultat serait

19

Categories: QBasic Tags:

QBasic – La ponctuation (syntaxe)

This entry is part 4 of 30 in the series QBasic - Tutoriel
  1. CLS
  2. Le point virgule (;)
  3. La virgule (,)
  4. Le double point (:)

La ponctuation ou la syntaxe (le deuxième terme est quand même plus approprié) est LA
rêgle à respecter en matière de programmation. Disons que le terme de syntaxe est plus
général, et que ce que j’appelle ponctuation ne concerne que ce qui suit :


; point virgule
, virgule
: double points

Nous allons étudier tout ceci en détail. Mais avant, nous allons apprendre une autre
instruction élémentaire et bien utile.


CLS


CLS est une abréviation de CLear Screen. Comme son nom le laisse deviner cette
instruction efface l’écran. Essayez donc (toujours dans la fenêtre immédiate). La syntaxe est
la suivante :

CLS

À partir de maintenant, nous allons presque toujours utiliser la fenêtre programme. Vous devez
donc vous placer dans cette dernière pour écrire les lignes de code. Dans cette fenêtre, le
programme n’est pas exécuté tant que vous ne l’avez pas demandé, c’est à dire que contrairement
à la fenêtre immédiate, lorsque vous appuyez sur Entrée, il ne se passe rien ou plutôt, le
programme n’est pas lancé. Pour l’exécuter, il vous faut presser la touche Shift(Majuscule) + F5
ou aller dans le menu Execution.


Le point virgule (;)


Vous êtes dans la fenêtre programme. Ecrivez :

CLS
PRINT « 7 + 9 = »
PRINT 7 + 9

N’oubliez pas d’appuyer sur Shift+F5.
L’écran doit ressembler à :

7 + 9 =
16
Appuyez sur une touche pour continuer

Que s’est-il passé ? QBasic a tout d’abord effacé l’écran (CLS). Puis a écrit 7 + 9, puisque ce
texte était placé entre apostrophes. Enfin il a effectué l’opération 7 + 9 et
affiché le résultat, c’est à dire 16.

Bien. Mais cette présentation est assez sommaire, car le résultat 16 se trouve à la ligne et
on aimerait bien qu’il se trouve à la suite. On va donc user du point virgule. Ecrivez :

CLS
PRINT « 7 + 9 = »;
PRINT 7 + 9

Cette fois, c’est bon! Après avoir exécuté le programme, vous allez lire :

7 + 9 = 16
Appuyez sur une touche pour continuer

Le point virgule force l’affichage sur la même ligne

Dès lors, la loi du moindre effort l’emporte, et l’on peut arriver au même résultat en écrivant
un PRINT de moins :

CLS<
PRINT "7 + 9 ="; 7 + 9

Le résultat sera le même, c’est à dire :

7 + 9 = 16
Appuyez sur une touche pour continuer


La virgule (,)


Et si à la place d’un point virgule, on avez utilisé une virgule ?

Le résultat aurait été tout autre. Ecrivez :

CLS
PRINT « 7 + 9 = », 7 + 9

Résultat :

7 + 9 = 16

Un espace d’une tabulation s’est créé entre 7 + 9 = et 16. La valeur d’une tabulation par défaut est
de 8 caractères.



À propos de cette loi du moindre effort, je crois qu’il est temps pour moi de vous confier ce petit
secret qui n’en est pas un et vous dire que :

  • Au lieu d’écire PRINT qui représente quand même 5 caractères, vous pouvez le
    remplacer par un point d’interrogation, ?. Exemple :

    ? « QBasic est un langage surprenant. »

    PRINT s’affichera comme par magie.

  • Lorsque vous écrivez une suite de termes après print, vous n’êtes pas obligé d’écrire les
    points virgules. Exemple :

    PRINT « QBasic  » « est un  » « langage  » « surprenant. »

    Les points virgules se mettront comme par magie.


Le double point (:)


Les doubles points servent à écrire plusieurs instruction sur la même ligne. Ainsi notre programme de tout
à l’heure :

CLS
PRINT « 7 + 9 = »;
PRINT 7 + 9

Pourra s’écrire :

CLS : PRINT « 7 + 9 = »; : PRINT 7 + 9

Le résultat, vous l’aurez deviné, sera identique :

7 + 9 = 16
Appuyez sur une touche pour continuer

Categories: QBasic Tags:

QBasic – Les variables

This entry is part 5 of 30 in the series QBasic - Tutoriel
  1. Les variables numériques
  2. Les variables « chaînes de caractères »
  3. Substitution de la valeur de 2 variables

Qu’est ce qu’une variable? La bonne question. Pour simplifier, disons qu’une variable est un
emplacement que l’on réserve dans la mémoire de l’ordinateur pour y stocker des données. Mais
voilà, la gestion de la mémoire d’un ordinateur est relativement complexe (ceux qui ont fait de
l’Assembleur me comprennent). Le but du langage BASIC est de simplifier au maximum la vie du
programmeur. Pour gérer les variables, il suffit de leur administrer un nom, au choix, qui peut
comporter 40 caractères, qui ne comporte aucun caractère accentué comme é, à, ü, etc… Une
variable ne peut avoir un nom dit réservé. C’est à dire que vous ne pouvez pas appeler une variable
CLS, PRINT, ou n’importe quel autre mot réservé. Il peut comporter des
chiffres, mais la variable doit impérativement commencer par une lettre. Le caractère $ ne doit
être utilisé que dans des cas précis que nous allons étudier.


  • Voici des noms de variables valides :

    I
    Anticonstitutionnellement
    Compter2

  • Et voici des noms de variables invalides :

    PRINT
    HéHé
    ZoroEstArriveSansSePresserLeGrandZoroLeBeauZoroAvecSaCapeEtSonGrandChapeau
    113Vitry


Les variables numériques


Une variable numérique contient un nombre. Ce nombre peut être décimal, entier, pour l’instant nous
ne compliquons pas les choses.

Pour donner la valeur ‘5‘ à la variable ‘Chiffre‘, il faut procéder ainsi :

LET Chiffre = 5

Remarquez l’utilisation du mot-clef LET. Placez-vous dessus et appuyez sur F1. L’aide
s’affiche. Vous remarquez que l’emploi de cette instruction n’est guère recommandé même déconseillé.
C’est une survivance des anciennes versions de BASIC. Ne l’utilisez pas et écrivez simplement :

Chiffre = 5

On a affecté la valeur ‘5‘ à ‘Chiffre‘. Vous pouvez d’ailleurs le vérifier par ce simple programme :

CLS
Chiffre = 5
PRINT Chiffre

Le résultat sera :

5
Appuyez sur une touche pour continuer

On peut bien entendu faire des calculs avec des variables. Ainsi rajoutez ces lignes :

CLS
Chiffre = 5
PRINT Chiffre * NouvelleVariable

Le résultat sera :

0
Appuyez sur une touche pour continuer

Pourquoi 0 ? Parce que l’on a fait intervenir une nouvelle variable, nommée ‘NouvelleVariable
qui n’a pas été initialisée. Sa valeur est donc NULLE et jusqu’à preuve du contaire, 5 * 0 = 0.

Mais QBasic va encore plus loin. On peut affecter le résultat de calculs à des variables. Ainsi :

CLS
Chiffre = 5
NouvelleVariable = 3
Resultat = Chiffre * NouvelleVariable + 1
PRINT Resultat

Ce qui donnera :

16
Appuyez sur une touche pour continuer

On a tout d’abord affecté 5 à ‘Chiffre‘, puis 3 à ‘NouvelleVariable
et enfin, on a multiplié ‘Chiffre‘ par ‘NouvelleVariable‘, ajouté 1
et affecté le résultat à la variable ‘Resultat‘.

On a ensuite affiché le contenu de la variable ‘Resultat‘ grâce à l’instruction
PRINT.


Les variables « chaînes de caractères »


Dans la plupart des langages informatiques, on distingue deux types de variables. Les variables
numériques que nous avons étudiées, et les variables « chaînes de caractères ».

Souvenez-vous. C’était dans une section précédente, avec PRINT. Nous avions vu que pour afficher
du texte, il faut le placer entre guillemets. Ce texte entre guillemets est appelé « chaîne de
caractères ». Et l’on peut très bien affecter une chaîne de caractères à une variable. Pour donner
la valeur ‘QBasic est un langage surprenant‘ à la variable ‘Langage‘,
il faut procéder ainsi :

Langage = « QBasic est un langage surprenant »

Cette ligne de code est-elle bonne ? On va voir ça. Exécutez le programme. Que ce passe-t-il ?
QBasic vous signale une erreur Types incompatibles. Pourquoi ? C’est très simple. Comme vous le
savez, il existe 2 types de variables. Mais QBasic doit pouvoir faire la différence entre ces types.
Dans la ligne de code ci-dessus, on essaye d’affecter une chaîne de caractères à une variable de type
numérique, d’où l’erreur ‘Types incompatibles’, car une chaîne de caractères n’est pas, par définition,
numérique.

Pour que QBasic puisse faire la distinction entre ces 2 types, il faut, à la fin du nom de la variable,
placer le caractère $.

Ainsi :

Langage

devient :

Langage$

Cette fois ci, c’est bon. Essayez le programme suivant.

CLS
Langage$ = « QBasic est un langage surprenant »
PRINT Langage$

Le résultat sera :

QBasic est un langage surprenant

Appuyez sur une touche pour continuer

Les rêgles de ponctuation s’appliquent également aux variables. Mais une chose sensationnelle que
l’on peut réaliser avec les chaînes de caractères s’appelle la concaténation de chaines.
Un petit exemple vaut mieux qu’un long discours :

CLS
Partie1$ = « Maintenant, je suis aussi  »
Partie2$ = « un PC WARRIOR »
Phrase$ = Partie1$ + Partie2$
PRINT Phrase$

Le résultat sera :

Maintenant, je suis aussi un PC WARRIOR
Appuyez sur une touche pour continuer

On a fait de deux chaînes de caractères (’Partie1$‘ et ‘Partie2$‘), une seule chaîne : ‘Phrase$‘.
Et l’on peut ajouter autant de chaînes que l’on veut.


Substitution de la valeur de 2 variables


Pour substituer facilement les valeurs de deux variables différentes, au lieu de passer et
repasser par de multiples variables temporaires, on peut utiliser l’instruction SWAP.
Pour une variable Var1 et une variable Var2, on écrira :

SWAP Var1, Var2
‘ La variable Var1 à la valeur de Var2, et la variable Var2 à la valeur de Var1

Categories: QBasic Tags:

QBasic – Les commentaires

This entry is part 6 of 30 in the series QBasic - Tutoriel
  1. REM
  2. L’apostrophe (’)

Plus on avance en programmation, plus les programmes deviennent longs, plus ils deviennent
complexes et moins on s’y retrouve. C’est pourquoi il existe les commentaires. Dans un
commentaire, on peut écrire ce que l’on veut.

Il existe 2 façons d’écrire des commentaires :


REM


REM est l’abréviation de REMARK. On l’utise comme ceci :

REM Ceci est un commentaire, et je peux écrire ce que je veux

REM est présent depuis les premières versions de BASIC et a été conservé mais n’est
pratiquement plus utilisé. On lui préfère l’apostrophe.


L’apostrophe (’)


L’apostrophe fonctionne comme REM. Mais il a deux petits avantages :

  • Toujours la loi du moindre effort : une touche à presser pour l’apostrophe, contre trois pour REM.

  • Avec l’apostrophe, on peut écrire des commentaires en fin de ligne :

    CLS ‘ Cette instruction efface l’écran
    PRINT « 7 + 9 = »; ‘ Celle-ci affiche 7 + 9 =
    PRINT 7 + 9 ‘ Quand à celle là, elle effectue
    ‘ l’opération 7 + 9 et affiche le résultat

Categories: QBasic Tags:

QBasic – Les constantes

This entry is part 7 of 30 in the series QBasic - Tutoriel

À l’opposé des variables, il y a les constantes. Une constante ne varie pas. Ca peut être par
exemple :


5
3.14159265458
78925656

5 ne varie pas. C’est toujours 5. De même pour 78925656
et 3.14159265458. Ils ne varient pas. Maintenant, imaginons un programme qui ait
besoin d’utiliser à plusieurs reprises le nombre PI. Au lieu d’écrire à chaque fois 3.14159265458,
on peut définir une constante ‘PI‘ qui ne variera pas et que l’on pourra substituer.
Pour cela, on écrit :

CONST PI = 3.14159265458 ‘ PI est une constante dont la valeur est 3.14159265458

La déclaration d’une variable doit toujours se faire avant sa première référence. Pour
calculer la surface d’un cercle vous devez donc définir PI avant son premier appel :

CONST PI = 3.14159265458 ‘ Définition de PI
CLS
PRINT « La surface d’un cercle d’un rayon de 5 est « ; PI * 5 ^ 2
‘ Remarquez l’utilisation du point virgule et de l’accent circonflexe pour
‘ le carré

Le résultat sera :

La surface d’un cercle d’un rayon de 5 est 78.5398163645

Categories: QBasic Tags:

QBasic – Entrée de données

This entry is part 8 of 30 in the series QBasic - Tutoriel
  1. Avec des nombres
  2. Avec des chaînes de caractères
  3. Remplacement de PRINT par INPUT

Nous avons vu dans le chapître précédent comment calculer la surface d’un cercle avec l’ordinateur.
Mais comment faire pour calculer la surface de plusieurs cercles sans avoir à modifier le programme?
C’est très simple. Nous allons faire appel à l’instruction INPUT. L’instruction INPUT
va, en quelque sorte, poser une question à l’utilisateur du programme et ce dernier pourra donner
sa réponse qui sera stockée sous la forme d’une variable, numérique ou chaîne de caractères suivant
le cas. La syntaxe de l’instruction INPUT est la suivante :


INPUT MaVariable


Avec des nombres


Nous allons reprendre le programme précédent en le modifiant quelque peu. Ecrivez :

CONST PI = 3.14159265458 ‘ Définition de la constante PI
CLS ‘ Effacement de l’écran
PRINT « Entrez le rayon du cercle »
INPUT Rayon ‘ On stocke la valeur du rayon dans la variable ‘Rayon’
PRINT « La surface d’un cercle d’un rayon de « ; Rayon;  » est « ; PI * Rayon ^ 2
‘ On effectue le calcul et on affiche le résultat

Le résultat doit ressembler à :

Entrez le rayon du cercle
? _

Un point d’interrogation est affiché. L’ordinateur attend votre réponse. Entrez n’importe quel chiffre, par
exemple 5. Le chiffre 5 est alors stocké dans la variable Rayon.
Vous connaissez la suite, on effectue le calcul et on affiche le résultat.


Avec des chaînes de caractères


On peut très bien affecter des chaînes de caractères à une variable grâce à l’instruction INPUT.
Voici un autre exemple :

CLS
PRINT « Entrez votre nom »
INPUT Nom$ ‘ Ne pas oublier le $
PRINT « Bonjour « ; Nom$

Le programme va vous demander votre nom puis l’afficher. Les rêgles de ponctuation s’appliquent avec l’
instruction INPUT. Placez donc un point virgule à la fin de la seconde ligne :

CLS
PRINT « Entrez votre nom »; ‘ On a placé un point-virgule
INPUT Nom$ ‘ Ne pas oublier le $
PRINT « Bonjour « ; Nom$

Vous l’avez deviné, le point d’interrogation se trouve maintenant sur la même ligne. Avec une
virgule ça aurait été pareil, sauf qu’il y aurait eu une tabulation.


Remplacement de PRINT par INPUT


Afin de simplifier l’ensemble, on peut maintenant afficher un texte avec l’instruction INPUT, ce
qui était impossible dans les versions antérieures de BASIC. En appliquant ces rêgles, voici la
nouvelle forme du programme :

CLS
INPUT « Entrez votre nom »; Nom$ ‘ On supprime l’instruction PRINT
PRINT « Bonjour « ; Nom$

Ici, le rôle du point virgule est différent. Avec un point virgule, voici l’affichage :

Entrez votre nom?_

Avec une virgule, on aurait eu :

Entrez votre nom_

Et oui, le point d’interrogation ne s’affiche plus avec la virgule, ce qui dans des cas améliore
l’esthétique.

Categories: QBasic Tags:

QBasic – Les boucles inconditionnelles

This entry is part 9 of 30 in the series QBasic - Tutoriel
  1. Avec RUN
  2. Avec GOTO
  3. ON GOTO
  4. END

Imaginez que vous soyez fort en colère contre quelqu’un. Après avoir consulté un Marabou Africain,
vous avez appris que pour lui jeter un sort il faudra écrire 987245679137542 fois ‘Il va t’arriver
malheur !’. Malin comme vous l’êtes, vous vous êtes dit, je vais demander à mon ordinateur de le
faire à ma place.

Mais écrire 987245679137542 fois PRINT « Il va t’arriver malheur ! » n’est guère plus
rapide. Nous allons donc utiliser une boucle.


Avec RUN


C’est une méthode qu’un bon programmeur n’aime pas tellement utiliser. Il n’empêche qu’elle marche
correctement. RUN signifie ‘courir’ en Anglais. Ici il n’est nul question de faire courir
l’ordinateur. Dans ce contexte, RUN donne l’ordre d’exécuter le programme depuis le tout début.
Nous pouvons écrire un court programme permettant d’écrire une multitude de fois ‘Il va t’arriver
malheur !’.

PRINT « Il va t’arriver malheur ! »
RUN

Vous pouvez essayer, ça marche très bien. Pour arrêter, appuyez sur CONTROL + PAUSE.


Avec GOTO


Une autre méthode serait d’utiliser GOTO. À l’origine, GOTO ne sert pas à faire des boucles.
Mais dans ce contexte, ça suffira bien.

Pour utiliser GOTO, il faut définir une étiquette. Par exemple, pour une étiquette
que l’on appellera DEBUT, on écrira DEBUT, suivi des doubles points : :

DEBUT: ‘ N’oubliez pas les doubles-points, ils sont indispensables !

Lorque l’ordinateur arrivera à l’instruction GOTO, il ira à l’étiquette spécifiée :

DEBUT: ‘ N’oubliez pas les doubles-points, ils sont indispensables !
PRINT « Il va t’arriver malheur ! »
GOTO DEBUT ‘ Lorsque l’ordinateur arrive à cette ligne,
‘ il remonte à la première ligne

Là aussi ça marche très bien et là aussi, pour arrêter, appuyez sur CONTROL + PAUSE.


ON GOTO


À proprement parler, ON GOTO n’est pas tout à fait une structure inconditionnelle. ON GOTO
est toujours associé d’une part à une variable numérique, et d’autre part à une série de labels (étiquettes).
L’ordinateur va alors tester la valeur de la variable. Si elle vaut 1, l’ordinateur va aller au
premier label spécifié. Si elle vaut 2, il va au deuxième, et ainsi de suite.

INPUT « Entrez un chiffre entre 1 et 3 : « , Rep

ON Rep GOTO LabelUn, LabelDeux, LabelTrois ‘ on effectue un branchement avec ON GOTO
END

LabelUn:
PRINT « Vous avez écris 1″
END

LabelDeux:
PRINT « Vous avez écris 2″
END

LabelTrois:
PRINT « Vous avez écris 3″
END


Si la valeur renvoyée par l’utilisateur n’est pas dans la fourchette (0 ou 4 par exemple), aucun
branchement n’est effectué.

Par contre, si l’utilisateur avait fourni une valeur comprise dans la fourchette, mais non entière,
le branchement aurait été effectué avec l’arrondi. Par exemple, si on avait donné 1.4,
l’arrondi aurrait été 1 et on serait allé au label LabelUn:. Si on avait
donné 1.6, l’arrondi aurrait été 2 et on serait allé au label
LabelDeux:
.


END


END signifie la fin d’un programme. Lorsque l’ordinateur le rencontre, le programme s’arrête.
Il peut être placé n’importe où dans le code.

Categories: QBasic Tags:

QBasic – Les boucles conditionnelles

This entry is part 10 of 30 in the series QBasic - Tutoriel
  1. La boucle FOR…NEXT
  2. La boucle DO…LOOP
  3. La boucle WHILE…WEND
  4. L’instruction EXIT
  5. Imbrication de boucles
  6. Un dernier point

Vous êtes maintenant encore plus en colère, car ce sort que le Marabou vous a conseillé ne fonctionne
absolument pas. Vous retournez le voir et celui-ci vous dit qu’il faut écrire 987245679137542 fois ‘Il va t’
arriver malheur’, pas une de plus, pas une de moins. Vous retournez chez vous, et regardez votre ordinateur. Comment faire ?

Nous allons utiliser ce qu’on appelle une boucle conditionnelle. Comme son nom le laisse indiquer, une boucle conditionnelle
ne s’exécute que sous certaines conditions. Il en existe plusieurs que nous allons étudier.


La boucle FOR…NEXT


Une boucle FOR…NEXT fonctionne un peu comme un Big-Mac (un Sandwich). Entre les deux
tranches de pain se trouvent les instructions que vous voulez répéter X fois. Voici la première ligne
d’une structure FOR…NEXT. C’est la partie FOR :

FOR UneVariable = 1 TO 987245679137542

Voici ce que l’on a écrit dans l’ordre. D’abord, le mot-clef FOR. Ensuite, le nom d’une variable numérique.
Ici, on l’a appelée ‘UneVariable‘, mais on aurait très bien pu l’appeler ‘Cheval‘ ou ‘Peter‘.

Vient ensuite le signe égal ‘=‘. Ca ne vous rappelle rien? Et oui, on va affecter à la variable spécifiée une
valeur. La première valeur sera 1 car c’est celle qu’on a spécifié. Mais si on avait écrit FOR UneVariable = 5 TO 987245679137542,
la première valeur aurait été 5.

Ensuite intervient le ‘TO‘. Le second chiffre, ‘987245679137542‘, est la limite supérieure à laquelle la boucle
s’arrêtera. C’est à dire que quand la variable ‘UneVariable‘ sera égale à ‘987245679137542‘,
la boucle s’arrêtera.

Après cette ligne, on écrit les instructions à exécuter. Dans notre cas, il n’y en a qu’une seule :

PRINT « Il va t’arriver malheur ! »

Pour finir, on place la tranche de mie de pain inferieure, c’est à dire le NEXT, suivi du nom de la variable :

NEXT UneVariable

Le programme complet doit donner :

FOR UneVariable = 1 TO 987245679137542 ‘ La boucle va se répéter 987245679137542 fois
PRINT « Il va t’arriver malheur ! »
NEXT UneVariable ‘ On retourne au FOR

Cette fois-ci, le nombre de fois sera respecté. Vous pouvez quand même quitter avec CONTROL + PAUSE.

Avec FOR…NEXT, on peut également effectuer un décompte. Observez le programme suivant qui
réalise un compte à rebours de 10000 à 0 :

FOR I = 10000 TO 0 STEP -1 ‘ Compte à rebours de 10000 à 0 de 1 en 1
PRINT I
NEXT I

Vous remarquez que l’on a fait appel à un nouveau mot-clef : STEP. En Anglais, STEP
signifie PAS. En effet, dans une boucle FOR…NEXT, le PAS par défaut est de 1. Pour effectuer
un compte à rebours, il nous faut aller de -1 en -1.

La boucle FOR…NEXT peut s’avérer très utile en cas de structure répétitive. Elle peut aussi
servir à réaliser des temporisations, bien qu’il existe des possibilités plus efficaces.


Attention ! On pourrait penser qu’une boucle FOR…NEXT s’exécute, quoiqu’il arrive, le nombre de
fois spécifiées. Essayez donc ce petit exemple :

CLS
FOR i = 1 TO 10000
i = 10000
PRINT « Hello ! »
NEXT i

On pourrait penser que le programme va écrire 10000 fois ‘Hello !’. Et bien non. La boucle ne s’arrête non
pas au bout de 10000 fois, mais lorsque la variable i est égale à 10000. Comme on a affecté la valeur 10000 à i
avant d’entrer dans la boucle, la boucle ne s’exécute qu’une fois ! Ne riez pas, ce genre d’erreur arrive plus souvent que vous ne le croyez…


La boucle DO…LOOP


La boucle DO…LOOP est d’un tout autre ordre. Ici, il n’y a pas de compteur comme dans une
boucle FOR…NEXT. La seule analogie possible entre les deux, est que elle aussi est un Big-Mac.

Avant toute chose, essayez ce programme :

DO ‘ Tête de la boucle
INPUT « Quel âge avez vous ? », Age ‘ Instruction(s)
LOOP ‘ Queue de la boucle

Vous observez que le programme vous demande continuellement votre âge. Vous pouvez arrêter avec
CONTROL + PAUSE. Une autre façon de la stopper serait de compléter la boucle par une CONDITION.

Pour imposer une condition à une boucle DO…LOOP, il y a deux mots-clefs à connaître :

  • UNTIL : en Anglais, signifie jusqu’à. On aurait pu écrire :

    DO
    INPUT « Quel âge avez vous ? », Age
    LOOP UNTIL Age > 18 ‘ Faire une boucle JUSQU’À
    PRINT « Vous êtes majeur » ‘ ce que Age soit SUPERIEUR à 18

    Vous l’aurez certainement deviné, cette boucle se répéte jusqu’à ce que l’utilisateur
    attribue à la variable ‘Age‘, une valeur supérieure à 18 par l’intermédiaire de l’instruction ‘INPUT‘.
    À la sortie de la boucle, l’ordinateur nous confirme notre Etat Civil.

  • WHILE : en Anglais, signifie tant que. On aurait pu écrire :

    DO
    INPUT « Quel âge avez vous ? », Age
    LOOP WHILE Age < 18 ' Faire une boucle TANT QUE
    PRINT "Vous êtes majeur" ' Age est INFERIEUR à 18

    Là aussi vous l’aurez deviné, la boucle se répéte tant que l’utilisateur attribue
    à la variable ‘Age‘ une valeur inférieure à 18 par l’intermédiaire de l’instruction ‘INPUT‘.
    Ici aussi l’ordinateur nous confirme notre Etat Civil.


Ces deux exemples sont équivalents. C’est à vous d’utiliser UNTIL ou WHILE selon la situation. Ici, on aurait
plutôt utilisé UNTIL.

La condition imposée peut se positionner soit derrière DO, soit derrière LOOP. Cela influence
du tout au tout le comportement du programme. Observez :

Age = 35 ‘ On initialise préalablement
DO ‘ la variable Age à 35
INPUT « Quel âge avez vous ? », Age
LOOP UNTIL Age > 18
PRINT « Vous êtes majeur »

De toute évidence la boucle fonctionne normalement, la variable étant testée à la fin de la boucle.

Mais si on avait placé la condition après DO :

Age = 35 ‘ On initialise préalablement
DO UNTIL Age > 18 ‘ la variable Age à 35
INPUT « Quel âge avez vous ? », Age
LOOP
PRINT « Vous êtes majeur »

Ici, la variable est testée en début de boucle. Age étant supérieur à 18, la boucle est stoppée dès le
début, et les instructions ne sont pas exécutées. L’ordinateur passe directement aux instructions situées
après la boucle.


La boucle WHILE…WEND


La boucle WHILE…WEND a un comportement identique à la boucle DO…LOOP. Mais elle est très peu
utilisée et la boucle DO…LOOP lui est préférée.

Les raisons de son manque de popularité sont les suivantes :

  • Seule la condition tant que est utilisable.

  • La condition n’est positionnable qu’en tête de boucle

  • Cette boucle ne supporte pas l’instruction EXIT (voir ci-dessous)


Notre exemple précédent aurait pu s’écrire :

WHILE Age < 18 ' Tant que Age est inférieur à 18,
INPUT "Quel âge avez vous ?", Age ' la boucle s'exécute
WEND
PRINT "Vous êtes majeur"

Il semble que cette structure de boucle est été conservée dans QBasic pour assurer la compatibilité
de programme écrit dans des versions de BASIC antérieures.


L’instruction EXIT


L’instruction EXIT permet de sortir d’une boucle FOR…NEXT ou DO…LOOP. Pour une boucle
DO…LOOP, on utilisera EXIT DO et EXIT FOR pour une boucle FOR…NEXT. EXIT
doit forcement être utilisé à l’intérieur d’une boucle :

DO
PRINT « Nous allons utiliser l’instruction EXIT »
EXIT DO ‘ On sort de la boucle
PRINT « Ces lignes ne seront pas exécutées car on sort de la boucle »
LOOP

ou avec FOR…NEXT :

FOR i = 1 to 10000
PRINT « Nous utilisons l’instruction EXIT FOR »
EXIT FOR ‘ On sort de la boucle
PRINT « Ces lignes ne seront pas exécutées car on sort de la boucle »
NEXT i


Imbrication de boucles


Plusieurs boucles peuvent être imbriquées l’une dans l’autre, à la manière des poupées russes. Il
faut tout de même respecter une certaine logique. Le haut de la petite poupée ne s’emboîte pas avec
le base de la grande :

FOR i = 1 TO 10
FOR j = 1 TO 10
PRINT j;  » fois « ; i; » égal « ; j * i
NEXT i
NEXT j

Ainsi l’exemple ci-dessus qui calcule les tables de multiplication de 1 à 10 ne fonctionnera pas car
on a permuté NEXT i et NEXT j. Si on exécute, l’erreur ‘NEXT sans FOR‘ se produira. Après correction, cela donne :

FOR i = 1 TO 10
FOR j = 1 TO 10
PRINT j;  » fois « ; i; » égal « ; j * i
NEXT j
NEXT i

De même, avec DO…LOOP :

FOR i = 1 TO 10
DO
PRINT « Personne N° »; i
INPUT « Quel âge avez vous ? », Age
NEXT i
LOOP UNTIL Age > 18

Ce programme est complétement faux. Là aussi, l’erreur ‘NEXT sans FOR‘ se produit. Il faudrait écrire :

FOR i = 1 TO 10
DO
PRINT « Personne N° »; i
INPUT « Quel âge avez vous ? », Age
LOOP UNTIL Age > 18
NEXT i


Un dernier point


Vous aurez remarqué qu’à chaque fois, lorsque l’on a utilisé une boucle, on a observé un retrait de
2 caractères par rapport aux autres instructions. Ce n’est nullement obligatoire mais bien utile
pour distinguer chaque blocs du programme.

Categories: QBasic Tags: