Exemples de Z-algorithmes
1. Crée une liste à partir d'une
macro-opération, puis la parcourt.
SOIENT
L UNE LISTE;
P UN POINTEUR VERS UNE LISTE;
I UN ENTIER;
DEBUT
I := 8;
CREER_LISTE( L, [ I, 2*I, 3*I, 4*I] ) ;
ECRIRE('Parcours De La LISTE ');
P := L;
TANTQUE P <> NIL :
ECRIRE ( VALEUR(P) );
P := SUIVANT (P)
FINTANTQUE;
FIN
2. Construit un fichier de blocs de n
articles avec un taux de remplissage de 100%, puis le parcourt.
SOIENT
F UN FICHIER DE ( ENTIER , VECTEUR ( 5 ) DE
CHAINES )
BUFFER B1 ENTETE ( ENTIER , ENTIER ) ;
{ fichier de blocs contenant le nombre
d'articles et un tableau d'articles}
{ entête : nombre d'articles, nombre de blocs}
Creer , Imprimer DES ACTIONS ;
DEBUT
APPEL Creer ;
APPEL Imprimer ;
FIN
/***** Chargement de n articles avec un chargement ... 100% ****/
ACTION Creer ;
SOIENT
I , K , N , Nbblocs DES ENTIERS ;
DEBUT
OUVRIR ( F , 'f.pas' , 'N' ) ;
I := 0 ;
Nbblocs := 0 ;
N := 500 ;
AFF_ENTETE ( F , 1 , N ) ;
TQ I < N :
K := 0 ;
TQ ( K < 5 ) ET ( I
< N )
K := K + 1 ;
I := I + 1 ;
AFF_ELEMENT ( STRUCT ( B1 , 2 ) [ K ] , ALEACHAINE )
FTQ ;
AFF_STRUCT ( B1 , 1 , K
) ;
Nbblocs := Nbblocs + 1
;
ECRIRESEQ ( F , B1 ) ;
FTQ ;
AFF_ENTETE ( F , 2 , Nbblocs ) ;
FERMER ( F ) ;
FIN
/***** Impression des articles du fichier ****/
ACTION Imprimer ;
SOIENT
I , K DES ENTIERS ;
DEBUT
I := 0 ;
OUVRIR ( F , 'f.pas' , 'A' ) ;
TQ NON FINFICH ( F )
I := I + 1 ;
ECRIRE ( 'B L O C n� '
, I ) ;
LIRESEQ ( F , B1 ) ;
POUR K := 1 , STRUCT (
B1 , 1 )
ECRIRE ( ELEMENT ( STRUCT ( B1 , 2 ) [ K ] ) )
FPOUR
FTQ;
FIN
3. Construit un arbre de structure à
partir d'une macro-opération, puis écrit ses éléments.
SOIT
A UN ARB DE ( CHAINE , ENTIER ) ;
V UN ( CHAINE , ENTIER ) ;
DEBUT
INIT_STRUCT ( V , [ 'xyz' , 1001 ] ) ;
CREER_ARB ( A , [ [ 'x' , 23 ] , V , [ 'y' ,
123 ] , [ 'z' , 23 ] ] ) ;
ECRIRE ( INFO ( A ) ) ;
ECRIRE ( INFO ( FD ( A ) ) ) ;
ECRIRE ( INFO ( FD ( FD ( A ) ) ) ) ;
FIN
4. Crée un arbre de recherche m-aire
d'ordre 3 de structures à l'aide d'une macro-opération puis le parcours en inordre.
SOIT
M UN ARM ( 3 ) DE ( CHAINE , ENTIER ) ;
Inordre UNE ACTION ;
DEBUT
CREER_ARM ( M , [ [ 'x' , 3 ] , [
'a' , 3 ] , [ 'y' , 3 ] , [ 'z' , 3 ] , [ 'h' , 3 ] , [ 'e' , 3 ] , [ 'd' , 3 ] ] )
;
APPEL Inordre ( M ) ;
FIN
ACTION Inordre ( Q )
SOIT
Q UN ARM ( 3 ) DE ( CHAINE , ENTIER ) ;
I UN ENTIER ;
DEBUT
SI Q <> NIL
POUR I := 1 , DEGRE ( Q
)
APPEL Inordre ( FILS ( Q , I ) ) ;
ECRIRE ( INFOR ( Q , I ) )
FINPOUR ;
APPEL Inordre ( FILS (
Q , DEGRE ( Q ) + 1 ) )
FSI
FIN
5. Crée une liste de deux vecteurs
dynamiques à l'aide d'une macro-opération, puis imprime les éléments de cette liste
SOIT
Lv UNE LISTE DE VECTEURS ( 5 ) DYNAMIQUES DE
ENTIERS ;
SOIENT
V1 , V2 , V DES VECTEURS ( 5 ) DYNAMIQUES DE
ENTIERS ;
I UN ENTIER ;
DEBUT
ALLOC_TAB ( V ) ;
V1 := V ;
INIT_VECT ( V1 , [ 2 , 4 , 8 , 9 , 56 ] ) ;
ALLOC_TAB ( V ) ;
V2 := V ;
INIT_VECT ( V2 , [ 12 , 14 , 18 , 19 , 156 ] )
;
CREER_LISTE ( Lv , [ V1 , V2 ] ) ;
TQ Lv <> NIL :
V := VALEUR ( Lv ) ;
POUR I := 1 , 4 :
ECRIRE ( ELEMENT ( V [ I ] ) )
FPOUR ;
Lv := SUIVANT ( Lv ) ;
FTQ
FIN
6. Crée un arbre de recherche binaire
à l'aide d'une macro-opération puis le parcours en largeur ( niveau par niveau ) en se
servant d'une file d'attente
SOIT
F UNE FILE DE ARB ;
A UN ARB ;
M UN POINTEUR VERS ARB ;
DEBUT
CREER_ARB( A , [ 23 , 45 , 65 , 55 , 33 , 3 ,
56 , 76 , 231 , 5 , 45 , 56 ]);
CREERFILE ( F ) ;
M := A ;
ENFILER ( F , A ) ;
TQ NON FILEVIDE ( F )
DEFILER ( F , M ) ;
ECRIRE ( INFO ( M ) ) ;
SI FG ( M ) # NIL
ENFILER ( F , FG ( M ) )
FSI ;
SI FD ( M ) # NIL :
ENFILER ( F , FD ( M ) )
FSI
FTQ
FIN
7. Remplit un vecteur de caractères à
partir de données lues une par une, réalise le tri, puis imprime le tableau trié.
SOIENT
V UN VECTEUR ( 10 ) DE CAR ;
I , J DES ENTIERS ;
Val , Temp DES CAR ;
DEBUT
POUR I := 1 , 10
LIRE ( Val ) ;
AFF_ELEMENT ( V [ I ] ,
Val )
FINPOUR ;
POUR I := 1 , 9
POUR J := 10 , I + 1 ,
- 1
SI ELEMENT ( V [ J - 1 ] ) > ELEMENT ( V [ J ] )
Temp := ELEMENT ( V [ J - 1 ] ) ;
AFF_ELEMENT ( V [ J - 1 ] , ELEMENT ( V [ J ] ) ) ;
AFF_ELEMENT ( V [ J ] , Temp )
FSI
FINPOUR
FINPOUR ;
ECRIRE ( 'Tri Termine' ) ;
POUR I := 1 , 10
ECRIRE ( ELEMENT ( V [
I ] ) )
FINPOUR ;
FIN
8. Lit globalement un vecteur à 2
dimensions puis l'imprime en un seul ordre d'écriture.
SOIT
V UN VECTEUR ( 3 , 2 ) DE CHAINES ;
DEBUT
LIRE ( V ) ;
ECRIRE ( V ) ;
FIN
9. Lit globalement une structure
complexe puis l'imprime en un seul ordre d'écriture.
SOIT
S2 UN (
VECTEUR ( 5 ) DE CHAINES ,
VECTEUR ( 5 ) DE ENTIERS ,
CHAINE
) ;
DEBUT
LIRE ( S2 ) ;
ECRIRE ( S2 ) ;
FIN