Site:  Cours VB.net  
1.19.5 Contrôle des connaissances.

Boucles

 

Questions:

 

5- Boucles.

 

5.1 Écrire une boucle qui affiche les nombres pairs de 2 à 100 dans le label 'label1'.  Affiche 2 puis 4, 6 ,8,....100.

 

5.2 Écrire une boucle qui affiche les nombres allant d'un nombre demandé à l'utilisateur et descendant de ce nombre jusqu'à 1 mais n'affichant pas le nombre 4 ( si l'utilisateur tape 8 cela affichera: 8 puis 7 ,6 ,5 ,3 ,2 ,1).  

 

5.3  Afficher le plus grand nombre possible dont le carré est <1000. En d'autres termes, écrire une boucle qui affiche dans label1 les nombres croissant 1,2 ,3, 4...tant ce que le nombre au carré est inférieur à 1000. Utiliser While pour cette boucle et une variable 'Counter'. 

 

5.4 Chercher l'erreur dans ce code qui affiche dans une boite de message les résultats de la table de multiplication de 1 à 9:

 

Dim i, j as Integer

For i=1 to 9

 For j=1 To 9

MsgBox (i*j.ToString)

 Next i

Next j

 

5.5 Demander par une InputBox à l'utilisateur de taper un chiffre entre 1 et 12, vérifier que ce chiffre est bien compris entre 1 et 12 ; si ce n'est pas le cas, reposer la question (utiliser une boucle Do.. loop pour boucler en cas de mauvaise réponse.)

Si l'utilisateur tape sur 'Annuler' dans la InputBox cela retourne une chaîne vide et cela plante. Comment gérer cela?

 

5.6 Faire une boucle avec Do Loop, tournant de 1 à 100 et additionnant à une variable 'somme' à chaque tour la variable de boucle.

 

Réponses:

 

5- Boucle.

 

5.1 Écrire une boucle qui affiche les nombres pairs de 2 à 100 dans le label 'Label1'. Affiche 2 puis 4, 6 ,8,....100.

Dim i as Integer

For i=2 to 100 Step 2

    Label1.Text= i.ToString

    Label1.Refresh

Next i

Ici, comme on connaît les valeurs de début et de fin, on utilise une boucle For Next.

Step permet de 'boucler' de 2 en 2.

Ne pas oublier Label1.Refresh qui force l'affichage pour chaque tour de la boucle. Sans cela l'affichage serait mis à jour uniquement en fin de procédure.

Noter que le code entre For et Next  est décalé à droite par l'ajout d'espace ou de Tab, ce qui permet une meilleur lecture du code.

 

5.2 Écrire une boucle qui affiche les nombres allant d'un nombre demandé à l'utilisateur et descendant de ce nombre jusqu'à 1 mais n'affichant pas le nombre 4 ( si l'utilisateur tape 8 cela affichera: 8 puis 7 ,6 ,5 ,3 ,2 ,1).  

Dim i as Integer

Dim sfin As String

Dim fin As Integer

sfin= InputBox ("Donner un nombre entier")

fin= CInt(sFin) 'on transforme sfin, une String saisie par l'utilisateur en fin , un Integer.

For i= fin to 1 Step -1

    if i <>4 Then Label1.Text= i.ToString

    Label1.Refresh

Next i

Ici on ne connaît pas la valeur de la fin de la boucle mais elle sera saisie par l'utilisateur et on peut la mettre dans la variable nommée 'fin'. La boucle c'est une boucle descendante, il faut donc un pas négatif: Step -1.

On pourrait aussi vérifier par un If fin>1 Then que la valeur de fin n'est pas inférieur ou égale à 1.

 

5.3  Afficher le plus grand nombre possible dont le carré est <1000. En d'autres termes, écrire une boucle qui affiche dans label1 les nombres croissant 1,2 ,3, 4...tant ce que le nombre au carré est inférieur à 1000. Utiliser While pour cette boucle et une variable 'Counter'. 

A priori, on ne connaît pas la valeur de fin de boucle, donc on va utiliser une boucle While plutôt que For Next.

Il faut gérer soit même la variable de boucle et l'incrémenter mais en fin de boucle.

Dim Counter As Integer = 0
While Counter* Counter < 1000 
' Test la valeur du compteur.
   label1.Text= Counter.ToString

    Counter += 1 ' Incrémente le compteur.
End While

5.4 Chercher l'erreur dans ce code qui affiche dans une boite de message les résultats de la table de multiplication de 1 à 9:

 

Dim i, j as Integer

For i=1 to 9

 For j=1 To 9

MsgBox (i*j.ToString)

 Next i

Next j

 

Réponse: erreur sur les variables dans les 2 Next:  si le premier For utilise la variable de boucle i, c'est le dernier Next  qui  doit indiquer la variable i: La boucle interne doit tourner DANS la boucle externe; le bon code est:

Dim i, j as Integer

For i=1 to 9

 For j=1 To 9

MsgBox (i*j.ToString)

 Next j

Next i

 

5.5 Demander par une InputBox à l'utilisateur de taper un chiffre entre 1 et 12, vérifier que ce chiffre est bien compris entre 1 et 12 ; si ce n'est pas le cas, reposer la question (utiliser une boucle Do.. loop pour boucler en cas de mauvaise réponse.):

 

Dim rep As String

Dim r As Integer

Do

    rep=InputBox ("Tapez un chiffre entre 1 et 12") 

      r= CType(rep,Integer)

 

Loop Until r>0 And r<13

 

Si l'utilisateur tape sur 'Annuler' dans la InputBox cela retourne une chaîne vide et cela plante. Comment gérer cela?

 

Dim rep As String

Dim r As Integer

Do

    rep=InputBox ("Tapez un chiffre entre 1 et 12") 

     If rep = "" Then Exit Do

     r= CType(rep,Integer)

 

Loop Until r>0 And r<13

 

Exit Do permet de sortir de la boucle Do Loop.

 

 

5.6 Faire une boucle avec Do Loop, tournant de 1 à 100 et additionnant à une variable 'somme'à chaque tour la variable de boucle.

Dim i As Integer = 0

Dim somme As Integer

Do

 i=i+1

 Somme = somme + i

Loop Until i = 100 ' sort de la boucle quand i=100

MsgBox(somme.ToString)