Apprenez à programmer en VB .NET
Last updated on Monday, June 24, 2013
  • 4 semaines
  • Facile

Ce cours est visible gratuitement en ligne.

Paperback available in this course

Ce cours existe en eBook.

Got it!

Les tableaux

Un tableau va servir à stocker plusieurs valeurs ; s'il s'agit seulement d'entrer un nombre à l'intérieur, cela ne sert à rien. Par exemple, dans une boucle qui récupère des valeurs, si on demande dix valeurs, on saisit les valeurs dans un tableau.

Les dimensions

Tableau à une dimension

(0)

(1)

(2)

(3)

(4)

Comme vous le voyez, c'est exactement comme sous Excel.

Pour déclarer un tableau de ce type en Visual Basic, c'est très simple : on écrit notre déclaration de variable, d'Integer (entier) par exemple, et on place l'index du tableau entre parenthèses. Voici le code source de l'exemple que je viens de vous montrer :

Dim MonTableau(4) As Integer

Voilà mon tableau !

Comme sur le dessin, tu disais ? Pourtant, sur ce dernier, il y a cinq cases. Or, tu n'en as inscrites que quatre. Comment cela se fait-il ?

Oui, sa longueur est de 4. Vous devez savoir qu'un tableau commence toujours par 0. Et donc, si vous avez compris, un tableau longueur 4 possède les cases 0, 1, 2, 3 et 4, soit cinq cases, comme sur le dessin.

Le nombre de cases d'un tableau est toujours « indice + 1 ».
Réciproquement, l'index de sa dernière case est « taille - 1 ».

Souvenez-vous de cela, ce sera utile par la suite.

Comment écrire dans un tableau ?
C'est très simple. Vous avez par exemple votre tableau de cinq cases (dimension 4) ; pour écrire dans la case 0 (soit la première case), on écrit ceci :

MonTableau(0) = 10

Eh oui, il s'utilise comme une simple variable ! Il suffit juste de mettre la case dans laquelle écrire, accolée à la variable et entre parenthèses.

Mais… c'est comme une fonction, je vais tout mélanger !

Eh bien, effectivement, la syntaxe est la même que celle de la fonction ; le logiciel de développement vous donnera des indications lorsque vous allez écrire la ligne, pour que vous évitiez de confondre fonctions et tableaux.

Si vous comprenez aussi vite, passons au point suivant.

Tableaux à deux dimensions

(0,0)

(0,4)

(1,0)

(3,0)

(3,4)

Il s'agit ici d'un tableau à deux dimensions : une pour la hauteur, une autre pour la largeur. Pour créer ce type de tableau, le code est presque identique :

Dim MonTableau(3,4) As Integer

Cela créera un tableau avec quatre lignes et cinq colonnes, comme sur le schéma.

Pour ce qui est de le remplir, le schéma l'explique déjà très bien :

MonTableau(0,0) = 10

Cela attribuera « 10 » à la case en haut à gauche.

Un tableau à deux dimensions peut servir comme tableau à double entrée par exemple.

Tableaux à trois dimensions

Regardez la figure suivante.

Un tableau à trois dimensions
Un tableau à trois dimensions

Comme vous le voyez, ce type de tableau est représentable par un « cube ». Il peut être utile lors de représentations tridimensionnelles (du moins, je ne vois que cette utilisation). Pour le déclarer, je pense que vous avez compris la marche à suivre.

Dim MonTableau(2,3,4) As Integer

Soit un tableau de trois cases de profondeur (le premier nombre), de quatre lignes (le second nombre) et de cinq colonnes (le dernier nombre).

Idem pour lui attribuer une valeur :

MonTableau(2,3,4) = 10

Voilà comment mettre « 10 » dans le coin inférieur droit et au fond du « cube » (pas vraiment cubique, d'ailleurs !).

Plus…

Bien qu'on puisse aller jusqu'à une trentaine de dimensions, les tableaux supérieurs à trois dimensions sont rarement utilisés. Si vous voulez stocker plus d'informations, je vous conseille de créer un tableau de tableau à trois dimensions (cela devient compliqué !).

Dim MonTableau(1)(2,3,4) As Integer

Ce code crée un tableau de tableaux à trois dimensions.

Pareil pour y accéder :

MonTableau(0)(2,3,4) = 10

Je pense que vous avez compris comment les déclarer et les utiliser sommairement. Ça tombe bien : on continue !

Autres manipulations avec les tableaux

Ici, nous allons découvrir quelques trucs et astuces supplémentaires concernant les tableaux.

Redimensionner un tableau

La taille d'un tableau peut être redimensionnée au cours d'une application. L'instruction Redim permet de modifier la taille du tableau.

Redim monTableau(20)

Imaginons que ce tableau qui possédait 10 cases auparavant en possède maintenant 21 pour stocker des informations. Le seul problème, c'est que lorsque le programme rencontre cette ligne, le contenu entier du tableau est supprimé de la mémoire lors du redimensionnement. :(
Mais… il existe une solution ! :) Pour pouvoir conserver le contenu d'un tableau lors d'un redimensionnement, il faut spécifier le mot-clé Preserve après Redim.

Redim Preserve monTableau(20)
Retourner un tableau

Voici une fonction qui nous sera utile si l'on souhaite inverser le sens d'un tableau.

Par exemple, j'ai un tableau qui contient les nombres de 1 à 10, je souhaite avoir ce comptage de 10 à 1. Cette méthode peut alors être utilisée pour effectuer cette opération.

Son utilisation :

Array.Reverse(monTableau)

Pas besoin de beaucoup d'explications je suppose, on passe simplement le tableau à retourner en paramètre.

Vider un tableau

Pour vider rapidement un tableau, une méthode existe. Supposons que vous veniez de faire un traitement sur un tableau, vous voulez le retrouver ensuite « comme neuf » pour pouvoir le réutiliser. Plutôt que d'en créer un nouveau, pourquoi ne pas nettoyer l'ancien ?

Array.Clear(monTableau, 0, 10)

Trois paramètres sont nécessaires ici. Le premier est très simplement le tableau à vider, le second spécifie à partir de quel index vider, et le troisième indique le nombre de cases à vider.

Vous l'avez donc compris, si je veux garder les dix premiers éléments de mon tableau intacts et vider les éléments de 10 à 20, j'écrirai :

Array.Clear(monTableau, 10, 10)
Copier un tableau dans un autre

Dernière petite fonction utile, celle permettant de copier un tableau dans un autre.

Array.Copy(monTableau1, monTableau2, 5)

Trois paramètres, les deux premiers étant des tableaux. Le premier tableau étant la source (celui dans lequel nous allons copier les éléments) et le second est la destination (celui dans lequel nous allons coller les éléments). Le troisième paramètre est le nombre d’éléments à copier (depuis l'élément 0). Ainsi, 5 indique que 5 cases seront copiées dans l'autre tableau.

Mini-TP : comptage dans un tableau.

Bon, on va pratiquer un peu : je vais vous donner un petit exercice. Tout d'abord, récupérez le code suivant :

Dim MonTableau(50) As Integer
For i As Integer = 0 To MonTableau.Length - 1
     MonTableau(i) = Rnd(1) * 10
Next

J'explique sommairement ce code : il crée un tableau de 51 cases, de 0 à 50.
Il remplit chaque case avec un nombre aléatoire allant de 0 à 10.

En passant, vous pourrez vous servir assez souvent de la ligne For i As Integer = 0 To MonTableau.Length - 1 puisqu'elle est, je dirais, universelle ; c'est d'ailleurs ce qu'il faut faire le plus possible dans votre code. Pourquoi universelle ? Parce que, si vous changez la taille du tableau, les cases seront toujours toutes parcourues.

L'instruction MonTableau.Length renvoie la taille du tableau, je lui retire 1 car le tableau va de 0 à 50, et la taille est de 51 (comme je l'ai expliqué plus haut).

