Programmation .Net - Indépendance financière

Les boucles en Visual Basic – Exercice et solution

Exercice

Cet exercice est important puisque les boucles sont utilisées pratiquement partout. Vous devez être en mesure de commencer à penser avec des boucles. Chaque tâche que vous convertirai avec une boucle pourra sauver des répétitions et améliorer la qualité de votre code.

1. Le code suivant utilise une méthode nommée GenerateRandomString qui fait la génération de chaines de caractères aléatoires. Vous devez convertir cette fonction pour qu’elle utilise une boucle. De plus, elle doit être en mesure de prendre en considération le paramètre NumberOfCharacters qui indique le nombre de lettres à générer qu’un utilisateur de la fonction peut assigner.

Option Strict On
Option Explicit On

Module Program
    Dim Rnd As Random = New Random()

    Sub Main()
        Dim NumberOfCharactersToGenerate = 5

        Console.WriteLine(GenerateRandomString(NumberOfCharactersToGenerate))
        Console.ReadKey()
    End Sub

    Private Function GenerateRandomString(NumberOfCharacters As Integer) As String
        Dim GeneratedString As String = String.Empty

        Dim RandomLetter As Char = Convert.ToChar(Rnd.Next(97, 123))
        GeneratedString += RandomLetter

        RandomLetter = Convert.ToChar(Rnd.Next(97, 123))
        GeneratedString += RandomLetter

        RandomLetter = Convert.ToChar(Rnd.Next(97, 123))
        GeneratedString += RandomLetter

        RandomLetter = Convert.ToChar(Rnd.Next(97, 123))
        GeneratedString += RandomLetter

        RandomLetter = Convert.ToChar(Rnd.Next(97, 123))
        GeneratedString += RandomLetter

        Return GeneratedString
    End Function

End Module

Indice : identifez d’abord les répétitions dans le code que vous pourriez ensuite convertir en boucle.

2. Ajoutez une nouvelle boucle au code précédent pour qu’il fasse la génération de 100 mots aléatoires.

Bonne chance!

Solution

Question 1

L’exercice comprend déjà un peu de code pour nous aider, nous avons le Main() ainsi que la fonction en question. Vous deviez incorporer une boucle dans cette même fonction. Rappelez-vous de l’indice à la fin du numéro 1, il s’agissait de trouver du code se répétant.

La fonction elle-même n’a pour but que la génération d’un mot ayant un nombre de caractères spécifié en paramètre. Toutefois telle qu’elle est présentement, elle ne prend pas en compte ce paramètre. Vous avez certainement deviner que la partie critique est en fait la génération d’un seul caractère comme indiqué ci-dessous.

Exercise Loops Function

Nous convertirons donc la partie dans le carrée rouge. Comment s’y prendre maintenant? Nous allons utiliser la boucle For, pourquoi?

Rappelez-vous que pour créer une boucle For vous avez essentiellement besoin de trois éléments : un point de départ (1 pour 1er caractère), un point final (notre nombre maximal en paramètre NumberOfCharacters) et une vitesse d’incrémentation (qui sera simplement 1 dans ce cas).

    Private Function GenerateRandomString(NumberOfCharacters As Integer) As String
        Dim GeneratedString As String = String.Empty

        For Index As Integer = 1 To NumberOfCharacters Step 1
            Dim RandomLetter As Char = Convert.ToChar(Rnd.Next(97, 123))
            GeneratedString += RandomLetter
        Next

        Return GeneratedString
    End Function

Comme vous pouvez voir dans le code précédent, j’ai appliqué à la boucle les deux lignes se répétant ainsi que les indications énoncées ci-dessus. Vous pouvez maintenant tester ce code (avec un ou plusieurs breakpoints)!

FAQ à propos du code de la question 1

Qu’est-ce que New Random()? C’est une déclaration de variable contenant une instance d’objet de type Random. Toutefois vous n’avez pas à porter attention à cette partie car nous la verrons dans un autre tutoriel.

Pourquoi y a-t-il une nouvelle déclaration et initialisation de variable à l’intérieur de la boucle? Vous pouvez faire cette déclaration à l’extérieur si vous préférez, toutefois le compilateur (Visual Basic) devrait faire les optimisations requises pour s’assurer que cette variable n’est pas déclarer de nouveau à chaque boucle. Dans le cas où elle sera déclarée à l’extérieur, vous auriez comme ligne : RandomLetter = Convert.ToChar(Rnd.Next(97, 123)).

Qu’est-ce que GeneratedString += RandomLetter fait exactement? Vous devez savoir qu’un String est en fait un tableau de Chars, le fait d’écrire += indique à Visual Basic que nous voulons ajouter une lettre à la fin de la chaine de caractère. Souvenez-vous que c’est exactement la même procédure que d’écrire GeneratedString = GeneratedString + RandomLetter.

Qu’est-ce que Convert.ToChar()? Cette fonction: Rnd.Next(97, 123) génère un nombre aléatoire de type Integer entre 97 (inclusivement) et 123 (exclusivement donc 122 inclusivement). Pour pouvoir ajouter cette valeur de Type Integer, nous devons la convertir en Type Char. Durant la conversion, et c’est précisément pourquoi nous allons chercher un chiffre aléatoire entre 97 et 123 (excl.), ce chiffre sera converti selon la table ASCII et cet interval compose les lettres de a à z.

Remarquez que la variable Rnd est déclarée et initialisée en dehors de la fonction et sub mais à l’intérieur du module. Ceci en fait une variable accessible par ce qui est dans le module. Le fait qu’il n’y ait pas de scope (Private/Public etc.) la rend Private par défaut donc inaccessible de l’exterieur du Module.

Question 2

Pour la deuxième question, nous avions à exécuter cette même fonction 100 fois. Nous n’allons certainement pas copier GenerateRandomString() 100 fois! Utilisons plutôt une boucle!

J’ai choisi d’utiliser une boucle While, mais vous pouvez utiliser le For si vous préférez. Voici ce à quoi devrait ressembler votre Main().

    Sub Main()
        Dim NumberOfCharactersToGenerate = 5
        Dim Counter As Integer = 1
        Dim RandomString As String = String.Empty

        While (Counter <= 100)
            RandomString = GenerateRandomString(NumberOfCharactersToGenerate)
            Console.WriteLine(RandomString)
            Counter += 1
        End While

        Console.ReadKey()
    End Sub

Je déclare premièrement une variable Counter pour garder le nombre de mots généré en mémoire. La condition de sortie de boucle sera aussi vérifiée à l’aide de cette même variable. N’oublions pas d’incrémenter Counter à chaque exécution de la boucle!

Gardez en tête que les boucles demandent beaucoup de pratique, vous devriez essayer de trouver d’autres exercices sur Internet ou encore, si vous ne comprenez pas, vous pouvez poser des questions dans les commentaires. Finalement, vous pouvez aller voir directement le vidéo associé sur Youtube si vous préférez.

YouTube

Next article Concaténation de strings et le StringBuilder en Visual Basic/C#
Previous article Comment utiliser les boucles en Visual Basic

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *