
Il faut la version 3.89 pour tester ( AllocateMemory())
Code : Tout sélectionner
;PureBasic 3.89
#Null=0
Structure Noeud
Mot.s ; le mot
Compteur.l ; compte le nombre d'apparition d'un mot
*Gauche.Noeud ; Mot inférieur
*Droit.Noeud ; Mot supérieur
EndStructure
Global *Racine.Noeud
*Racine = #Null
Procedure CompareMot(Mot1.s,Mot2.s,Casse.l)
If Casse = 1
Mot1 = UCase(Mot1)
Mot2 = UCase(Mot2)
EndIf
Index = 1
While Mid(Mot1,Index ,1) = Mid(Mot2,Index ,1) And Len(Mot1)>=Index
Index + 1
Wend
If Mid(Mot1,Index,1) = Mid(Mot2,Index ,1)
Resultat = 0
ElseIf Mid(Mot1,Index ,1) < Mid(Mot2,Index ,1)
Resultat = -1
Else
Resultat = 1
EndIf
ProcedureReturn Resultat
EndProcedure
Procedure AfficheArbre(*Noeud.Noeud)
If *Noeud <> #Null
AfficheArbre(*Noeud\Gauche)
Debug *Noeud\Mot + " => " + Str(*Noeud\Compteur) + " fois"
AfficheArbre(*Noeud\Droit)
EndIf
EndProcedure
Procedure Arbre(*Noeud.Noeud,Mot.s)
If *Noeud = #Null
*Noeud = AllocateMemory(SizeOf(Noeud))
If *Noeud
*Noeud\Mot = Mot
*Noeud\Compteur = 1
*Noeud\Gauche = #Null
*Noeud\Droit = #Null
Else
MessageRequester("Erreur","Impossible d'allouer de la mémoire !",0)
End
EndIf
ElseIf CompareMot(Mot,*Noeud\Mot,1)=0
*Noeud\Compteur + 1
ElseIf CompareMot(Mot,*Noeud\Mot,1)<0
*Noeud\Gauche=Arbre(*Noeud\Gauche,Mot)
Else
*Noeud\Droit=Arbre(*Noeud\Droit,Mot)
EndIf
ProcedureReturn(*Noeud)
EndProcedure
Procedure LectureFichier()
If ReadFile(0,"lamouche.txt")
While Eof(0)=0
Ligne.s = ReadString()
Index = 1
Repeat
Mot.s=StringField(ligne,Index, " ")
If Mot<>"" : *Racine=Arbre(*Racine,Mot) : Endif
Index + 1
Until Mot =""
Wend
CloseFile(0)
Else
MessageRequester("Erreur","Impossible de lire le fichier",0)
EndIf
EndProcedure
;Première série de tests
; *Racine=Arbre(*Racine,"Essai")
; *Racine=Arbre(*Racine,"Autre")
; *Racine=Arbre(*Racine,"Fin")
; *Racine=Arbre(*Racine,"Debut")
; *Racine=Arbre(*Racine,"Pourquoi")
; *Racine=Arbre(*Racine,"Autre")
; *Racine=Arbre(*Racine,"Encore")
; *Racine=Arbre(*Racine,"Fin")
;Deuxième série de tests , pas encore controlé :)
LectureFichier()
AfficheArbre(*Racine)
il est possible de faire un test sans le fichier , il suffit de mettre en commentaire la ligne
Code : Tout sélectionner
LectureFichier()
Dans un chemin montant , sablonneux , malaisé ,
Et de tous les côtés au soleil exposé ,
Six forts chevaux tiraient un coche .
Femmes , moine , vieillards , tout était descendu .
L' attelage suait , soufflait , était rendu .
Une mouche survient , et des chevaux s' approche ,
Prétend les animer par son bourdonnement ,
Pique l' un , pique l' autre , et pense à tout moment
Qu' elle fait aller la machine ,
S' assied sur le timon , sur le nez du cocher .
Aussitôt que le char chemine ,
Et qu' elle voit les gens marcher ,
Elle s' en attribue uniquement la gloire ,
Va , vient , fait l' empressée : il semble que ce soit
Un sergent de bataille allant en chaque endroit
Faire avancer ses gens et hâter la victoire .
La mouche , en ce commun besoin ,
Se plaint qu' elle agit seule , et qu' elle a tout le soin ;
Qu' aucun n' aide aux chevaux à se tirer d' affaire .
Le moine disait son bréviaire :
Il prenait bien son temps ! Une femme chantait :
C' était bien de chansons qu' alors il s' agissait !
Dame mouche s' en va chanter à leurs oreilles ,
Et fait cent sottises pareilles .
Après bien du travail , le coche arrive au haut :
« Respirons maintenant , dit la mouche aussitôt :
J' ai tant fait que nos gens sont enfin dans la plaine .
Cà , Messieurs les Chevaux , payez - moi de ma peine . »
Ainsi certaines gens , faisant les empressés ,
S' introduisent dans les affaires :
Ils font partout les nécessaires ,
Et , partout importuns , devraient être chassés .