On va immédiatement passer à la partie au cours de laquelle
je vous laisse comme ça et je vais boire mon café on va mettre la théorie en pratique.
Cahier des charges
Donc, c'est parti :
je veux (j'ai toujours rêvé de dire ça !

) un programme qui m'effectue l'addition de deux nombres demandés au préalable à l'utilisateur. Attention à prévoir le cas où l'utilisateur ne saisirait pas un nombre.
Vous connaissez déjà la marche à suivre pour demander des nombres, les additionner, afficher le résultat (je l'ai déjà indiqué, au cas où vous ne le sauriez pas), mais un problème subsiste : comment vérifier qu'il s'agit bel et bien d'un nombre ?
Code : VB.NET
Il vous faut faire appel à une fonction évoquée précédemment, qui prend en argument une variable (de toute façon, ce sera indiqué lorsque vous le taperez) et renvoie un booléen (
vrai si cette variable est un nombre,
faux dans le cas contraire).
Il va donc falloir stocker la valeur que la personne a entrée dans une variable de type
string.
Et pourquoi pas dans une variable de type integer ? C'est bien un nombre, pourtant ?
Eh bien, tout simplement car si la personne entre une lettre, il y aura une erreur : le programme ne peut pas entrer de lettre dans un
integer, à l'inverse d'un
string.
Ensuite, vous allez utiliser la fonction
IsNumeric sur cette variable.
Je vous laisse, alors ?

Bonne chance !
Secret (cliquez pour afficher)
Code : VB.NET 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | Module Module1
Sub Main()
'Déclaration des variables
Dim ValeurEntree As String = ""
Dim Valeur1 As Double = 0
Dim Valeur2 As Double = 0
Console.WriteLine("- Addition de deux nombres -")
'Récupération du premier nombre
Do
Console.WriteLine("Entrez la première valeur")
ValeurEntree = Console.ReadLine()
'Tourne tant que ce n'est pas un nombre
Loop Until IsNumeric(ValeurEntree)
'Écriture de la valeur dans un double
Valeur1 = ValeurEntree
'Récupération du second nombre
Do
Console.WriteLine("Entrez la seconde valeur")
ValeurEntree = Console.ReadLine()
'Tourne tant que ce n'est pas un nombre
Loop Until IsNumeric(ValeurEntree)
'Écriture de la valeur dans un double
Valeur2 = ValeurEntree
'Addition
Console.WriteLine(Valeur1 & " + " & Valeur2 & " = " & Valeur1 + Valeur2)
'Pause factice
Console.Read()
End Sub
End Module
|
Le résultat
Code : Console | - Addition de deux nombres -
Entrez la première valeur
10
Entrez la seconde valeur
k
Entrez la seconde valeur
20
10 + 20 = 30 |
Des questions ?
Oui ! Je voulais utiliser Do While et non Do Until !
Ah ! Du genre... ceci ?
Code : VB.NET | Do
Console.WriteLine("Entrez la première valeur")
Valeur1 = Console.ReadLine()
'Tourne tant que ce n'est pas un nombre
Loop While not IsNumeric(Valeur1)
|
C'est tout à fait juste.
Les variables utilisées sont des double pour que l'utilisation de nombres à virgule soit possible dans ces additions.
Tricheur ! Tu ne nous avais pas parlé du not !
Voilà l'occasion de vous en parler. Vous devez vous en douter : cela produit l'inverse.
Et de toute façon, je ne veux pas d'excuses : vous aviez
Until à votre disposition !
Autre chose : pourquoi stockes-tu les résultats dans une autre variable, et n'as-tu pas tout de suite utilisé les mêmes variables ?
À cause des types : avec votre suggestion, il aurait fallu mettre « Valeur1 » et « Valeur2 » en
string, on est d'accord ? Sauf qu'une addition sur un
string, autrement dit une chaîne de caractères, même si elle contient un nombre, aura comme effet de « coller » les deux textes. Si vous avez essayé, vous avez dû récupérer un « 1020 » comme résultat, non ?
Et pourquoi donc utiliser un Do, et non un simple While ou If ?
Parce qu'avec un
If, si ce n'est pas un nombre, le programme ne le demandera pas plus d'une fois. Un simple
While aurait en revanche suffi ; il aurait juste fallu initialiser les deux variables sans nombres à l'intérieur. Mais je trouve plus propre d'utiliser les
Do.
Ne vous inquiétez pas : il s'agissait de votre premier TP, avec de nouveaux concepts à utiliser. Je comprends que cela a pu être difficile, mais vous avez désormais une petite idée de la démarche à adopter la prochaine fois.