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.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
type
tree = ^Noeud;
Noeud = record
Fils : array['A'..'Z'] of tree; //liste de fils
Lettre : char ; // lettre contenue dans ce noeud de l'arbre
Entier : boolean; //flag indiquant si le mot est entier
end; { Noeud }
var
Form1: TForm1;
arbre,tete,courant:tree;
implementation
{$R *.dfm}
procedure createtree(a:tree); //construit les feuilles de l'arbre
var c : char ;
begin
new(a);
for c:='A' to 'Z' do
a^.Fils[c]:=nil ;
a^.Lettre:=#0 ;
a^.Entier:=false ;
end ;
procedure createarbre(var tete : tree) ;
begin
tete:=nil;
end ;
procedure rajouter_mot(LeMot : string) ;
var lettre : char ;
var temp : tree;
begin
if LeMot='' then
begin
courant^.Entier:=true;
exit ;
end;
lettre:=LeMot[1] ;
if courant^.fils[lettre]<>nil then // si la lettre existe déjà
courant:=courant^.fils[lettre] // alors on se positionne sur la lettre suivante
else // sinon il faut créer cette lettre dans l'arbre
begin
createtree(courant^.fils[lettre]) ;
courant:=courant^.fils[lettre] ;
courant^.lettre:=lettre ; // la lettre est maintenant dans l'arbre
end ;
delete(LeMot,1,1) ; // on efface la lettre du mot puisqu'elle est déjà dans l'arbre
rajouter_mot(LeMot) ; // et on rajoute le reste
end ;
procedure chargerarbre(NomFic : string) ;
var s,chemin : string ;
f : textfile ;
begin
// chargement du dico
chemin:=ExtractFilePath(Application.ExeName); {le chemin de l'appli, AVEC l'antislash final }
assignFile(f,chemin+nomFic) ;
reset(f) ;
repeat
readln(f,s) ;
courant:=tete ; // on se positionne en tête de l'arbre
rajouter_mot(s) ; // et on rajoute le mot
until eof(f) ;
closeFile(f) ;
end ;
procedure TForm1.FormCreate(Sender: TObject);
begin
createarbre(arbre);
chargerarbre('dico1.txt') ;
end;
end.