cours Basic

Le Quick Basic, toute une histoire...

Le langage Basic à été inventé en 1964 par 2 professeurs pour enseigner la programmation à leurs élèves.
Il signifie d'ailleur le Beginners All purpose Symbolic Instruction Code. Depuis il a eu plusieurs évolutions comme:

  • Le PC Basic
  • Le QW Basic
  • Le Qbasic
  • Le BasicA
  • Le QuickBasic
  • Le QuickBasic Extended
  • Le Liberty Basic
  • Le FreeBasic
  • Le Visual Basic
  • ...

    Comme vous le constatez, il y a beaucoup de dérivé mais celui que je vais expliciter dans ce cours est le Qbasic (compatible QuickBasic et QBX)

    Le point de vue:
    Le langage basic est un langage dit de haut niveau, c'est à dire qui pour une instruction écrite, il en correspond parfois plus de quelques centaines en langage machine.

    La programmation c'est un langage à part entière composé de messages qu'il faut envoyer au processeur pour qu'il les executent.

    Les instructions:
    Une instruction intervient en début de ligne, c'est un orde.

    PRINT "Hello world"
    
    Est l'ordre d'afficher à l'ecran ce texte.

    Les fonctions:
    Une fonction vient après une instruction ou un nom de variable.
    super$ = MID$(super$,4,2)
    
    MID$ est la fonction qui retourne les caractères (ici) numéro 4 et 5 de la chaine super$

    Les types de variables
    Les types de variables dépendent du signe que on leur met derrière:
    -NomDeVariable%
    : type de variable numerique appelé INTEGER ne peut stocker que des nombres entiers et de -32768 jusqu'a 32767 maximum.

    -NomDeVariable!
    : type de variable SINGLE, avec des chiffres apres la virgule et beaucoup de capacité

    -NomDeVariable#
    : encore plus que la SINGLE, celle ci s'appelle la DOUBLE

    -NomDeVariable&
    : type LONG qui peut comporter beaucoup de nombreq de -2 milliards a +2 milliards et des nombres entiers seulement !

    -NomDeVariable$
    : type de variable STRING qui peut enregistrer seulement des caracteres, ont peut y mettre des chiffres aussi mais ils seront reconnus comme des caractères

    Il y a une autre technique pour déclarer que les variables sont de tel ou tel type, au début du programme, il faut écrire:

    DIM [SHARED] NomDeVariable AS Type
    
    les crochets veulent dire que ce qui est entre est facultatif, le mot clé ici entre crochet singifie que la variable est partagée, c'est a dire que toute les sous procédures y ont accès et peuvent la modifier par référence. (ont y reviendra plus bas dans ce cours)
    Type remplace les mots clés:
    INTEGER, SINGLE, DOUBLE, STRING etc...
    une execption apparait pour la chaine; on peut ecrire:
    DIM MaChaine AS STRING * 5
    
    Ceci veut dire que dans toute la suite du programme la variable MaChaine sera une chaine de longueure fixe 5 caractères, si il n'y a rien, ce sont des espaces.

    Les programmes d'initiations
    Pour bien commencer le basic il faut essayer des exemples donné par des ressources comme ce site.
    Je vous propose les exemples suivants pour apprendre certaines instructions élementaires:
    CLS
    PRINT "Waou c'est mon 1er programme!"
    LOCATE 5,5
    PRINT "EHEH"
    COLOR 12
    PRINT "BLABLA"
    LOCATE 21
    PRINT "En bas"
    LOCATE 10,60
    PRINT "A droite"
    LOCATE ,5
    COLOR 7
    PRINT "A la ligne d'après et avec une marge a gauche"
    SLEEP
    END
    
    Le programme ci-dessus est un programme dit linéaire ou l'utilisateur n'intervient pas et toutes les instructions s'executent a la suite dans la direction du bas bien sur.
    Ici vous remarquez l'usage de l'instruction LOCATE, celle ci -vous l'aurez compris- sert à localiser la position du curseur.
    je dis bien du curseur, ne vous faites pas piéger, le texte affiché avec PRINT apres une instruction LOCATE position sa 1ere lettre a la position du curseur.
    par exemple si vous afficher un texte sans LOCATE en amont, il s'affichera tout de meme a la position du curseur qui se situe à la ligne d'en dessous de l'ancien affichage de texte et collé a gauche.
    L'instruction COLOR change la couleur, sous dos il y en a 16. Mais voyez plutot le chapitre suivant:
    Les Modes d'ecran
    On utilise l'instruction
    SCREEN 0|1|..|13
    
    pour changer de mode d'ecran. Un mode d'ecran c'est une resolution, une passage en mode graphique ou texte, une place de memoire prise dans la carte video, une dépendance paterielle, une resolution.
    Il y a 12 modes d'ecran:
    -le 0: texte et non graphique, en 23 lignes par 80 colonnes
    tout les autres mode suivant sont graphiques. On abordera seulement les plus utilisés:
    -Le 12: 640*480 en 16 couleurs
    -Le 13: 320*100 en 256 couleurs
    pour le reste consultez l'aide de l'editeur.
    exemples (suite):
    SCREEN 12
    LINE (100,200)-(500,210), 4, BF
    CIRCLE (20,20), 10, 2
    LINE (0,0)-(639,479), 1
    LINE (0,100)-(20,200), 5, B
    
    Ceci passe en mode graphique (SCREEN 12) pour dessiner des lignes et un cercle. Si vous etes en MODE 0 (texte) il y aura une erreur.
    Le B est l'argument qui permet de dessiner un rectangle et BF il est plein.

    Les structures de contrôle
    C'est la manière sont va se dérouler le programme.
    La 1ere est la boucle:
    CLS
    FOR i% = 1 TO 22
        LOCATE i%
        PRINT "Texte No:" + STR$(i%)
    NEXT i%
    SLEEP
    END
    
    L'instruction CLS efface l'ecran, SLEEP attend l'appui sur une touche pour continuer la progression du programme, et END termine le programme, il n'est que facultatif.
    Entre tout ca, il y a 4 instructions qui vont jouer le role de 22 instructions.
    En effet car il y a une boucle, cette boucle est de type FOR TO NEXT. Elle commence au FOR, et se finit au NEXT, voila son fonctionnement:
    La boucle FOR TO NEXT dite à variable incrémentée, permet de répeter un algorithme inscrit dans sa contenance. C'est à dire que ici les instructions LOCATE et PRINT vont etre repetees 22 fois.
    LA boucle démarre, elle enregistre 1 dans i% (c'est son début), i% etant la variable d'incremenation. Ensuite le programme execute normalement LOCATE et PRINT , mais comment ? i% = 1 donc le PRINT sera affiché ligne 1 et le programme arriv alors sur NEXT i% (note: le i% apres le NEXT est facultatif) et le programme remonte au FOR et passe i% a 2 ainsi de suite affichant de cette manière un texte sur la hauteur de l'ecran.
    le LOCATE n'etait pas obligatoire ici car le texte affiché par PRINT s'affiche en dessous du dernier texte affiché si LOCATE est omis.
    SCREEN 13
    DO
       IF i% >= 319 THEN EXIT DO
       i% = i% + 2
       PSET (i%, 120), i% MOD 256
    LOOP
    
    dans ce programme, il y a 2 structures qui sont à prendre en compte, la condition et la boucle, ici on emploie une boucle de type DO LOOP. cette boucle est infinie. la variable i% est utilisée ici comme une variable incrémentée mais manuelement. mais si i% dépasse ou égal 319 que ce passe t'il ? et bien la boucle est quitéepar l'instruction EXIT DO, bien sur on aurait pu remplacer le programme par une FOR TO NEXT:
    SCREEN 13
    FOR i% = 2 to 319 STEP 2
       PSET (i%, 120), i% MOD 255
    NEXT
    
    Vous voyez ici le programme a 2 lignes en moins, on appelle ca de l'optimisation de code. On voit ici l'avantage de la boucle FOR TO NEXT, elle n'est pas infinie. le role de la fonction STEP ici est de incrementer de 2 en 2 la variable i%. Le role de la fonction MOD est de retourner le reste d'une division en entiere entre i% et 255 (ce qui a pour but d'afficher toute les couleurs mais dans dépasser 255 car il y a 256 couleurs en mode 13 (de 0 à 255).
    Notions de "retourne" et "definit" on dit qu'une fonction peux écrire ou retourner, c'est le cas de MID$:
    chaine$ = "mega cool"
    chaine2$ = MID$(chaine$,2,1)
    PRINT chaine$
    PRINT chaine2$
    
    ici la fonction MID$ retourne dans la variable de type chaine chaine2$ le resultat
    de son operation sur la variable chaine$ qui est de prendre 1 caractere a partir du 4eme
    caractere.
    
    chaine$ = "mega cool"
    ' ** ici MID$ se transforme en instruction
    MID$(chaine$,2,3)="AHA"
    PRINT chaine$
    
    Vous remarquez une ligne intrue dans le programme, c'est un commentaire, la ligne n'est pas éxecutée, elle ne peut etre vue que dans le code, pour cela il faut l'introduire par '
    Ici MID$ a remplacer les caracteres 2,3,4 de la chaine chaine$ par AHA.
    Les conditions On attaque les blocs conditionnels:
    ' pour initialiser les nbs aleatoires:
    RANDOMIZE TIMER
    var1% = RND * 150
    var2% = RND * 20    ' RND retourne un nb aleatoire entre 0 et 1
    ' ** début du bloc IF THEN ELSE:
    IF var1% <= 10 AND var2% >= 15 THEN
       PRINT "le 1er chiffre est inferieur ou egal a 10 et le 2eme superieur ou egal a 15"
    ELSEIF var1% = 45
       PRINT "le 1er chiffre vaut 45"
    ELSEIF var2% = 19 OR var1% > 40
       PRINT "le 1er chiffre est superieur a 40 ou le 2eme egal 19"
    ELSE
       PRINT "aucune des conditions recherchee n'a abouti"
    END IF
    
    Je vous laisse comprendre le programme ci-dessus, je vous dis juste que si il y a plusieurs conditions qui sont valides alors la 1ere dans l'orde d'execution du programme (haut en bas) est executée.
    Lisez le cours de QB avancé si vous etes deja connaisseurs

    Lightness1024! ProgrammatO 16/5/1