/****************************************************************/
Type ArbreBinaire(TypeElement : Nul Ou Type) Implemente Public : ICollection(Nul Ou TypeElement) Defaut Final TailleSegment 16 ConserverObjets
/* Objet : Definition du type ArbreBinaire. */
/****************************************************************/
/*-------------------------------------------------------------*/
/* Heritage des proprietes de ICollection. */
/*-------------------------------------------------------------*/
Prive :
NbElements : Entier Lecture Public;
/*-------------------------------------------------------------*/
/* Proprietes propres. */
/*-------------------------------------------------------------*/
Prive :
Comparaison : Nul Ou Appel Lecture Public;
Unique : Booleen Lecture Public;
NbGroupes : Entier Lecture Public;
EquilibrerAutomatiquement : Booleen Lecture Public;
/*-------------------------------------------------------------*/
/* Heritage des methodes d'Objet. */
/*-------------------------------------------------------------*/
Public :
Fonction Optimiser(Invariant) Identique(O : Nul Ou Objet) Retourner Nul Ou Booleen;
Procedure Convertir(O : Nul Ou Objet);
Fonction Optimiser(Invariant) CreeParLeServeur() Retourner Entier;
Fonction Optimiser(Invariant) CreeParLeProcessus() Retourner Entier;
Fonction Optimiser(Invariant) CreeDansLEntrepot() Retourner Entrepot;
Fonction Cloner(EntrepotCible : Nul Ou Entrepot=Nul, Profondeur : ModeClonage = ClonageObjetSeul) Retourner Nul Ou Objet;
Fonction LirePropriete(NomPropriete : Caractere) Retourner Nul Ou Objet;
Procedure EcrirePropriete(NomPropriete : Caractere, Valeur : Nul Ou Objet);
Fonction IncrementerDecrementerPropriete(NomPropriete : Nul Ou Caractere, Incrementer : Booleen, Prefixe : Booleen) Retourner Nul Ou Objet;
Procedure SupprimerPropriete(NomPropriete : Caractere);
Fonction Optimiser(Invariant) EnumererProprietes(NumeroPropriete : Entier, TypePropriete : Nul Ou Type=? Sortie, PeutEtreNul : Booleen=? Sortie, Aide : Nul Ou Caractere=? Sortie, NomEnumere : Nul Ou Caractere=? Sortie) Retourner Nul Ou Caractere;
Fonction Optimiser(Invariant) Adresse() Retourner Nul Ou Caractere;
Prive :
Fonction Exporter(E : Nul Ou IEchangeElementaire) Retourner Boolean;
Fonction Importer(E : Nul Ou IEchangeElementaire, EntrepotCible : Nul Ou Entrepot=Nul, EstFiltre : Booleen=Faux, V : Entier=0, R : Entier=0, C : Entier=0) Retourner Nul Ou Objet;
/*-------------------------------------------------------------*/
/* Heritage des methodes d'IIterateur. */
/*-------------------------------------------------------------*/
Public :
Fonction Optimiser(Invariant) ParcoursAuDebut(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction Optimiser(Invariant) ParcoursALaFin(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction Optimiser(Invariant) ParcoursAuMilieu(Position : Nul Ou Entier, NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction Suivant(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction Precedent(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction Optimiser(Invariant) PremierElement() Retourner Nul Ou TypeElement;
Fonction Optimiser(Invariant) DernierElement() Retourner Nul Ou TypeElement;
Fonction(Invariant) NumeroElement(NumeroIterateur : Entier=0) Retourner Nul Ou Entier;
Fonction(Invariant) Element(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction AllouerIterateur() Retourner Entier;
Procedure LibererIterateur(NumeroIterateur : Entier);
/*-------------------------------------------------------------*/
/* Heritage des methodes de ICollection. */
/*-------------------------------------------------------------*/
Public :
Fonction Optimiser(Invariant, NulAbsorbant) Gauche(Taille : Nul Ou Entier) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant, NulAbsorbant) Droite(Taille : Nul Ou Entier) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant, NulAbsorbant) Milieu(Position : Nul Ou Entier, Taille : Nul Ou Entier) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant, NulAbsorbant) Inserer(L : Nul Ou ArbreBinaire(Nul Ou TypeElement), Position : Nul Ou Entier) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant) Compter(Modele : Nul Ou TypeElement, Position : Nul Ou Entier=Nul) Retourner Nul Ou Entier;
Fonction Optimiser(Invariant) Rechercher(Modele : Nul Ou TypeElement, Position : Nul Ou Entier=Nul) Retourner Nul Ou Entier;
Procedure HabilitationContextuelle Supprimer(NumeroIterateur : Entier=0);
Procedure HabilitationContextuelle Remplacer(Remplacant : Nul Ou TypeElement, NumeroIterateur : Entier=0);
Fonction Optimiser(Invariant) RemplacerTous(Modele : Nul Ou TypeElement, Remplacant : Nul Ou TypeElement, Position : Nul Ou Entier=Nul) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant) SupprimerTous(Modele : Nul Ou TypeElement, Position : Nul Ou Entier=Nul) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction HabilitationContextuelle AjouterAuDebut(O : Nul Ou TypeElement) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction HabilitationContextuelle AjouterALaFin(O : Nul Ou TypeElement) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Operateur HabilitationContextuelle +(O : Nul Ou TypeElement) Retourner Nul Ou Liste(TypeElement);
Operateur Optimiser(Invariant, NulAbsorbant) [](Position : Nul Ou Entier) Retourner Nul Ou TypeElement;
Operateur [](Position : Nul Ou Entier, Valeur : Nul Ou TypeElement, MethodeAComposer : Nul Ou Fonction(P1 : Nul Ou TypeElement, P2 : Nul Ou TypeElement) Retourner Nul Ou TypeElement);
Operateur [](Position : Nul Ou Entier, Prefixe : Booleen, MethodeAComposer : Nul Ou Fonction(P1 : Nul Ou TypeElement, P2 : Booleen) Retourner Nul Ou TypeElement) Retourner Nul Ou TypeElement;
/*-------------------------------------------------------------*/
/* Methodes propres. */
/*-------------------------------------------------------------*/
Public :
Constructeur(T : Nul Ou Type, Critere : Nul Ou Fonction(O1 : Nul Ou TypeElement, O2 : Nul Ou TypeElement) Retourner ComparaisonObjet, U : Booleen, E:Booleen=Vrai);
Fonction Optimiser(Invariant, NulAbsorbant) Union(A : Nul Ou ArbreBinaire(Nul Ou TypeElement)) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant, NulAbsorbant) Intersection(A : Nul Ou ArbreBinaire(Nul Ou TypeElement)) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant, NulAbsorbant) Soustraction(A : Nul Ou ArbreBinaire(Nul Ou TypeElement)) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction Optimiser(Invariant, NulAbsorbant) Exclusion(A : Nul Ou ArbreBinaire(Nul Ou TypeElement)) Retourner Nul Ou ArbreBinaire(Nul Ou TypeElement);
Fonction SuivantGroupe(IIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction PrecedentGroupe(IIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction NbElementsGroupe(NumeroIterateur : Entier=0) Retourner Entier;
Fonction PremierElementGroupe(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Fonction DernierElementGroupe(NumeroIterateur : Entier=0) Retourner Nul Ou TypeElement;
Procedure Equilibrer(Etat : Booleen=Vrai);
Operateur =(C: Nul Ou ICollection(Nul Ou TypeElement));
Prive :
Destructeur(MettreEnAnteMemoire : Booleen) Retourner Booleen;
Fin Type
Le type ArbreBinaire possède un constructeur explicite permettant de construire un arbre binaire vide. L'arbre binaire comporte le critère Critere permettant de classer les objets qui y sont mémorisés. Si le critère est Nul, alors le critère retenu est la comparaison des adresses des objets par la méthode Identique du type Objet. L'arbre binaire est automatiquement équilibré en cas d'ajouts, de modifications ou de suppressions si le paramètre E a pour valeur Vrai.
Le type ArbreBinaire est paramétré par le type TypeElement correspondant au type d'élément de l'arbre binaire.
Les noeuds de l'arbre correspondent à un groupe d'objets ayant même valeur de critère. L'arbre peut posséder un ou plusieurs objets associés à chaque noeud. Si l'arbre est Unique, un seul objet peut être associé à chaque noeud.
Chaque objet du type ArbreBinaire possède des moteurs d'itérations permettant de parcourir ses éléments. Les itérateurs sont numérotés de 0 à n, 0 étant l'itérateur implicite qui n'a pas besoin d'être alloué par l'appel à AllouerIterateur. Chaque itérateur alloué, une fois utilisé, doit être libéré par l'appel LibererIterateur.
/****************************************************************/
Fonction ComparerCaractere(C1 : Nul Ou Caractere, C2: Nul Ou Caractere) Retourner ComparaisonObjet
/* Objet : Compare les caracteres. */
/****************************************************************/
Debut
Si C1==Nul Ou C2==Nul Alors
Retourner ComparaisonNul;
Fin Si
Si C1<C2 Alors
Retourner ComparaisonAvant;
Fin Si
Si C1>C2 Alors
Retourner ComparaisonApres;
Fin Si
Retourner ComparaisonEgal;
Fin Fonction
Principal
/*******/
Variable
/******/
A : ArbreBinaireDe Caractere;
C : Caractere;
Debut
/* Construction d'un arbre a trois éléments. */
A=ArbreBinaire(ComparerCaractere, Faux);
C="A";
A+=C;
A+="B";
A+=C;
/* Parcours de cet arbre. */
Pour C=A.ParcoursAuDebut() JusquA A.DernierElement() Faire
Ecran.Ecrire(C);
Fin Pour
Fin Principal
- | - | - | - | - | - | - | - | - |