Sommaire

Introduction

Le langage BASIC permet de créer des programmes, c'est-à-dire une suite d'instructions données à l'ordinateur. Pour cela on utilise des mots-clé qui sont toujours en majuscules. Par exemple, l'instruction «CLS» donne l'ordre d'effacer l'écran et «END» ordonne l'interruption du programme. Pour séparer deux instructions sur une même ligne, on utilise les deux-points.

Affichages et saisies

Observation

Observez ce petit programme, rentrez-le dans QBASIC et regardez le résultat en appuyant sur MAJ+F5 :

CLS PRINT "Comment vous appelez vous "; INPUT Nom$ PRINT Nom$; PRINT "est un très joli nom !" END

Exercice

A quoi peuvent servir les instructions PRINT et INPUT ? Que contient la variable «Nom$» ? Supprimez les points-virgules à la fin des instructions PRINT puis faites MAJ + F5. Quelle est l'utilité des points-virgules ?

A essayer

Vous pouvez aussi introduire avant un PRINT l'instruction COLOR suivie d'un nombre de 0 à 15 (D'après vous, pourquoi rien ne s'affiche avec COLOR 0 ?) ou l'instruction LOCATE suivie des coordonnées x et y (Attention de ne pas sortir de l'écran !). Par exemple, avant «PRINT Nom$» insérez cette ligne : «LOCATE 12, 25: COLOR 14» Exécutez le programme pour comprendre à quoi servent les deux instructions citées. Essayez aussi d'afficher une chaîne vide (PRINT "") ou d'espaces (PRINT " "). Quelle est la différence ?

Les opérations et les conditions

Observation

étudions ce programme qui calcule l'aire d'un carré :

CLS PRINT "Quel est la longueur du coté du carré (en cm)"; : INPUT Co A = Co * Co PRINT "L'aire du carré est de"; A; "cm²"

On peut déjà faire plusieurs remarques :

Maintenant voyons ce que l'utilisateur peut rentrer comme valeur de Co :

Exercice

Pour remédier à ce dernier problème, nous allons contrôler la valeur de Co avec une condition. Ajoutez la ligne suivante après le «INPUT Co» et faites MAJ + F5 : «IF Co < 0 THEN PRINT "Erreur: une longueur ne peut être négative !": END» Expliquez comment est construite la condition IF...THEN.

Remarque

Si on veut mettre plusieurs conditions, on peut utiliser, entre autres, les opérateurs AND ou OR entre plusieurs conditions. Je pense que je n'ai pas besoin de traduire AND et OR...

Les boucles FOR-NEXT

Avertissement

Vous allez maintenant utilisez des boucles, il arrive que par mégarde, on programme des boucles qui ne s'arrêtent jamais, ou qui bouclent trop longtemps. Si c'est le cas, stoppez l'exécution du programme en faisant [Ctrl] + [Pause/Break].

Observation

Observez attentivement ce programme.

CLS 'Efface l'écran FOR n = 5 TO 10 PRINT "Attention !" ' Affiche une phrase NEXT n

Remarquons tout d'abord que la fonction des instructions que l'on connaissait déjà on été commentées à l'aide d'une apostrophe (en effet l'interpréteur BASIC ne lit pas ce qui est écrit après celle-ci, les commentaires seront pratiques pour faciliter la compréhension d'un programme).

Maintenant on peut prévoir ce résultat :

Exécutons le programme... L'ordinateur affiche 6 fois «Attention !». Que s'est-il passé ???

Explication

Lorsque l'interpréteur lit une instruction «FOR», celle-ci lui indique qu'il va devoir répéter un groupe d'instructions (ici l'affichage d'une phrase) un certain nombre de fois (ici 6 fois). On appelle ce type de structure une boucle, la boucle FOR-NEXT est construite ainsi :

FOR Variable = Depart TO Arrivée STEP Pas -----Bloc d'instructions----- NEXT Variable

