Petits exercices pour débutants

atari54 Messages postés 20 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 6 juin 2012 - 11 nov. 2011 à 19:18
atari54 Messages postés 20 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 6 juin 2012 - 13 nov. 2011 à 18:39
Bonjour à tous !

Je suis nouveau sur le forum, et à vrai dire tout débutant en programmation (je viens d'entamer une formation pour adultes de développeur informatique).
Pour parler franchement, les exercices donnés par le formateur me paraissent trop difficiles pour mon niveau; du coup, désireux d'y aller étape par étape, à mon rythme, je me mets à faire de petits exercices simples à partir d'algorithmes.

Voici un exercice proposé dans un tutoriel d'algorithmes :

"Écrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si le produit est négatif ou positif (on inclut le traitement du cas où le produit peut être nul). Attention toutefois, on ne doit pas calculer le produit !"

Voici mon algo. :

Variables x, y en entier
Début
Lire x, y
SI x>0 ET y>0 ALORS
Ecrire "Le résultat est positif"
SINONSI x<0 ET y<0 ALORS
Ecrire "Le résultat est positif"
SINONSI x= 0 ET y= 0 ALORS
Ecrire "Le résultat est nul"
SINONSI
Ecrire "Le résultat est négatif"
FINSI
Fin

Je l'ai ensuite transposé sur VB 2010 :

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


'déclaration des variables
Dim x As Integer
Dim y As Integer


'on précise que le(s) chiffre(s) représenté par x correspond(ent) à la case nommé "entier1",
'et que le(s) chiffre(s) représenté par y correspond(ent) à la case nommée "entier2"
x = Val(entier1.Text)
y = Val(entier2.Text)


'traitement des différents cas possibles
If x > 0 And y > 0 Then
MsgBox("Le résultat est positif", MsgBoxStyle.Information, "type de résultat")
ElseIf x < 0 And y < 0 Then
MsgBox("Le résultat est positif", MsgBoxStyle.Information, "type de résultat")
ElseIf x 0 Or y 0 Then
MsgBox("Le résultat est nul", MsgBoxStyle.Information, "type de résultat")
Else
MsgBox("Le résultat est négatif", MsgBoxStyle.Information, "type de résulstat")
End If
End Sub
End Class

Que pensez-vous de mon code ? Je pense ne pas l'avoir suffisamment sécurisé (notamment lorsque l'utilisateur ne rempli qu'une seule case et pas l'autre).
Par avance, merci beaucoup !

25 réponses

ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
12 nov. 2011 à 20:13
Bonsoir acive,

Pourquoi pas, moi je le piège sur la conversion du texte en variable, tu peux le piéger aussi comme tu fais, ou encore de façon plus élaborée avec une procédure évènementielle KeyPress (sans doute les plus académique)...

Je crois avoir vu une fois qu'il y a une propriété du textBox pour n'accepter que le numérique, je ne sais pas, je n'utilise pas (vbNet 10) ?

Cordialement, Joe.
0
Utilisateur anonyme
12 nov. 2011 à 23:01
Salut Shay et Joe,

Je crois qu'on est en train de compliquer la chose (ce qui est nécessaire pour filtrer les erreurs de frappe) et notre ami qui est débutant ne sait plus à quelle porte frapper...

Ceci-dit nous avons encore un exemple de Shay, très bien d'ailleurs, et au bout du compte quand on regarde bien, c'est aussi nous même qui apprend.

Je ne sais pas si vous vous rappelez de QBasic, j'ai du faire un projet dessus en 1997 (je crois) j'ai du passer une bonne semaine sur un problème de ce genre.
Pas d'aide, internet à l'époque c'était du 14k payant à la minute, par modem sur une ligne de tel analogique, etc...

Regardez aujourd'hui les possibilités qui existent...




CF2i - Guadeloupe
Ingénierie Informatique
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 nov. 2011 à 07:19
Salut

code amélioré
Private num1, num2 As Double
Private Sub CheckProduct()
   Dim isnumeric1, isnumeric2 As Boolean
   isnumeric1 = Double.TryParse(textnum1.Text, num1)
   isnumeric2 = Double.TryParse(textnum2.Text, num2)

   If Not isnumeric1 And Not isnumeric2 Then
       MessageBox.Show(textnum1.Text & " et " & textnum2.Text & " ne sont pas pas numérique")
       Exit Sub
    End If
   If Not isnumeric1 Then
      MessageBox.Show(textnum1.Text & " n'est pas numérique")
      Exit Sub
   Else
       If Not isnumeric2 Then
         MessageBox.Show(textnum2.Text & " n'est pas numérique")
          Exit Sub
        End If
    End If

  If (num1 > 0) And (num2 > 0) Then
      MessageBox.Show("le produit " & num1 & " * " & num2 & " est positif")
      Exit Sub
   End If
  If (num1 0) Or (num2 0) Then
      MessageBox.Show("le produit " & num1 & " * " & num2 & " est nul")
       Exit Sub
   End If
   If (num1 < 0) Or (num2 < 0) Then
      MessageBox.Show("le produit " & num1 & " * " & num2 & " est négatif")
      Exit Sub
    End If
End Sub
    
    Private Sub ButtonCheck_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ButtonCheck.MouseClick
        CheckProduct()
    End Sub
0
atari54 Messages postés 20 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 6 juin 2012
13 nov. 2011 à 18:32
Salut à tous !

Tout d’abord, merci à tout ceux qui se sont donné la peine de me répondre. Vos explications, vos codes et le fait de me montrer le chemin à suivre pour certains cas m’ont permis d’assimiler certaines choses, et de me faire comprendre qu’il y a bien une multitude de façon de traiter un problème !

Si je résume :
- Ne pas délaisser le XOR (dont je connaissais l’existence ; mais j’avoue ne pas avoir pensé à l’utiliser ici), et le Select Case, qui au final clarifient l’écriture du code ;
- Penser à utiliser la fonction Sgn qui renvoie le signe ;
- Eviter d’utiliser Val afin que la machine ne compte pas comme « zéro » un champ laissé vide
- Et bien sûr, j’ai pris en compte les différentes propositions de codes.

Sinon, pas mal l'astuce pour les erreurs de saisies acive ! Bien vu ;)

Aussi :
Une dernière chose...

En réalité on se connait tous entre nous par le biais de ce forum (plus ou moins) ucfoutu, EhJoe, Jack etc.

Si t'as eu des réponses aussi rapides et bien ciblées, avec des codes en exemple c'est parce que:
1) T'as été honnête depuis le début, tu dis "je suis débutant, je fais une formation"
2) Tu arrives ici avec un bout de code fait par toi, qui fonctionne, sauf quelques modifications à apporter.
3) Tu ne prends la tête à personne en disant des trucs du genre "C'est pas ça que je cherche, y a t il quelqu'un pour m'aider?" au contraire tu remercies tout le monde.

Voilà, je voulais juste signaler ça, parce que d'habitude on nous dit souvent qu'on est antipathique, que nous sommes de mauvaise volonté etc.


Je suis en effet venu ici dans le but d'apprendre, et donc d'essayer de comprendre les choses : il me paraissait normal d'arriver avec mes petits "trucs" déjà fait et travaillés, afin que je puisse avoir les avis et les conseils de personnes avisées. ;) Comme je le disais, pour le moment, je ne pourrais malheureusement pas contribuer à grand chose (je suis tout débutant), mais le jour où je me sentirais capable d'aider à mon tour les tous débutants (lorsque je ne le serais plus...j'espère, un jour ! ;) ), ce sera évidemment avec grand plaisir. On partage, on apprend : bref, j'en ai déjà appris plus ici qu'en cours !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
atari54 Messages postés 20 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 6 juin 2012
13 nov. 2011 à 18:39
P.S. : Désolé pour les caractères et autres chiffres qui encombrent le message...c'était censé être des apostrophes (tout comme dans l'énoncé du problème !).
0
Rejoignez-nous