Vous êtes sur la page 1sur 8

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

Pages spciales

Rpertoires parents

Rpertoire courant

Sommaire
Introduction Affichages et saisies Les oprations et les conditions Les boucles FOR-NEXT Encore des boucles ! Les variables et les calculs entres nombres Oprations sur les chanes de caractres Dessinons avec Qbasic

Introduction
Le langage BASIC permet de crer des programmes, c'est--dire une suite d'instructions donnes 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 sparer deux instructions sur une mme ligne, on utilise les deux-points.

Affichages et saisies
Observation
Observez ce petit programme, rentrez-le dans QBASIC et regardez le rsultat en appuyant sur MAJ+F5 : CLS PRINT "Comment vous appelez vous "; INPUT Nom$ PRINT Nom$; PRINT "est un trs 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'aprs vous, pourquoi rien ne s'affiche avec COLOR 0 ?) ou l'instruction LOCATE suivie des coordonnes x et y (Attention de ne pas sortir de l'cran !). Par

1 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

exemple, avant PRINT Nom$ insrez cette Rpertoires parents 25: COLOR 14 Excutez le programme pour comprendre quoi ligne : LOCATE 12, Pages spciales Rpertoire courant servent les deux instructions cites. Essayez aussi d'afficher une chane vide (PRINT "") ou d'espaces (PRINT " "). Quelle est la diffrence ?

Les oprations 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 dj faire plusieurs remarques : Le programme n'a pas besoin de END pour s'arrter. L'instruction A = Co * Co calcule Co et dpose ce contenu dans la variable A. (D'aprs vous, peut on faire Co = Co * Co ?) A contient un nombre et lorsque celui-ci est affich par PRINT, il est automatiquement encadr par des espaces (ce n'tait pas le cas avec la chane de caractre Nom$). Maintenant voyons ce que l'utilisateur peut rentrer comme valeur de Co : A par quelques exceptions prs (%, &...) l'ordinateur refuse les caractres. Si on rentre une longueur ngative, l'ordinateur l'accepte et calcule l'aire.

Exercice
Pour remdier ce dernier problme, nous allons contrler la valeur de Co avec une condition. Ajoutez la ligne suivante aprs le INPUT Co et faites MAJ + F5 : IF Co < 0 THEN PRINT "Erreur: une longueur ne peut tre ngative !": END Expliquez comment est construite la condition IF...THEN.

Remarque
Si on veut mettre plusieurs conditions, on peut utiliser, entre autres, les oprateurs 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 mgarde, on programme des boucles qui ne s'arrtent jamais, ou qui

2 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

bouclent tropPages spciales longtemps. Si c'est le cas, stoppez l'excution du programme en faisant [Ctrl]courant Rpertoires parents Rpertoire + [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 dj on t commentes l'aide d'une apostrophe (en effet l'interprteur BASIC ne lit pas ce qui est crit aprs celle-ci, les commentaires seront pratiques pour faciliter la comprhension d'un programme). Maintenant on peut prvoir ce rsultat : L'cran est d'abord effac. Deux nouvelles instructions nommes FOR et TO vont effectuer qqchose. La phrase Attention ! va apparatre. L'instruction NEXT va effectuer quelque chose. Excutons le programme... L'ordinateur affiche 6 fois Attention !. Que s'est-il pass ???

Explication
Lorsque l'interprteur lit une instruction FOR, celle-ci lui indique qu'il va devoir rpter 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 Arrive STEP Pas -----Bloc d'instructions----NEXT Variable Lorsque l'interprteur arrive l'instruction FOR, la Variable (numrique) prends pour valeur le nombre Depart. Puis, tant que la Variable n'est pas gale Arrive il excute le Bloc d'instructions et ajoute le nombre Pas la variable Variable. A la sortie de la boucle, on a : Variable = Arrive + Pas.

Remarques
Si le Pas n'est pas prcis, comme dans l'exemple prcdent, il prends pour valeur 1. Un Pas peut aussi tre ngatif !

Avertissements
Ne mettez jamais un pas nul ! Une boucle du type FOR n = 6 TO 6: NEXT n n'effectue qu'une seule fois le blocs d'instructions.

3 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

Une boucle du type FOR n = 5 TO 0 : Rpertoires parents pas le blocs d'instructions. NEXT n n'effectue Pages spciales Rpertoire courant Maintenant, on aimerait bien savoir pourquoi l'ordinateur a affich 6 Attention, alors qu'il aurait du en afficher 5, puisque ArriveDpart= 10 - 5 = 5. Pour cela, modifiez le programme de manire 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
Excutez, 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 excutez.

Remarque
INKEY$ retourne la touche appuye par l'utilisateur. Dire que INKEY$ = "" signifie qu'aucune touche n'est enfonce.

4 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

Pages spciales

Rpertoires parents

Rpertoire courant

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

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

Remarque
Ici, on a transfr le contenu de INKEY$ dans la variable TT$. Cela vite que la touche mmorise change pendant que l'on vrifie la touche appuye (Refaites le programme sans intoduire la variable TT$, et vous verrez le rsultat !). On remarque aussi que TT$ <> "" se lit TT$ est plus petit ou plus grand que la chane vide ( la relation d'ordre sur les chanes de caractre est du mme genre que l'ordre alphabtique du dictionnaire, mais on en reparlera plus tard...) mais cela se traduit mieux par TT$ n'est pas gale la chane vide. CHR$(13) est le caractre correspondant la touche Entre , mais a aussi on en reparlera aprs.

Exercice
Comment comprenez vous la construction de la double-condition aprs 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 dernire ligne de la boucle par: LOOP WHILE TT$ <> CHR$(13).

Les variables et les calculs entres nombres


Un peu de leon...
Depuis le dbut, nous avons un peu parl des variables (n , Nom$) ainsi que de calculs (A = Co * Co). Nous allons apporter quelques prcisions dans cette partie... Pour simplifier, il existe en gros deux types de variables : Les chanes de caractres, qui sont dsign par le suffixe $ pour les variables ou mis entre guillemets pour les chanes que l'on rentre directement (ces dernires ne peuvent donc pas contenir de guillemet) . Elles peuvent tre vide, ou contenir un ou plusieurs caractres. Par exemple, "Bonjour", Nom$, "" sont des chanes de caractres. Les nombres. Il en existe diffrents types comme les nombres entiers (suffixe %). Leur contenu dpend de leur type. Si on ne signale pas de suffixe, ce sont des nombres dcimaux simple prcision (suffixe !).

5 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

Pages spciales Rpertoires parents Rpertoire courant Pour calculer une variable partir d'une autre ont utilise le signe gale. De mme les 4 signes d'oprations seront : +-*/. Par exemple, l'instruction Co = Co * Co que j'ai propose au dbut 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 dposer le rsultat dans la variable Co.De mme X = X + 1 ne signifie pas que X est gale son suivant mais Augmenter X de 1 (on parle d'incrmentation). Pour d'autres oprations plus complexes, il faudra utiliser des fonctions, comme SQR(X) pour la racine carre de X. On peut aussi faire une opration trs simple avec des chanes, que l'on appelle concatnation, c'est a dire la mise bout bout de 2 chanes. Par exemple, si A$ = "BON" alors A$ + A$ sera gale "BONBON".

Observation
CLS INPUT "Nom "; A$ INPUT "Prnom "; 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 chane de caractres, essayez de prvoir le rsultat avant d'excuter le programme. Quel est la diffrence entre les instructions PRINT A$; B$ et PRINT A$ + B$ ?

Remarque
VAL() est la fonction rciproque de STR$().

Oprations sur les chanes de caractres


Observation
CLS PRINT "Le 65e caractre du jeu de caractres de QBASIC est "; CHR$(65) PRINT "Le code ASCII de A est"; ASC("A"); END Expliquez quelles sont les valeurs retournes par les fonctions CHR$() et ASC(). Que peut tre le code ASCII d'un caractre ? Observez-le jeu de caractres QBASIC en faisant Aide=>Table des matires=>Codes de caractres ASCII. Vous avez ainsi toute la liste des caractres et le code ASCII qui leur est associ.

6 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

Pages spciales

Rpertoires parents

Rpertoire courant

Remarque
Lorsque vous faites Alt + (Code d'un caractre) dans un traitement de texte, le caractre possdant ce code ASCII s'affiche. Par exemple, ALT + 144 affiche une majuscule . Les guillemets ouverts et ferms 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 rsultat aussi idiot !

Observation
Excutez 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$() ?

7 sur 8

28/04/2012 09:46

Maths, Informatique, Jeux - Cours de programmation pour dbutant (en BASIC)

http://www.maths-informatique-jeux.com/programmation/langages/cours_basic.php

Accs rapide

Pages spciales PRINT MID$(" Chaine de caractre

Rpertoires parents ", Nombre Nombre Entre , )

Rpertoire courant

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 diffrents, j'utiliserai dans ce cours les modes 12 ou 13. Vrifiez qu'ils sont bien supports 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 excutant le fichier instructions_graphiques.zip .
Cette page est conforme aux normes du W3C - Auteur : Frdric WANG - Dernire mise jour : mardi 17 juin 2003

8 sur 8

28/04/2012 09:46