Forum Liberty Basic France
• Index
Voici une petite mésaventure qui m'a laissé chercher un bout de temps tellement j'avais confiance dans mon tri, alors que c'est lui qui semait la pagaille dans le projet où je voulais l'inclure...
En cause, les doublons dans la liste à trier, qui entraînent une boucle while difference=0 dans les affres de l'infini...
J'ai résolu le problème en ajoutant une étape de filtrage dans la boucle : on ne compare que des mots différents. Puis une fois le tri fait, je supprime les cases restées vides, celles qui remplacent les doublons, avec une série de boucles for/next. ça fait le job que j'attend pour ma base de données et je n'ai pas la prétention de développer davantage, mais il y a sûrement plus élégant : supprimer les doublons et trier la liste au sein de la même boucle. Possible ?
La liste à trier :
Code VB :
Hors concours, on peut aussi y mettre nos solutions perso :
Code VB :
En cause, les doublons dans la liste à trier, qui entraînent une boucle while difference=0 dans les affres de l'infini...
J'ai résolu le problème en ajoutant une étape de filtrage dans la boucle : on ne compare que des mots différents. Puis une fois le tri fait, je supprime les cases restées vides, celles qui remplacent les doublons, avec une série de boucles for/next. ça fait le job que j'attend pour ma base de données et je n'ai pas la prétention de développer davantage, mais il y a sûrement plus élégant : supprimer les doublons et trier la liste au sein de la même boucle. Possible ?
La liste à trier :
Code VB :
[mots] data "guidage","fleur","armure","armoire","fleur","voile","armoire","armoire","guidage","volontaire","zephir" nbmots=11
Hors concours, on peut aussi y mettre nos solutions perso :
Code VB :
[mots] data "guidage","fleur","armure","armoire","fleur","voile","armoire","armoire","guidage","volontaire","zephir" nbmots=11 restore [mots] dim liste$(nbmots):dim tri$(nbmots) for a=0 to nbmots-1:read mot$:liste$(a)=mot$:next for ref=0 to nbmots-1 motRef$=liste$(ref) for compare=0 to nbmots-1 if ref<>compare then motCompare$=liste$(compare) 'si les mots sont différents if motRef$<>motCompare$ then 'on compare lettre à lettre le mot référence et le mot comparé lettre=1 difference=0 while difference=0 'codes ascii des lettres a=asc(mid$(motRef$,lettre,1)) b=asc(mid$(motCompare$,lettre,1)) 'on supprime la distinction majuscules-minuscules if a>96 then a=a-32 if b>96 then b=b-32 'pour quitter l'analyse lorsque les lettres seront différentes if a=b then lettre=lettre+1 else difference=1 wend if a>b then apres=apres+1 else avant=avant+1 end if end if next tri$(apres)=motRef$ 'tri dans l'ordre conventionnel 'tri$(avant)=motRef$ 'tri dans l'ordre inverse avant=0:apres=0 next 'suppression des cases vides 'comptage des cases vides pour dimensionner le tableau définitif for a=0 to nbmots-1 if tri$(a)="" then casevide=casevide+1 next nbcases=nbmots-casevide dim definitif$(nbcases) 'transfert des cases non vides dans le tableau définitif actuel=0 for a=0 to nbmots-1 if tri$(a)<>"" then definitif$(actuel)=tri$(a):actuel=actuel+1 next 'controle du résultat for a=0 to actuel-1:print definitif$(a):next
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie