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

  FORUM HardWare.fr
  Programmation
  Ada

  Creation d une table de conversion

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Creation d une table de conversion

n°365458
theorie du​ chaos
morte et enterrée
Posté le 17-04-2003 à 18:48:31  profilanswer
 

J ai un arbre de Huffamn, arbre dont les feuilles contiennent des caracteres...
 
je voudrais creer une table de correspondance
caractere - code de huffman
en utilisant un tableau indexe par les caracteres
 
il s agit d explorer tout l arbre
quand on part a gauche, on ajoute un zero au code
sinon  un un
quand on arrive sur une feuille, on met le code dans le tableau
 
le code est une liste qui grandit lors de l exploration de l arbre
 
 
Voila mon prog... qui ne marche pas :cry:
 
Les Specifications:
   ----------------------------------------------
   -- Pour obtenir le code de chaque caractere --
   ----------------------------------------------
 
   --| les codes ayant une longueur variable, on utilise la structure de liste
 
   type Element;
   type Code is access Element;
   type Element is record
      B : Bit;
      Suivant : Code;
   end record;
 
 
   type Table is array (Character) of Code;  
   
   Table_Vide : Constant Table := (others => null);
   
   
   --| on creer une table de correspondance pour eviter d'avoir a reparcourir  
   --| l'arbre plusieurs fois pour le meme caractere
   
   
   
   procedure Inserer_En_Queue (Suite_Code: in Bit;  
                               Codage_Car : in out Code);
       
   procedure Creer_Table (T : out Table;
               A : in     Arbre);
 
Le corps:
   ----------------------
   -- Inserer_En_Queue --
   ----------------------
 
 
   procedure Inserer_En_Queue (Suite_Code: in Bit;  
                               Codage_Car : in out Code) is
      Der_Code : Code := Codage_Car;
   begin
      if Der_Code /= null then
         while Der_Code.Suivant /= null loop
            Der_Code := Der_Code.Suivant;
         end loop;
  Der_Code.Suivant := new Element'(Suite_Code, null);
      else
         Der_Code := new Element'(Suite_Code, null);
      end if;
   end Inserer_En_Queue;
 
 
 
   -----------------
   -- Creer_Table --
   -----------------
   
   procedure Creer_Table (T : out Table;
               A : in  Arbre) is
      Codage : Code := null;  
      Tab : Table := Table_Vide;
         
      procedure Creer_Table_iter (T : in out Table;
                       A : in  Arbre) is
         Arb : Arbre := A;
      begin
         if Est_Feuille (Arb) then  
            T(L_Info_Feuille(Arb)) := Codage;
         else  
            Inserer_En_Queue(0, Codage);
            Creer_Table_Iter (T, Gauche (Arb));
     Inserer_En_Queue(1, Codage);
     Creer_Table_Iter (T, Droit (Arb));
         end if;
      end Creer_Table_Iter;
   
   begin
      Creer_Table_iter (Tab, A);
      T := Tab;
   end Creer_Table;
 
 
merci d avance :jap:

mood
Publicité
Posté le 17-04-2003 à 18:48:31  profilanswer
 

n°365529
Poireau
Posté le 17-04-2003 à 19:46:59  profilanswer
 

Salut,
 
Je pense que ton problème est lié à l'effet de bord de la variable Codage dans la procedure Creer_Table_iter.
 
En effet dans Creer_Table_iter, au premier appel on passe à gauche, et au seconde appel, on passe à droite de l'arbre et on ajoute le codage '0' à la lettre la plus utilisé, car c'est une feuille. Au retour de cet appel, on ajoute le bit 1 à la file donc on a '01' ce qui n'existe pas... Tu gardes toujours les bits précédents dans la variable globale Codage.
 
Un problème de plus sur ta structure de données, il y a conflit de référence, car tu modifie la file à chaque appel, mais le pointeur de tête pointe au même endroit... A la fin tous les lettres auront le même codage. Car il n'y a qu'une seule file...
 
Je parle de file, car tu utilise la liste comme une file. Il te faudrait ajouter la procedure pour supprimer des elements de tête. Le mieux, je pense, serait de créer un type File spécifique dans un paquetage, pour contrer le problème de référence.

n°366160
theorie du​ chaos
morte et enterrée
Posté le 18-04-2003 à 11:22:19  profilanswer
 

merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Creation d une table de conversion

 

Sujets relatifs
[ASM] Création d'une DLL en MASM32 pour un client VB6table en VBA
[Oracle&SQL].sql contenant la creation de plusieurs triggers (RESOLU)[dBASE] Copier la structure d'une table pour mettre sous Excel
SQL ORACLE Erreur: "Impossible d'étendre la table MACHIN.CHOSE de 8 daConversion automatique
[C++] Regler le timeout d'un connect (création d une Socket) URGENTComment modifier en masse des données dans une table MySQL ?
Création d'un fichier en CQuel est votre plus belle création?
Plus de sujets relatifs à : Creation d une table de conversion


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