Lorsque l'interpréteur arrive à l'instruction FOR, la Variable (numérique) prends pour valeur le nombre Depart. Puis, tant que la Variable n'est pas égale à Arrivée il exécute le Bloc d'instructions et ajoute le nombre Pas à la variable Variable. A la sortie de la boucle, on a : Variable = Arrivée + Pas.

Remarques

Avertissements

Maintenant, on aimerait bien savoir pourquoi l'ordinateur a affiché 6 «Attention», alors qu'il aurait du en afficher 5, puisque Arrivée-Départ= 10 - 5 = 5. Pour cela, modifiez le programme de manière à ce que l'ordinateur affiche la valeur de n. Combien de, et quelles valeurs prends la variable n ?

Exercice

En changeant le pas, inventez un programme effectuant le compte à rebours suivant : 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0. Vous pouvez vous aidez de cette boucle, qui peut afficher jusqu'à 100 valeurs de x.

FOR x = TO STEP : PRINT x; "|"; : NEXT x

A essayer

Exécutez, puis essayez de comprendre comment marche ce programme...

CLS SCREEN 13'Passage en mode graphique FOR x = 0 TO 255 LINE(x, 0)-(x,319), x 'Trace une ligne verticale de couleur x. NEXT x SLEEP 'Attends l'appuie d'une touche pour continuer. END 'Fin du programme.

Encore des boucles

Il existe d'autres boucles qui ont une structure plus simple, mais offrent plus de risques que FOR-NEXT de boucler à l'infinie...

Observation

CLS PRINT "Vite ! Appuyez sur une touche..." WHILE INKEY$ = "" WEND PRINT "Merci..."

Comme d'habitude, observez, puis exécutez.

Remarque

INKEY$ retourne la touche appuyée par l'utilisateur. Dire que INKEY$ = "" signifie qu'aucune touche n'est enfoncée.

Exercice

Que signifie WHILE en anglais ? Comment est construite la boucle WHILE...WEND ?

Observation

CLS PRINT "Vite ! Appuyez sur une Entrée..." DO TT$ = INKEY$ IF TT$ <> "" THEN IF TT$ <> CHR$(13) THEN PRINT "Non ! J'ai dit sur Entrée !" LOOP UNTIL TT$ = CHR$(13) PRINT "Merci..."

Remarque

Ici, on a transféré le contenu de INKEY$ dans la variable TT$. Cela évite que la touche mémorisée change pendant que l'on vérifie la touche appuyée (Refaites le programme sans intoduire la variable TT$, et vous verrez le résultat !). On remarque aussi que «TT$ <> ""» se lit «TT$ est plus petit ou plus grand que la chaîne vide» ( la relation d'ordre sur les chaînes de caractère est du même genre que l'ordre alphabétique du dictionnaire, mais on en reparlera plus tard...) mais cela se traduit mieux par «TT$ n'est pas égale à la chaîne vide». CHR$(13) est le caractère correspondant à la touche «Entrée », mais ça aussi on en reparlera après.

Exercice

Comment comprenez vous la construction de la double-condition après ce qu'on a dit dans les remarques ? Que signifient DO, LOOP et UNTIL en anglais ? Alors, comment marche ce type boucle ?

Remarque

On aurait pu remplacer la dernière ligne de la boucle par: LOOP WHILE TT$ <> CHR$(13).

Les variables et les calculs entres nombres

Un peu de leçon...

Depuis le début, nous avons un peu parlé des variables (n , Nom$) ainsi que de calculs (A = Co * Co). Nous allons apporter quelques précisions dans cette partie...

Pour simplifier, il existe en gros deux types de variables :

Pour calculer une variable à partir d'une autre ont utilise le signe «égale». De même les 4 signes d'opérations seront : «+-*/». Par exemple, l'instruction Co = Co * Co que j'ai proposée au début est ne signifie pas «Co est égale à son propre carré» mais est comprise ainsi par l'ordinateur: «Multiplier la valeur de Co par la valeur de Co et déposer le résultat dans la variable Co».De même X = X + 1 ne signifie pas que «X est égale à son suivant» mais «Augmenter X de 1» (on parle d'incrémentation). Pour d'autres opérations plus complexes, il faudra utiliser des fonctions, comme SQR(X) pour la racine carrée de X. On peut aussi faire une opération très simple avec des chaînes, que l'on appelle concaténation, c'est a dire la mise bout à bout de 2 chaînes. Par exemple, si A$ = "BON" alors A$ + A$ sera égale à"BONBON".

Observation

CLS INPUT "Nom "; A$ INPUT "Prénom "; B$ INPUT "Age "; Age C$ = "Tu t'appelles " + B$ + " " + A$ + " et tu as" + STR$(Age) + " ans." PRINT C$ PRINT "Je connais quelqu'un qui est deux fois plus agé que toi: il a"; 2 * Age; " ans."

Exercice

Sachant que STR$(Age) convertit le contenu de la variable Age en chaîne de caractères, essayez de prévoir le résultat avant d'exécuter le programme.

Quel est la différence entre les instructions «PRINT A$; B$» et «PRINT A$ + B$» ?

Remarque

VAL() est la fonction réciproque de STR$().

Opérations sur les chaînes de caractères

Observation

CLS PRINT "Le 65e caractère du jeu de caractères de QBASIC est "; CHR$(65) PRINT "Le code ASCII de A est"; ASC("A"); END

Expliquez quelles sont les valeurs retournées par les fonctions CHR$() et ASC().

Que peut être le code ASCII d'un caractère ?

Observez-le jeu de caractères QBASIC en faisant Aide=>Table des matières=>Codes de caractères ASCII. Vous avez ainsi toute la liste des caractères et le code ASCII qui leur est associé.

Remarque

Lorsque vous faites Alt + (Code d'un caractère) dans un traitement de texte, le caractère possédant ce code ASCII s'affiche. Par exemple, ALT + 144 affiche une majuscule «é». Les guillemets ouverts et fermés s'obtiennent par ALT + 174 et ALT + 175.

Exercice

Proposez une instruction qui affiche un guillemet ".

A essayer

CLS : PRINT CHR$(50); CHR$(43); CHR$(50); CHR$(61); CHR$(53)

Si vous avez bien compris la fonction CHR$, vous comprendrez facilement pourquoi l'ordinateur fait un résultat aussi idiot !

Observation

Exécutez le programme suivant :

CLS A$ = "MONDE" L$ = LEFT$(A$, 3) R$ = RIGHT$(A$, 2) COLOR 4: PRINT R$; : COLOR 3: PRINT L$ COLOR 3: PRINT L$; : COLOR 4: PRINT R$ COLOR 15: PRINT "LEN(A$)="; LEN(A$) END

En vous aidant des traductions de LEFT, RIGHT et LEN, expliquez ces trois nouvelles fonctions.

PRINT LEN(" ")

PRINT LEFT$(" ",)

PRINT RIGHT$(" ",)

A essayer

CLS INPUT A$ FOR n = 1 TO LEN(A$) PRINT MID$(A$, n, 1) NEXT n

Comment marche MID$() ?

PRINT MID$(" ", , )

CLS : PRINT "NON"; STRING$(20, ASC("!"))

Comment fonctionne la fonction STRING$() ?

Dessinons avec QBASIC

Avertissement

Pour dessiner, il va falloir passer en mode graphique. En QBASIC, il en existe 11 différents, j'utiliserai dans ce cours les modes 12 ou 13. Vérifiez qu'ils sont bien supportés par votre ordinateur grace à mon fichier screen.zip sinon choisissez-en un autre (Modes 1,2,3,4,7,8,9,10,11).

Observation

Observez bien les effets et l'utilisation des instructions PSET, LINE, CIRCLE et PAINT en exécutant le fichier « instructions_graphiques.zip ».

Cette page est conforme aux normes du W3C - Auteur : Frédéric WANG - Dernière mise à jour : mardi 17 juin 2003
Valid XHTML 1.1 Valid MathML 2.0 Valid SVG Valid CSS