Tutorial de Qbasic pour débutants

Sommaire:

        Introduction

  • 1) Les variables

  • 2) Affichage et demande de données à l'écran

  • 3) Les tableaux

  • 4) Les conditions

  • 5) Les boucles

      -incrémentielles

      -conditionnelles

  • 6) Traitement des chaînes de caractères

  • 7) Travailler avec des fichiers

  • 8) Le graphisme

----------------------------------------------------------------------------------

        Introduction

Le but de ce tutorial est de vous donner une première approche du QBasic, et de vous donner des techniques pour rendre vos programmes clairs.

Pour commencer, si vous vous posez une question sur un mot-clé en QBasic, il vous suffit de le taper dans l'éditeur, et de cliquer dessus avec le bouton droit de la souris.
Qbasic vous ouvrira automatiquement une aide sur ce mot, avec des explications et des exemples.

Tous les mots-clés du Qbasic sont écrits en majuscules dans ce tutorial, car l'éditeur QBasic les mets en majuscules quand vous les avez bien tapés.
Vous êtes ainsi certains d'avoir écrit un mot que le QBasic comprend.

Le Qbasic accepte également l'utilisation de commentaires. Ils sont indispensables pour la lisibilité de vos programmes, car on oublie souvent à quoi correspond une ligne de code quand on revient dessus longtemps après l'avoir écrite.
Pour insérer un commentaire, 3 possibilités:

  • REM votre commentaire

  • 'Votre commentaire

  • ligne de code 'votre commentaire

Pensez aussi à sauter des lignes pour aérer votre code, et le rendre plus clair

Vous pouvez maintenant vous lancer en toute confiance dans l'apprentissage du Qbasic ;-)


        1) Les variables

Il existe plusieurs types de variables:

  • -INTEGER (entier de -32767 à +32767, 2 octets)

  • -LONG (entier de -2147483647 à +2147483647, 4 octets)

  • -SINGLE (flottant, 4 octets)

  • -DOUBLE (flottant, 8 octets)

  • -STRING (chaine, 1 octet par caractère)

L'interêt de cette diversité et l'économie de mémoire:
en effet, si vous utilisez par exemple la variable age, un integer vous suffira largement.

On peut se dire que comme économie de mémoire, c'est dérisoire, mais rappelons que QBasic ne peut accepter que 64 Ko de mémoire, et dans le cas de tableaux ,l'économie de mémoire peut-être énorme...

Pour spécifier le type d'une variable, 2 manières:

  • DIM nomdevariable AS TYPE (ou TYPE est un des types de variables ci-dessus)

  • rajouter un signe au nom de la variable, ex: age%

Les signes sont:

  • % pour les INTEGER

  • & pour les LONG

  • ! pour les SINGLE

  • # pour les DOUBLE

  • $ pour les STRING

Si vous ne spécifiez pas le type, le type par défaut est SINGLE.

        2) Affichage de données à l'écran

L'instruction la plus basique d'affichage à l'écran est PRINT
Pour commencer, affichons des constantes:

PRINT "Bonjour" affichera bonjour à votre écran



Pour afficher des variables, on met le nom de la variable après PRINT:

PRINT chaine$
PRINT variable%
....



Ces instructions afficheront les valeurs contenues dans les variables chaine$ (ex:"Salut") et variable% (ex:5)
Pour afficher plusieurs variables et constantes à la suite, on utilise le point-virgule:

PRINT chaine$;"bonjour";variable%



affichera le contenu de chaine$, puis bonjour, puis le contenu de variable%.

Pour demander des données à l'écran, l'instruction de base est INPUT.
Sa syntaxe est INPUT "message d'invite",nomvariable Cette instruction affiche le message d'invite, puis attend que l'utilisateur saisisse une valeur et appuie sur entrée. La valeur saisie est stockée dans nomvariable.

INPUT "Quel age avez-vous ?",age%


sert à demander l'age, puis à le stocker dans age%.

Si aucun message d'invite n'est donné, la fonction INPUT affichera un point d'interrogation.


        3) Les Tableaux

Pour grouper des variables ayant la même signification, on utilise des tableaux.
Un exemple concret: vous voulez grouper ensemble les ages des personnes de votre famille, et leurs noms.

Vous aller donc créer 2 tableaux ainsi (on suppose qu'il y a 6 personnes dans votre famille)

DIM ages(6) AS INTEGER
DIM noms(6) AS STRING


Bon, les tableaux sont créés, mais ils sont vides. Pour stocker des valeurs dedans, on écrira donc:

ages(1)=6
ages(2)=8
........
nom(6)="Martin"


Pour l'instant, vous ne voyez pas trop l'utilité... C'est déjà un avantage pour l'organisation de vos variables, mais le principal avantage des tableaux réside dans la possibilité de faire des boucles.

Si vous ne connaissez pas le principe des boucles, allez lire le chapitre correspondant.
Sinon, examinez ce code:

FOR i%=1 TO 6
PRINT noms(i%);" a ";ages(i%);" ans"
NEXT


Vous l'avez compris, la sortie sera:

Benjamin a 6 ans
Francois a 8 ans
.......
Martin a 37 ans


On peut ainsi écrire à l'écran la totalité de nos listes, et ce avec seulement 3 instructions.


        4) Les Conditions

Pour que le programme puisse prendre un décision en fonction d'un ou plusieurs parametres, la syntaxe à utiliser est :

IF condition THEN execution
(si une seule instruction a executer)
IF condition THEN
instruction (si vrai)
instruction (si vrai)
ELSE
insctruction (si faux)

instruction (si faux)
END IF
(si plusieurs instructions à executer)


La rubrique ELSE n'est pas obligatoire mais elle peut etre très utile...

Exemple d'utilisation de IF...THEN :

INPUT "quel age avez-vous ? ",age
IF age<18 THEN
  PRINT "vous n'avez pas l'age de voter"
  PRINT "vous pourrez voter dans ";18-age;" ans"
ELSE
  PRINT "vous avez l'age de voter"
END IF


L'instruction SELECT CASE est également pratique dans le cas de plusieurs tests d'égalité sur la même variable. Sa syntaxe est:

SELECT CASE variable
CASE choix1
  instruction (si variable=choix1)
  instruction (si variable=choix1)
  instruction (si variable=choix1)
CASE choix2
  instruction (si variable=choix2)
CASE choix3
  instruction (si variable=choix3)
CASE ELSE
  instruction (si variable n'est égale ni à choix1, ni à choix2, ni à choix3)
  instruction (si variable n'est égale ni à choix1, ni à choix2, ni à choix3)
END SELECT


Les opérateurs de comparaison sont :

  • = (égal à)
  • < (plus petit que)
  • >(plus grand que)
  • <= (plus petit ou égal)
  • >= (plus grand ou égal)
  • <> (différent)

        5) Les Boucles

Le principal avantage d'un ordinateur, c'est sa capacité à répéter des instructions sans jamais se lasser, ce qui est bien pratique pour faire des programmes dans le genre "écrire les nombres de 1 à 1000".


               A) les boucles incrémentielles

Si on essayait de faire ce programme sans boucle, ca donnerait ceci:

PRINT "1"
PRINT "2"
PRINT "3"
etc...



Bon comme vous pouvez le constater, c'est pas pratique.
On utilisera donc une boucle incrémentielle (une boucle qui incrémente une variable, c'est à dire que sa valeur augmente à chaque passage).
La syntaxe est FOR variable=début TO fin [STEP pas], et NEXT pour spécifier la fin de la boucle. L'argument STEP est facultatif, il est utilisé pour spécifier le pas (ex: de 2 en 2)

FOR i=1 TO 1000
PRINT i
NEXT


On a ainsi la même sortie que le programme d'avant, avec seulement 3 lignes au lieu de 1000.


               B) Les boucles conditionnelles :

Contrairement à la précédentes, l'exécution de cette boucle est soumise à condition.
C'est à dire qu'elle est exécutée tant qu'une condition est vraie, ou jusqu'à ce qu'une condition soit vraie. syntaxe:

DO
instructions
LOOP UNTIL condition
(cette boucle sera exécutée au moins une fois)
ou
DO UNTIL condition
instructions
LOOP


(ici la boucle n'est pas exécutée du tout si l'instruction est vraie au départ)


On peut remplacer UNTIL (jusqu'à) par WHILE (tant que) dans les 2 exemples.

Exemple d'application:

DO
INPUT "Quel est le mot de passe", password
IF password<>"salut" THEN PRINT "password erroné"
LOOP UNTIL password="salut"


        6) Traitement des chaines de caractères

Vous vous apercevrez qu'on a souvent besoin de traiter des chaînes de caractères en QBasic. Tous les opérateurs utilisés sur les chaînes de caractères se finissent par un $ comme les variables chaînes. Voici la liste de ces opérateurs:

MID$(chaine,début,longueur) :
Il permet de prendre une sous-chaine à partir d'une chaîne donnée
Ex : MID$("Bonjour à tous,3,7) renverra "njour à".

LEFT$(chaine,longueur) :
Il prend le début d'une chaîne jusqu'à la longueur indiquée.
Il équivaut à MID$(chaine,1,longueur).
Ex : LEFT$("salut",3) renverra "sal".

RIGHT$(chaine,longueur) :
Vous l'avez compris, c'est comme LEFT$ mais à partir de la droite.
Ex : RIGHT$("salut",3) renverra "lut".

LCASE$(chaine) :
transforme tous les caractères d'une chaîne en minuscules
Ex : LCASE$("SALuT") renverra "salut".

UCASE$(chaine) :
transforme tous les caractères d'une chaîne en majuscules
Ex : UCASE$("saLuT") renverra "SALUT".

STRING$(variable) :
transforme une variable numérique en variable chaine
Ex : STRING$(54) renverra "54".

LEN(chaine) :
renvoie la longueur d'une chaîne. Attention, pas de $ à la fin.
Ex : LEN("salut") renverra 5

SPACE$(nombre) :
sert à ajouter un nombre d'espaces défini.
Ex: "salut"+SPACE$(5)+"à tous" renverra "salut à tous"

SPC(nombre) :
elle a la même fonction que SPACE$ mais s'emploie dans une fonction PRINT.
Ex: PRINT "salut";SPC(5);"à tous" écrira à l'écran "salut à tous".

TAB(nombre) :
s'emploie comme SPC() mais au lieu de spécifie le nombre d'espèces à sauter, on dit à quel colonne on veut s'arrêter.
Ex: PRINT "salut";tab(10);"à tous" écrira à l'écran "salut à tous", où le "à" est la 10è lettre.



        7) Travailler avec des fichiers

Pour pouvoir conserver vos variables même lorsque l'ordinateur est éteint, ou même pour traiter un fichier externe à Qbasic (par exemple pour décrypter un mot de passe), il peut être utile d'écrire et de lire sur des fichier:
Pour ouvrir un fichier afin de lire dessus, on écrit:

OPEN "truc.txt" FOR INPUT AS #1


Le #1 signifie que ce fichier sera désigné par le numéro 1 par la suite Pour lire dessus, on écrit :

LINE INPUT #1,a$


Cela signifie qu'on lit une ligne de #1 et qu'on la stocke dans la chaine a$

Pour écrire sur un fichier, la syntaxe est semblable:

OPEN "truc2.txt" FOR OUTPUT AS #2 (par exemple)
PRINT #1,"salut"


Ce programme écrit salut dans truc2.txt.

On utilise CLOSE #1 pour fermer un fichier (ici le numéro 1), CLOSE sans numéro ferme tous les fichiers ouverts. N'oubliez pas de refermer tous les fichiers que vous ouvrez sous peine de plantage...

La variable EOF(numéro) indique la fin d'un fichier, si elle est égale à 1, c'est que la fin du fichier est atteinte.
Exemple pratique: copie d'un fichier

OPEN "init.txt" FOR INPUT AS #1 'On ouvre le fichier à copier en mode lecture
OPEN "copie.txt" FOR OUTPUT AS #2 'On crée le fichier de copie en mode écriture
DO 'départ de la boucle
LINE INPUT #1,a$ 'on lit une ligne dans le fichier 1
PRINT #2,a$ 'on l'écrit dans le fichier 2
LOOP UNTIL EOF(1) 'on continue jusqu'à ce que la fin du fichier 1 soit atteint


        8) Le graphisme

Pour rendre votre programme plus élégant, vous pouvez insérer des objets graphiques tels que des lignes, des cercles, des rectangles, etc...
Les instructions graphiques sont:

SCREEN nombre
PSET(x,y),couleur
LINE(x1,y1)-(x2,y2),couleur
CIRCLE(x,y),rayon,couleur
LINE(x1,y1)-(x2,y2),couleur,B
LINE(x1,y1)-(x2,y2),couleur,BF


Explications: SCREEN sert à configurer l'écran. Les 3 modes les plus utilisés sont SCREEN 0 (texte seulement, pas de graphisme), SCREEN 12 (800*600 pixels, 16 couleurs) et SCREEN 13 (320*200 pixels, 256 couleurs). Voici le tableau des indicatifs des 16 premières couleurs:

  0: noir
  1: bleu
  2: vert
  3: cyan
  4: rouge
  5: violet
  6: marron
  7: blanc
  8: gris
  9: bleu clair
10: vert clair
11: cyan clair
12: rouge clair
13: violet clair
14: jaune
15: blanc brillant


L'instruction PSET(x,y) sert à allumer un point d'une couleur voulue (blanc par défaut) au coordonnées (x,y). Ex: PSET(0,0),4 allumera un point rouge en haut à gauche de votre écran (les x vont de gauche à droite et les y de haut en bas).

L'instruction LINE(x1,y1)-(x2,y2) sert à tracer une ligne du point de coordonnées (x1,y1) au point de coordonnées (x2,y2).
Si vous rajoutez un argument B (box) comme dans la liste, le programme ne tracera pas une ligne mais un rectangle.
Avec l'argument BF (box full), vous tracerez un rectangle plein.

Vous l'aviez compris, CIRCLE(x,y),r sert à faire un cercle de centre le point de coordonnées(x,y) et de rayon r.
Ex: CIRCLE(320,200),10,1 trace un cercle bleu de rayon 10 pixels au centre de votre écran (en SCREEN 12).



----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------

Informations
Cet article a été écrit par Dark L@nfeust