Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
788 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  arbre n-aire, probleme de code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

arbre n-aire, probleme de code

n°1836678
la_star160
Posté le 11-01-2009 à 21:52:09  profilanswer
 

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.

mood
Publicité
Posté le 11-01-2009 à 21:52:09  profilanswer
 

n°1836917
theshockwa​ve
I work at a firm named Koslow
Posté le 12-01-2009 à 14:44:16  profilanswer
 

la première fois où tu passes dans rajouter_mot(), courant vaut nil => crash.
Tu dois faire un createtree sur ton noeud courant avant (du coup, ca soulève le nommage doteux de tes fonctions ... createtree et createarbre n'ont pas du tout le même effet)
 
autre point grave : ta procédure createtree prend un paramètre par valeur, et donc elle n'a pas le comportement que tu attends d'elle !
 
ensuite, en vrac :
* j'imagine qu'il y a une balise de code pour reconnaître la pascal aussi sur ce brillant forum, encadre au moins ton code dans des balises [ code ] en attendant
* les variable globales, c'est le mal ...
* ta boucle d'initialisation n'a pas besoin d'initialiser 26 fois les membres lettre et entier de ton noeud adns ta fonction createtree


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  arbre n-aire, probleme de code

 

Sujets relatifs
probleme php exec avec argument et espaceGestion du clavier...Problème :(
Perl et cgi: problème de splitProbleme Ecriture base de registre VB
Insérer un code dans une page phpProblème Identification, Connexion
Python, problème avec les tableauxProblème de sélection dans une ComboBox
Problème Design sous IE7probleme xsl
Plus de sujets relatifs à : arbre n-aire, probleme de code


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR