Votre question

Arbre n-aire, problemes de codes

Tags :
  • Windows
  • Programmation
Dernière réponse : dans Programmation
11 Janvier 2009 19:31:44

bonjour à tous,
j'aurais besoin d'aide pour creer un arbre n-aire afin d'implementer un dictionnaire de mot car malheureusement, mon code ne fonctionne pas à l'execution .
J'apprécierai un peu d'aide afin de pouvoir corriger cette erreur
Je vous remercie d'avance en vous souhaitant un bon moment dans l'attente de vos réponses.



  1. [/c*de]unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Memo1: TMemo;
  12. procedure FormCreate(Sender: TObject);
  13. private
  14. { Déclarations privées }
  15. public
  16. { Déclarations publiques }
  17. end;
  18. type
  19.  
  20. tree = ^Noeud;
  21. Noeud = record
  22. Fils : array['A'..'Z'] of tree; //liste de fils
  23.  
  24. Lettre : char ; // lettre contenue dans ce noeud de l'arbre
  25. Entier : boolean; //flag indiquant si le mot est entier
  26. end; { Noeud }
  27.  
  28.  
  29.  
  30. var
  31. Form1: TForm1;
  32. arbre,tete,courant:tree;
  33.  
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38. procedure createtree(a:tree); //construit les feuilles de l'arbre
  39. var c : char ;
  40.  
  41. begin
  42. new(a);
  43. for c:='A' to 'Z' do
  44. a^.Fils[c]:=nil ;
  45. a^.Lettre:=#0 ;
  46. a^.Entier:=false ;
  47. end ;
  48.  
  49. procedure createarbre(var tete : tree) ;
  50. begin
  51. tete:=nil;
  52. end ;
  53.  
  54.  
  55. procedure rajouter_mot(LeMot : string) ;
  56. var lettre : char ;
  57. var temp : tree;
  58. begin
  59. if LeMot='' then
  60. begin
  61. courant^.Entier:=true;
  62. exit ;
  63. end;
  64. lettre:=LeMot[1] ;
  65.  
  66. if courant^.fils[lettre]<>nil then // si la lettre existe déjà
  67. courant:=courant^.fils[lettre] // alors on se positionne sur la lettre suivante
  68. else // sinon il faut créer cette lettre dans l'arbre
  69. begin
  70. createtree(courant^.fils[lettre]) ;
  71. courant:=courant^.fils[lettre] ;
  72. courant^.lettre:=lettre ; // la lettre est maintenant dans l'arbre
  73. end ;
  74. delete(LeMot,1,1) ; // on efface la lettre du mot puisqu'elle est déjà dans l'arbre
  75. rajouter_mot(LeMot) ; // et on rajoute le reste
  76.  
  77. end ;
  78.  
  79.  
  80.  
  81. procedure chargerarbre(NomFic : string) ;
  82. var s,chemin : string ;
  83. f : textfile ;
  84. begin
  85. // chargement du dico
  86. chemin:=ExtractFilePath(Application.ExeName); {le chemin de l'appli, AVEC l'antislash final }
  87. assignFile(f,chemin+nomFic) ;
  88. reset(f) ;
  89. repeat
  90. readln(f,s) ;
  91. courant:=tete ; // on se positionne en tête de l'arbre
  92. rajouter_mot(s) ; // et on rajoute le mot
  93. until eof(f) ;
  94. closeFile(f) ;
  95. end ;
  96.  
  97.  
  98. procedure TForm1.FormCreate(Sender: TObject);
  99. begin
  100. createarbre(arbre);
  101. chargerarbre('dico1.txt') ;
  102.  
  103. end;
  104.  
  105. end.

Autres pages sur : arbre aire problemes codes

11 Janvier 2009 20:28:23

Merci d'utiliser le bbcode [code][/c*de] afin de rendre ton code plus lisible.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS