Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème algorithmique

Sujet résolu
    26 mars 2011 à 18:02:15

    Bonjour, j'ai appris à programmer en VB.NET avec le site du zéro, et j'ai créé de nombreux petits projets... Cependant j'ai un problème, je cherche à faire une calculatrice qui calcule le pourcentage de compatibilité entre deux personnes : ce nombre est généré aléatoirement, mais je veux que pour deux mêmes prénoms et pendant une même exécution du logiciel, le pourcentage soit le même...
    voici mon code source : je n'ai pour le moment traité qu'un seul prénom voyant qu'il y a déjà une erreur...
    Le problème, c'est que quand je rappuis sur Calculer, le pourcentage est différent...
    Merci d'avance

    Public Class Form1
    
        Private Sub TB_PRE1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_PRE1.Click
            Me.TB_PRE1.Text = ""
            Me.TB_PRE1.ForeColor = Color.Black
            If Me.TB_PRE2.Text = "" Then
                Me.TB_PRE2.Text = "Prénom 2"
                Me.TB_PRE2.ForeColor = Color.Gray
            End If
        End Sub
    
        Private Sub TB_PRE2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_PRE2.Click
            Me.TB_PRE2.Text = ""
            Me.TB_PRE2.ForeColor = Color.Black
            If Me.TB_PRE1.Text = "" Then
                Me.TB_PRE1.Text = "Prénom 2"
                Me.TB_PRE1.ForeColor = Color.Gray
            End If
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim entree1, entree2, sortie1, sortie2 As String
            Dim i, nombre, nombre1, nombrebis, conditionbis, nombre2, condition, quit As Integer
            Dim tableau(500, 2) As String
            While i < 500  'boucle permetant 'initialiser le tableau à ""
                tableau(i, 1) = ""
                tableau(i, 2) = ""
                i = i + 1
            End While
            condition = 0
            i = 0
            conditionbis = 0
            nombre1 = 0
            nombrebis = 0
            nombre2 = 0
            nombre = 0
            quit = 0
            Me.LBL_ERR.Visible = False
    
    
            If Me.TB_PRE1.Text = "" Or Me.TB_PRE1.Text = "Prénom 1" Or Me.TB_PRE2.Text = "" Or Me.TB_PRE2.Text = "Prénom 2" Or IsNumeric(Me.TB_PRE1.Text) Or IsNumeric(Me.TB_PRE2.Text) Then
                Me.LBL_ERR.Visible = True
                Me.TB_PRE1.Text = "Prénom 1"
                Me.TB_PRE1.ForeColor = Color.Gray
                Me.TB_PRE2.Text = "Prénom 2"
                Me.TB_PRE2.ForeColor = Color.Gray
    
            Else
                entree1 = Me.TB_PRE1.Text  'On met dans entree1, le texte saisi en TB_PRENOM1
                sortie1 = RTrim(entree1)   'enlève les espaces de la fin
                sortie1 = sortie1.ToUpper()   'mettre en majuscule
                entree2 = Me.TB_PRE2.Text  'On met dans entree2, le texte saisi en TB_PRENOM2
                sortie2 = RTrim(entree2) 'enlève les espaces de la fin
                sortie2 = sortie2.ToUpper() 'mettre en majuscule
                Me.TB_PRE1.Text = sortie1  'On affiche les noms en majuscules et sans espace à la fin
                Me.TB_PRE2.Text = sortie2   'Dans les TB_PRENOM1 et TB_PRENOM2
                While quit = 0 'grosse boucle, pour sortir, le nom doit etre trouvé
                    condition = 0
                    While condition < 500  'boucle demandant si on connait le nom, sortie1 devient numérique si oui
                        If sortie1 = tableau(condition, 1) Then
                            nombre = condition
                            sortie1 = tableau(nombre, 2)
                            quit = 1
                            Me.TB_PRE2.Text = sortie2 & condition
                        End If
                        condition = condition + 1
    
                    End While
    
    
                    While tableau(i, 1) <> "" 'boucle trouvant combien de cases sont occupés dans le tableau
                        i = i + 1
                    End While
    
                    If condition = 500 Then
                        tableau(i, 1) = sortie1
                        tableau(i, 2) = Rnd() * 50
                    End If
    
                End While
                Form2.Show()
                Form2.LBL_CHIFRE.Text = tableau(i, 2)
            End If
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Click
           
            If Me.TB_PRE1.Text = "" Then
                Me.TB_PRE1.Text = "Prénom 1"
                Me.TB_PRE1.ForeColor = Color.Gray
            End If
            If Me.TB_PRE2.Text = "" Then
                Me.TB_PRE2.Text = "Prénom 2"
                Me.TB_PRE2.ForeColor = Color.Gray
            End If
    
        End Sub
    
    End Class
    


    Image utilisateur
    Image utilisateur
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 mars 2011 à 18:13:17

      Définis le "type" de ta balise code à "vbnet", comme ça :
      <code type="vbnet">...
      

      Sinon c'est vachement dur à lire ^^

      Pour avoir un truc pseudo-aléatoire, la méthode la plus simple serait d'additionner toutes les valeurs numériques des caractères des deux prénoms, puis de faire quelque chose avec ça ^^
      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2011 à 18:17:09

        Excuse moi pour mon code :D
        Mais comment fait on pour assigner une valeur à une lettre ?
        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2011 à 18:30:18

          Chaque lettre ont un code ASCII, donc tu peux convertir la lettre en son code ASCII ;)

          string firstName = "Antoine";
          List<int> letters = new List<int>();
          
          foreach (char c in firstName) letters.Add( (int)c );
          


          Désolé, je ne connais pas le VB mais tu peux retranscrire mon code sans problème.
          • Partager sur Facebook
          • Partager sur Twitter
            26 mars 2011 à 18:31:28

            Oui merci beaucoup, j'essaye immédiatement :)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              26 mars 2011 à 18:32:55

              Le type Char est implicitement convertible en Integer (puisque en interne c'est stocké comme un chiffre).
              Donc tu peux parcourir tous les caractères de tes deux noms (avec For Each), additionner tout, et ensuite faire quelque chose avec ce nombre...par exemple, prendre le 1er et le dernier nombre pour en faire un nombre à deux chiffres (et pis comme ça t'es sûr que personne se plaindra parce que ça indiquait 100% :-° )
              • Partager sur Facebook
              • Partager sur Twitter
                26 mars 2011 à 18:39:25

                Exactement, merci pour vos réponses, je posterais le code source à l'aide de <code> :) quand il sera fini !
                • Partager sur Facebook
                • Partager sur Twitter

                Problème algorithmique

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown