IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Problème de tri de nombres


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Problème de tri de nombres
    Bonjour,
    J'ai fais un petit programme (en visual basic) qui génère des chiffres aléatoirement puis qui les tris dans un ordre croissant.
    Le problème est que lorsqu'un nombre généré est un chiffre (0 à 9), le tri ne fonctionne pas car, par exemple le chiffre "7" est vu comme plus grand que "15" ou "22" ou autres nombres...
    Par exemple une suite générée dans cet ordre: 22 18 7 26 17 donnent une fois triés: 17 18 22 26 7.
    Je me suis aperçu de ça en faisant un debug pas à pas.
    J'ai pensé que le problème venait du format de mes textbox (dataformat) ou sont affichés les nombres. J'ai donc passé mes textbox en "nombre" car elles étaient en "général" mais ça n'a rien changé.
    Quelqu'un aurait-il une idée?
    Merci,
    A+.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Qu'est-ce que c'est que cette histoire de textbox et de dataformat ?

    Tu utilises une ListView ?
    Ou pire, Excel ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bon, je recapepete. Je vois que ça a pas l'air très clair.
    Avec VB6, je créé un formulaire (form), dedans je créé avec l'outil "textBox" (qui est dans la boiboite à outils) 5 zones de texte qui me permettent de voir les nombres générés. Puis je créé un bouton de commande qui permet le lancement du code pour la génération des nombres et de leurs tri.
    DataFormat est une propriété de Visual Basic 6 (VB6)
    Voila, c'est tout (con).
    désolé de t'avoir enervé...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ah OK, je n'avais pas pigé que tu utilisais un nombre fixe de composants pour ton affichage.

    Comment fais-tu le tri alors? Peux-tu poster ton code?

    PS: Désolé d'avoir eu l'air énervé. C'est plutôt mon état normal.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ok.
    Voila le code de tri: (c'est surement pas optimisé mais bon...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
           Do
                Inversion = 0
                For i = 0 To 3
                    If Text1(i).Text > Text1(i + 1).Text Then
                        temps = Text1(i).Text
                        Text1(i).Text = Text1(i + 1).Text
                        Text1(i + 1).Text = temps
                        Inversion = 1
                    End If
                Next i
            Loop Until Inversion = 0
    Je pense que ce code est bon. Pour info la génération des nombres àléatoires va de 1 à 50
    A+.

    Je dois m'absenter, je reviens plus tard ...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ton problème, c'est que tu cherches à trier directement les textes.
    Essaie ceci:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Do
    	Inversion = 0
    	For i = 0 To 3
    		If CInt(Text1(i).Text) > CInt(Text1(i + 1).Text) Then
    			temps = Text1(i).Text
    			Text1(i).Text = Text1(i + 1).Text
    			Text1(i + 1).Text = temps
    			Inversion = 1
    		End If
    	Next i
    Loop Until Inversion = 0
    Note que tu auras une erreur d'exécution si une conversion String->Int échoue. Mais il me semble qu'il existe un style "number" pour les textbox pour empêcher l'utilisateur de taper autre chose que des chiffres...

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut gwash
    Avec l'exemple que tu a donne si tu veu que ton trie fonctionne il faut que tu ecrit " 00, 01, 02 03, 04, 05, 06, 07, 08, 09 ", donc " 22 18 07 26 17

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Medinoc,
    Je vais essayer ta solution demain
    Blondelle,
    J'ai déjà essayé ta proposition mais ça n'a pas marché.

    Actuellement, je suis avec Visual Basic 2005 mais le type "textbox" est différent de celui de VB6 et je n'arrive pas à résoudre un problème:
    Dans VB6 la textbox se nomme: "textbox1(i)" donc je peux accéder à n'importe quelle valeur des textbox en remplaçant "i" par un chiffre (ex: textbox1(i).text = 42)
    Mais dans VB 2005, les textbox se nomme textbox1 pour la première, textbox2 pour la seconde etc...
    Donc si dans le code je veux accéder à une certaine textbox référencée par "i",
    l'expression "textbox(i).text n'est pas valable dans VB2005.
    Merci pour votre aide. A+.

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    Explication

    Parce que ton tri se fait sur les chaînes de caractères.
    En nombre le "7" code ASCII 56 sera toujours plus grand que
    "17" premier code ASCII de "1" c'est 49.
    Donc octet par octet "7" sera plus grand que "17"
    Et si comme le dit Blondel tu mets "07" le code ASCII de "0" c'est
    48 , à ce moment "7" sera plus petit que "17"
    CQFD

    Et comme le dit Médinoc (excuse si je me trompe sur ton nom)
    Tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim variablenombre() as single
    Dim max as integer
     
    max=3
    redim variablenombre(max)
    Do
       for i = 0 to max
          variablenombre (i)=Val(textbox(i))
       ....
    Et là tu dois trier sur le nombre et bien sûr remplacer tes
    textbox(i) par variablenombre(i) dans ton code


    A+

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir,

    Voici donc comment trier des chiffres choisis aléatoirement :

    Dans cet exemple : tri ascendant sur 1500 chiffres choisis aléatoirement entre 1 et 789.
    Le résultat est envoyé dans une listrbox nommée List1 et dont la propriété Sorted a été mise à True

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Randomize
        List1.Clear
        List1.Visible = False
        DoEvents
        For i = 0 To 1500
         List1.AddItem Format(Int((789 * Rnd) + 1), "00000000#")
        Next
        For i = 0 To List1.ListCount - 1
          List1.List(i) = Val(List1.List(i))
        Next
        List1.Visible = True
    si tu veux un tri descendant (inverse, donc) tu dis ...et je te fais une fonction additionnelle ad hoc en 2 coups de cueillère à pot...

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos participations.
    J'ai testé le code de Medinoc avec la fonction "Cint" et ... ça marche.
    Ca me suffit amplement.

    Pour Iclic, comme je l'ai dit précedemment à Blondelle, le fait de mettre "07" n'a pas marché chez moi. Comme tu le dis, c'est un problème de code ASCII des caractères mais ça n'a pas donné de résultat.
    Pour le code que tu as donné, comme je suis débutant, je vais étudier ça...

    Pour ucfoutu, je vais aussi voir ton exemple mais ma préférence allait quand même pour des "textbox".

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/07/2008, 11h14
  2. Problème (algorithmique) de tri de nombres
    Par t26 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/07/2007, 12h51
  3. [VB EXCEL] Problème tri de nombre
    Par jbidou88 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2007, 21h18
  4. Problème de tri entre nombre et lettre
    Par bikork dans le forum Delphi
    Réponses: 5
    Dernier message: 07/06/2006, 20h16
  5. Problème de tri de nombre négatif dans un état
    Par loutsky dans le forum Access
    Réponses: 11
    Dernier message: 21/04/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo