1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| 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. |
Partager