Partie II : 1) Des nouveautés sur les variables : Tableaux & Cie.
Les tableaux
Les tableaux sont des variables un peu spéciales. En fait ce sont des variables qui peuvent contenir d'autres variables. Ils portent bien leur nom alors imagez que chaque case du tableau (pas la peinture) soit une variable.
Les tableaux peuvent êtres à une seule dimension, une colonne OU une ligne.
Mais ils peuvent aussi êtres à deux dimensions , plusieurs lignes ET plusieurs colonnes (on peut aussi dire bidimensionnel, ça fait plus classe ^^ )
Création & Utilisation
Tableaux unidimensionnels
Les tableaux nécessitent d'être créés pour que l'ordinateur sache combien il y a des colonnes et de lignes. Ici on créer un tableau à une dimension.
Code :
dim tableau(5)
Quelques explications. DIM sert à dire à l'ordinateur que ce qui suit est un tableau.
Ensuite vient le nom du tableau en question. Si ce nom se termine par un $, le tableau contiendra des variables alphanumériques sinon ce sera des variables numériques.
Un tableau ne peut contenir qu'un seul type de donnée donc vous ne trouverez jamais un tableau contenant à la fois du texte et des nombres.
Enfin, entre les parenthèses se trouve le nombre de case du tableau. En fait ce code créera un tableau de six cases car la première case est 0 et la dernière est 5.
On peut représenté les tableaux unidimensionnel comme l'image sur le coté. Chaque case à un numéro unique appelé "clé" qui permet de récupérer la valeur stockée.
Pour stoker/récupérer la valeur stockée dans la case il suffit d'indiquer la clé de la case dont on souhaite stocker/récupérer la valeur comme suivant :
Code VB :
dim tableau(10) 'On indique qu'il s'agit d'un tableau tableau(5) = 456 'On stocke la valeur du tableau dans la case 5 print tableau(5) 'On récupère la valeur de la case 5
Il faut toutefois faire attention à ne pas essayer de récupérer la valeur d'un case qui n'existe pas. En fait ici la grandeur de notre tableau est de 10 (de 0 à 10). Ainsi il est impossible de stocker ou de récupérer une valeur à la case 11, cela aboutirait inévitablement la fin du programme.
Tableaux bidimensionnels
Les tableaux bidimensionnel sont en réalité des tableaux à double entrée. Chaque case est repéré par le couple colonne/ligne. Chaque case à donc un couple unique qui permettent de récupéré les informations stockées.
Code VB :
dim tableau$(5,5)
C'est la même chose qu'un tableau unidimensionnel à la différence près que l'on donne le nombre de lignes ET le nombre de colonnes. Ce code ci créera un tableau de 6x6 cases pour les mêmes raisons que le tableau ci dessus.
Ici c'est un tableau de variables alphanumériques à cause du $ à la fin du nom.
Pour stocker ou récupérer la valeur d'un case dans un tableau bidimensionnel c'est exactement la même chose que pour un tableau unidimensionnel sauf qu'il faut indiquer le numéro de la colonne ET le numéro de la ligne.
Code VB :
dim tableau(5, 5) 'On indique qu'il s'agit d'un tableau bidimensionnel de 6*6 cases tableau(2, 3) = 456 'On stocke la valeur du tableau dans la case de la colonne 2 et de la ligne 3 print tableau(2, 3) 'On récupère la valeur de la case de la colonne 2 et de la ligne 3
TP : Petit exercice sur les tableaux
Pour apprendre à maîtriser les tableaux rien de tel que l'entraînement. L'exercice que je vous propose est le suivant : vous allez devoir créer un tableau bidimensionnel de 10*10 cases que vous allez remplir avec des chiffres choisit aléatoirement de 1 à 9. Ce ne serais pas drôle si l'exercice s'arrêtait à ce niveau :-° Après avoir généré notre fameux tableau, vous allez proposer à l'utilisateur de rechercher les positions du nombre de son choix dans le tableau et lui dire le nombre de fois qu'il apparait.
Vous aurez donc besoin d'utiliser les boucles (utilisez celle de votre choix), de vous servir de l'instruction input, et de la fonction rnd(. Pour ne pas que vous perdiez de temps je vous redonne la fonction rand( prête à être utilisée :
Code VB :
function rand(min,max) rand = int(rnd(1)*(max-min+1))+min end function
Bonne chance, ne passez pas trop de temps, 10 à 15 minutes devrais être amplement suffisantes (chez moi le code tiens en une trentaines de lignes sans les commentaires :-° )
La solution (à ne consulter que lorsque vous ne parvenez vraiment pas à faire un programme fonctionnel, ou pour comparer lorsque fini

Code VB :
k = 9 n = 9 ' N'oubliez pas qu'un tableau commence à 0 donc pour avoir 100 cases il faut faire du 9*9 dim tableau(k,n) print "---0-1-2-3-4-5-6-7-8-9--" print "------------------------" for passageK = 0 to k 'On entre dans la boucle pour les colonnes print passageK;"| "; for passageN = 0 to n 'maintenant dans celle des lignes tableau(passageK, passageN) = rand(1,9) 'On attribut un chiffre aléatoire au couple colonne/ligne print tableau(passageK, passageN); " "; 'On affiche next print "|" next print "-----------------------" input "Rechercher le chiffre : "; c 'On demande à l'utilisateur de choisir un numéro for passageK = 0 to k for passageN = 0 to n if tableau(passageK, passageN) = c then 'Si le chiffre entré par l'utilisateur correspond a la valeur du couple colonne/ligne on affiche la position txtNombreOccurence$ = txtNombreOccurence$ + chr$(13) + "- [";passageK;",";passageN;"]" nombreOccurence = nombreOccurence + 1 'Si le chiffre de l'utilisateur est trouvé alors on augmente le nombre d'occurence de 1 end if next next if nombreOccurence > 0 then print print "Chiffre "; c; " aux positions :"; txtNombreOccurence$ print "Le chiffre apparaît "; nombreOccurence; " fois." 'On affiche le nombre d'occurence else print print "Le chiffre "; c;" n'apparait pas dans le tableau" end if end 'Fin du programme '--------------------------------- '------------ FONCTIONS ---------- '--------------------------------- 'Renvoie un nombre aléatoire compris entre min et max function rand(min,max) rand = int(rnd(1)*(max-min+1))+min end function
Par soucis de lisibilité j'ai ajouté le numéro des colonnes et des lignes respectivement en haut et sur le coté de l'affichage. Notez que ce code crée l'affichage tabulaire par des retours à la ligne, dans la réalité, on affiche pas toute les valeurs du tableau en même temps. C'est juste un moyen de stocker les données. Nous avons fait ça pour que vous compreniez bien comment on créer un tableau et surtout pour que vous visualisiez, en effet c'est un peu abstrait lorsqu'on n'en a pas l'habitude

Tableaux tridimensionnel
Pour comprendre cette partie assurez vous de bien comprendre les deux partie précédente et également le chapitre portant sur les subs, en effet nous allons nous en servir ici

Arrivé à ce point vous vous dites sûrement qu'on peut créer un tableau à 50 dimensions avec LB, figurez vous que non

Je vous vois venir avec vos "Quoi


Code VB :
'On crée un tableau assez grand pour contenir 10x10x10 elements dim monTableau$(9, 99) 'On enregistre "Je suis là !!" dans la case 5,3,1 call setMonTableau$ 5, 3, 1, "Je suis là !!" 'Maintenant, on récupère la valeur de la case 5,3,1 et on l'affiche print getMonTableau$(5, 3, 1) end '------------------------------------- '--------------- SUB ----------------- '------------------------------------- ' Sub permetant de mettre valeur$ dans monTableau en x,y,z sub setMonTableau$ x, y, z, valeur$ monTableau$(x, y + z * 10) = valeur$ end sub '------------------------------------- '------------ FONCTIONS -------------- '------------------------------------- ' Fonction renvoyant la valeur de monTableau en x,y,z function getMonTableau$(x, y, z) getMonTableau$ = monTableau$(x, y + z * 10) end function
On créer d'abord un tableau (ou array en anglais) assez grand pour avoir un tableau à trois dimension. En fait notre tableau tridimensionnel sera de taille 10*10*10. Comme on ne peut pas faire plus de deux dimensions, on 'écrase' la troisième dimension sur la deuxième.
Notre tableau fait donc 10*10*10. 10 concernera donc la première dimension du tableau, et 10*10 la deuxième ET la troisième. Comme on est obligé de faire fusionner les deux dernières dimension on a donc 10*100. D'où le code suivant :
Code VB :
dim monTableau$(9, 99)
Ensuite nous allons donc créer une fonction qui va dire à notre cher ordinateur quoi faire. On créer donc un sub qui prend les paramètres x, y et z.
Oui mais on met quoi dans la sub ? Très simple ! On prend notre tableau nommé ici monTableau$ et on lui dit de prendre le paramètre x et de le stocker dans la première dimension et ensuite on prend les paramètres y et z, on multiplie un des paramètre par 10 et on additionne le dernier au résultat pour les mettre dans la seconde dimension du tableau. Je vois de là vos mines perplexes. Pourquoi ne pas simplement multiplier y et z ? C'est très simple, on aurait des risque de collisions, en effet yz=zy. Donc du coup, pour avoir une position unique on multiplie un des paramètre par 10 et on additionne le dernier au résultat. Nous avons donc ici notre deuxième dimension du tableau myArray$ qui peut contenir 100 éléments. En effet y+z*10 est différent de z+y*10. N'oubliez pas que la multiplication est prioritaire !
Petit exemple pour vous prouvez que j'ai raison :
On fixe les valeurs x1 = 3, y1 = 4 et z1 = 6. On fixe les valeurs x2 = x1, y2 = z1 et z2 = y1.
Si l'on fait monTableau$(x1, y1+z1*10) => monTableau$(3, 4+(6*10)) => monTableau$(3, 4+60) on a donc monTableau$(3,64). Maintenant faisons monTableau$(x2, y2+z2*10) => monTableau$(3, 6+(4*10)) => monTableau$(3, 6+40) on a donc monTableau$(3,46). La clé de l'élément est donc bel et bien unique ! Notre sub est donc bien fonctionnelle

Et pourquoi 10 alors ? Car la seconde dimension de notre tableau monTableau$ doit faire 100. Au maximum x, y et z peuvent au maximum être égales à 9. Si nous avons y et z tels que y = 9 et z = 9 nous avons donc 9+9*10 soit 99. Nos avons donc bien nos 100 valeurs. Rappelez vous bien qu'un tableau comment à 0 !
Code VB :
sub setMonTableau$ x, y, z, valeur$ monTableau$(x, y + z * 10) = valeur$ end sub
Pour récupérer la valeur on utilise la même méthode :
Code VB :
function getMonTableau$(x, y, z) getMonTableau$ = monTableau$(x, y + z * 10) end function
J'espère que vous avez compris la subtilité avec la multiplication qui n'est pas évidente. C'est vrai qu'à première vue la logique peut paraitre tordue, mais en y regardant bien c'est extrêmement logique. Au début lorsque je suis tomber sur ce code je n'est pas compris, et j'espère que mes explications vous ont éclairées. Toutefois si vous n'avez pas compris ce n'est pas grave. On ne se sert presque pas (pour ainsi dire jamais) des tableaux à trois dimensions


Les références
Les références sont très pratiques, et pour tout vous dire je ne les connaissais pas en JB avant d'écrire ces lignes.
Les références sont un croisement entre les variables globales et les variables locales.
Je ne sais pas trop comment vous expliquer alors je vais vous donner deux exemples qui ne font pas la même chose puis deux autres qui font la même chose :
Les deux codes qui ne font pas la même chose :
- Code VB :
nombre = 1 print nombre call add nombre print nombre sub add chiffre chiffre = chiffre + 1 end sub
- Code VB :
nombre = 1 print nombre call add nombre print nombre sub add byref chiffre chiffre = chiffre + 1 end sub
La seule différence entre ces deux codes c'est la présence de byref devant le paramètre chiffre de add.
Et pourtant c'est une différence de taille. Je vais vous expliquer vite fait comment fonctionne les fonctions (et les Sub, c'est pareil) sans et avec byref :
- Sans byref : Lors du passage des paramètres c'est la VALEUR et uniquement la valeur de la variable qui est transmise à la fonction (ou à la Sub).
- Avec byref : C'est l'adresse où est la variable en mémoire qui est transmise à la fonction donc en gros c'est la même variable mais avec un nom différent.
Maintenant voici les deux codes qui font la même chose :
- Code VB :
global nombre nombre = 1 print nombre call add print nombre sub add nombre = nombre + 1 end sub
- Code VB :
nombre = 1 print nombre call add nombre print nombre sub add byref nombre nombre = nombre + 1 end sub
Dans le premier cas j'utilise une variable globale et dans le deuxième une référence.
Je vous ai dit qu'il fallait le moins possible utiliser les variables globales et ça reste toujours vrai. Il est préférable d'utiliser les références car vous avez un plus grand contrôle.
Pour finir, je voulais vous signaler que chaque paramètre peut-être une référence, ou pas.
Voici une Sub qui prend deux paramètres. Le premier c'est un nombre quelconque qu'elle doit arrondir. Le deuxième c'est où elle va mettre le résultat :
Code VB :
sub arrondie nombre, byref resultat tps = int(nombre) if nombre >= tps + 0.5 then resultat = tps+1 else resultat = tps end if end sub
Comme vous le voyez, le premier paramètre est un paramètre normal - seule la valeur est transmise - et le deuxième paramètre est une référence - l'adresse de la variable est transmise.
J'aurais pu mettre le premier paramètre en référence mais ce n'était pas la peine, on ne change pas cette valeur.
Et voici comment utiliser ma Sub :
Code VB :
resultat = 0 print resultat call arrondie 15.5,resultat print resultat end
Certain me diront que c'est bien beau les référence, mais si par exemple on ne met pas une variable dans les paramètres et que l'on met ça par exemple pour appeler ma Sub arrondie :
Code VB :
call arrondie 15.245, 0
Et bien je vous rassure, ça ne plante pas, le code se déroule comme si de rien était.
Alors n'utilisez pas les références n'importe comment, si vous ne voulez pas changer la valeur de la variable, pas de référence. Sinon, oui.
Les booléens
Les booléens sont utilisés par les conditions pour savoir si elles sont vraies ou fausses.
En théorie, un booléens ne peut prendre que deux valeurs : 0 -> c'est faux et 1 -> c'est vrai.
Mais en JB il n'existe pas de variable spéciale pour les booléens alors la règle devient : 0 -> c'est faux et tout autre nombre -> c'est vrai.
Tous ça pour vous dire que dans vos conditions vous n'êtes pas obligé de mettre un condition, vous pouvez très bien mettre :
Code VB :
variable = 8 if variable then print variable end if variable = 0 if variable then print variable end if
Maintenant encore plus fort.
Vous pouvez stocker le booléens d'une condition dans une variable :
Code VB :
a = 12 b = 13 bolleens = (a < b) print bolleens bolleens = (a > b) print bolleens
Voila pour les booléens.
Les boucles aussi utilisent les booléens sauf la boucle for..next.
Et voila, tout plein de petites nouvelles choses qui peuvent se révélées bien utiles.
Et maintenant direction les fichiers
