Le fichier source est ${UPS_HOME}/upsvtm/demo/${UPS_LANGUAGE}/hachage.upl.
upscmp Source=hachage.upl
hachage
upssng Source=hachage.upl
Source Composant "Exemple d'emploi du type Hachage" Version 4.0.0;
Procedure EcrireHachage(M:Caractere, H:HachageDe Caractere)
/********************************************************/
Variable
/******/
C : Caractere;
Debut
Ecran.Ecrire(M);
Pour C=H.ParcoursAuDebut() JusquA H.DernierElement() Pas H.Suivant() Faire
Ecran.Ecrire(C);
Fin Pour
Ecran.Ecrire("\n");
Fin Procedure
Procedure EcrireHachageInverse(M:Caractere, H:HachageDe Caractere)
/****************************************************************/
Variable
/******/
C : Caractere;
I : Entier;
Debut
Ecran.Ecrire(M);
I=H.AllouerIterateur();
Pour C=H.ParcoursALaFin(I) JusquA H.PremierElement() Faire
Ecran.Ecrire(H.Element(I));
Fin Pour
H.LibererIterateur(I);
Ecran.Ecrire("\n");
Fin Procedure
Fonction CalculerCle(C:Caractere) Retourner Entier
/************************************************/
Debut
Si C==Nul Alors
Retourner 0;
Fin Si
Retourner C[0];
Fin Fonction
Principal Optimiser(NePasFactoriserChaine)
/****************************************/
Variable
/******/
H : Nul Ou HachageDe Caractere;
H2 : Nul Ou HachageDe Caractere;
C : Caractere;
Debut
H=HachageDe(CalculerCle,16);
H=H+"A";
H=H+"B";
H+="C";
H+="D";
H+="E";
H+="F";
H+="G";
H+="H";
H+="I";
EcrireHachage("Suivant()", H);
EcrireHachageInverse("Precedent()", H);
EcrireHachage("Gauche(3)", H.Cloner().Gauche(3));
EcrireHachage("Droite(3)", H.Cloner().Droite(3));
EcrireHachage("Milieu(2,3)", H.Cloner().Milieu(2,3));
C="a";
H2=HachageDe(CalculerCle, 16);
H2+=C;
H2+="b";
H2+="c";
H2+=C;
H2+="b";
H2+="c";
EcrireHachage("Inserer(2)", H.Cloner().Inserer(H2,2));
Ecran.Ecrire("Compter(0)");
Ecran.Ecrire(H2.Compter(C));
Ecran.Ecrire("\n");
Ecran.Ecrire("Compter(1)");
Ecran.Ecrire(H2.Compter(C,1));
Ecran.Ecrire("\n");
EcrireHachage("Remplacer(0)", H2.RemplacerTous(C, "x"));
EcrireHachage("Remplacer(1)", H2.RemplacerTous(C, "x",1));
Ecran.Ecrire("Rechercher(0)");
Ecran.Ecrire(H2.Rechercher(C));
Ecran.Ecrire("\n");
Ecran.Ecrire("Rechercher(1)");
Ecran.Ecrire(H2.Rechercher(C,1));
Ecran.Ecrire("\n");
EcrireHachage("Supprimer(0)", H2.SupprimerTous(C));
EcrireHachage("Supprimer(1)", H2.SupprimerTous(C,1));
Ecran.Ecrire("H[0]");
Ecran.Ecrire(H[0]);
Ecran.Ecrire("H[2]");
Ecran.Ecrire(H[2]);
Ecran.Ecrire("PremierElement()");
Ecran.Ecrire(H.PremierElement());
Ecran.Ecrire("DernierElement()");
Ecran.Ecrire(H.DernierElement());
Ecran.Ecrire("NumeroElement()");
Ecran.Ecrire(H.NumeroElement());
EcrireHachage("AjouterAuDebut()", H.AjouterAuDebut("X"));
EcrireHachage("AjouterALaFin()", H.AjouterALaFin("Y"));
Fin Principal