Je veux donc que vous me comptiez ce tableau si fièrement légué !

Eh bien oui, je suis exigeant : je veux connaître le nombre de 0, de 1, etc.

Au travail, vous connaissez tout ce qu'il faut !

Module Module1

    Sub Main()
        'Initialisation des variables
        Dim MonTableau(50), Nombres(10), NumeroTrouve As Integer

        'Remplissage du tableau de nombres aléatoires
        For i As Integer = 0 To MonTableau.Length - 1
            MonTableau(i) = Rnd(1) * 10
        Next

        'Initialisation du tableau « Nombres » avec des 0
        For i = 0 To Nombres.Length - 1
            Nombres(i) = 0
        Next

        'Comptage
        For i = 0 To MonTableau.Length - 1
            'Entre la valeur trouvée dans une variable intermédiaire
            NumeroTrouve = MonTableau(i)
            'Ajoute 1 à la case correspondant au numéro
            Nombres(NumeroTrouve) = Nombres(NumeroTrouve) + 1
        Next

        'Affichage des résultats
        For i = 0 To Nombres.Length - 1
            Console.WriteLine("Nombre de " & i & " trouvés : " & Nombres(i))
        Next

        'Pause
        Console.Read()
    End Sub

End Module

J'espère que vous avez réussi par vous-mêmes. Sachez que ce n'est pas grave si votre programme n'est pas optimisé, ou très long… ce n'est que le début !

J'explique donc ce que je viens de faire.

J'ai créé un tableau de onze cases appelé Nombres que j'ai initialisé avec des 0. Dans la boucle de comptage, je récupère le numéro présent dans la case actuelle et l'utilise comme indice de mon tableau Nombres, comme à la figure suivante.

Schéma explicatif du code
Schéma explicatif du code

En gros, si c'est un 4 qui est présent dans le tableau, il se positionne sur la quatrième case de Nombres, après quoi il ajoute 1 à cette valeur.

Enfin, j'affiche les résultats.

Petite remarque :

NumeroTrouve = MonTableau(i)
Nombres(NumeroTrouve) = Nombres(NumeroTrouve) + 1

Sachez que le code ci-dessus peut se résumer en une ligne :

Nombres(MonTableau(i)) = Nombres(MonTableau(i)) + 1

Les résultats des tests sont les suivants :

Nombre de 0 trouvés : 4
Nombre de 1 trouvés : 5
Nombre de 2 trouvés : 1
Nombre de 3 trouvés : 2
Nombre de 4 trouvés : 4
Nombre de 5 trouvés : 4
Nombre de 6 trouvés : 5
Nombre de 7 trouvés : 5
Nombre de 8 trouvés : 1
Nombre de 9 trouvés : 3
Nombre de 10 trouvés : 6

Le fait d'avoir utilisé des .Length à chaque reprise me permet de changer uniquement la taille du tableau dans la déclaration pour que le comptage s'effectue sur un plus grand tableau.

Exercice : tri

Un petit exercice : le tri. Je vais vous montrer comment faire, parce que certains d'entre vous vont rapidement être perdus.

Nous allons utiliser le tri à bulles. Pour en apprendre plus concernant l'algorithme de ce tri, je vous invite à lire ce cours rédigé par ShareMan.

Je vais vous énumérer tout ce qu'il faut faire en français, ce que l'on appelle également un algorithme (un algorithme étant une séquence à accomplir pour arriver à un résultat souhaité).

  1. Créer un booléen qui deviendra vrai uniquement lorsque le tri sera bon.

  2. Créer une boucle parcourue tant que le booléen n'est pas vrai.

  3. Parcourir le tableau ; si la valeur de la cellule qui suit est inférieure à celle examinée actuellement, les inverser.

J'ai expliqué ce qu'il fallait que vous fassiez en suivant le tutoriel du tri à bulles.

Le présent exercice demande un peu plus de réflexion que les autres, mais essayez tout de même.

Module Module1

    Sub Main()
        'Initialisation des variables
        Dim MonTableau(20), Intermediaire, TailleTableau As Integer
        Dim EnOrdre As Boolean = False

        'Remplissage du tableau de nombres aléatoires
        For i As Integer = 0 To MonTableau.Length - 1
            MonTableau(i) = Rnd(1) * 10
        Next

        'Tri à bulles 
        TailleTableau = MonTableau.Length
        While Not EnOrdre
            EnOrdre = True
            For i = 0 To TailleTableau - 2
                If MonTableau(i) > MonTableau(i + 1) Then
                    Intermediaire = MonTableau(i)
                    MonTableau(i) = MonTableau(i + 1)
                    MonTableau(i + 1) = Intermediaire
                    EnOrdre = False
                End If
            Next
            TailleTableau = TailleTableau - 1
        End While

        'Affichage des résultats
        For i = 0 To MonTableau.Length - 1
            Console.Write(" " & MonTableau(i))
        Next

        'Pause
        Console.Read()

    End Sub

End Module

Voilà donc mon code, que j'explique : le début, vous le connaissez, je crée un tableau avec des nombres aléatoires. J'effectue ensuite le tri à bulles en suivant l'algorithme donné. Enfin, j'affiche le tout !

Le résultat est le suivant :

0 0 0 1 2 2 2 3 3 5 5 5 5 6 7 8 8 9 9 10 10

Pourquoi as-tu mis TailleTableau - 2 et pas que - 1 ?

Parce que j'effectue un test sur la case située à la taille du tableau + 1. Ce qui signifie que si je vais jusqu'à la dernière case du tableau, ce test sur la dernière case + 1 tombera dans le néant ; et là, c'est le drame : erreur et tout ce qui va avec (souffrance, douleur et apocalypse). :lol:

J'espère que ce petit exercice vous a quand même éclairés concernant les tableaux !

Les énumérations

Nous allons maintenant nous pencher sur un type un peu plus spécial : les énumérations. Une énumération va nous permettre de définir un ensemble de constantes qui sont liées entre elles.

Par exemple, il pourrait être très facile de représenter les jours de la semaine dans une énumération plutôt que dans un tableau :

Enum jours
    Dimanche
    Lundi
    Mardi
    Mercredi
    Jeudi
    Vendredi 
    Samedi
End Enum

On définit une énumération par le mot-clé Enum, une énumération se termine par End Enum.

Dans une énumération, la première valeur est initialisée à 0, la suivante est augmentée de 1 : dans notre exemple Dimanche vaut 0, Lundi vaut 1, Mardi vaut 2…

Il est possible d'entrer des valeurs pour chaque valeur de l'énumération :

Enum jours
    Dimanche = 10 'Dimanche vaut 10
    Lundi  'Lundi vaut 11
    Mardi = 26  'Mardi vaut 26
    Mercredi = 11  'Mercredi vaut 11
    Jeudi   'Jeudi vaut 12
    Vendredi = 30  'Vendredi vaut 30
    Samedi  'Samedi vaut 31
End Enum

Les valeurs de l'énumération qui n'ont pas reçu de valeur particulière prendront la valeur précédente augmentée de 1.

Une fois définie, une énumération peut ensuite être utilisée comme un type de variable spécifique :

Dim joursSemaine As jours

Ce qui donne en entier :

Enum jours
    Dimanche
    Lundi
    Mardi
    Mercredi
    Jeudi
    Vendredi 
    Samedi
End Enum

Sub Main()
    Dim joursSemaine As jours

    joursSemaine = jours.Dimanche
    Console.WriteLine(joursSemaine)
End Sub

Ce qui nous donne :

Dimanche
  • Un tableau peut contenir plusieurs valeurs.

  • Un tableau a des cases, on peut accéder à chaque case en particulier.

  • La première case d'un tableau a toujours la position 0.

  • Un tableau peut être à plusieurs dimensions. Les tableaux de base sont à une dimension et sont comparables à des listes.

Example of certificate of achievement
Example of certificate of achievement