Corrigé 42. Enoncé
Listes en étoiles
Soient Etoile un tableau ( 10 ) de Listes de chaînes de caractères.
Initialisation
POUR I := 1 , 10
Aff_element ( Etoile [ I ] , Nil )
FPOUR
Création
Lire ( N )
POUR I := 1 , N
Ch := ALEACHAINE ( ALEANOMBRE ( 10 ) + 1 )
Allouer ( Q )
Aff_val ( Q , Ch )
Long := Longchaine ( Ch )
SI Element ( Etoile [ Long ] ) = Nil
Aff_adr ( Q , Nil )
SINON
Aff_adr ( Q , Element (
Etoile [ Longchaine ( Ch ) ] ) )
FSI
Aff_element ( Etoile [ Longchaine ( Ch ) ] , Q
)
FPOUR
Trier
POUR I := 1 , 10 L := Element ( Etoile [ I ] )
Der := Nil
TANTQUE Der <> L
P := L
TANTQUE Suivant ( P )
<> Der
SI Valeur ( P ) > Valeur ( Suivant ( P ) )
Aux := Valeur ( P )
Aff_val ( P , Valeur ( Suivant ( P ) ) )
Aff_val ( Suivant ( P ) , Aux )
FSI
P := Suivant ( P )
FTANTQUE
Der := P
FTANTQUE
FPOUR
Imprimer
POUR I := 1 , 10 Ecrire
( '******** Longueur ' , I )
Q := Element ( Etoile [ I ] )
TANTQUE Q <> Nil
Ecrire ( Valeur ( Q ) )
Q := Suivant ( Q )
FTANTQUE
FINPOUR
Requête x
Lire ( Ch ) { élément à rechercher }
L := Element ( Etoile [ Longchaine ( Ch ) ] )
Arret := FAUX
Compt := 0
TANTQUE ( L <> Nil ) Et NON Arret
SI Ch = Valeur ( L )
Compt := Compt + 1
L := Suivant ( L )
SINON
SI Valeur ( L ) > Ch
Arret := VRAI
SINON
L := Suivant ( L )
FSI
FSI
FTANTQUE
Ecrire ( 'Liste ' , Longchaine ( Ch ) , ' compte= ' , Compt )
Requête x+
Lire ( Ch ) { Ch c'est x }
POUR I := Longchaine ( Ch ) , 10
L := Element ( Etoile [ I ] )
Compt := 0
Arret := FAUX
TANTQUE ( L <> Nil ) Et NON Arret
{recherche dans un mot}
Mot := Valeur ( L )
SI Caract ( Ch , 1 ) =
Caract ( Mot , 1 )
SI Longchaine ( Mot ) >= Longchaine ( Ch )
{former le sous-mot}
Smot := ''
POUR J := 1 , Longchaine ( Ch )
Smot := Smot + Caract ( Mot , J )
FPOUR
SI(Ch=Smot) Et ( Longchaine ( Ch ) < Longchaine ( Mot ) )
Compt := Compt + 1
FSI
FSI
L := Suivant ( L )
SINON
SI Caract ( Ch , 1 ) < Caract ( Mot , 1 ) :
Arret := VRAI
SINON
L := Suivant ( L )
FSI
FSI
FTANTQUE
SI Compt <> 0
Ecrire ( 'Liste ' , I ,
' compte= ' , Compt )
FSI
FPOUR
Requête +x
Lire ( Ch )
POUR I := Longchaine ( Ch ) , 10
L := Element ( Etoile [ I ] )
Compt := 0
TANTQUE L <> Nil
{recherche dans un mot}
Mot := Valeur ( L )
K := 1
Arret := FAUX
TANTQUE NON Arret
Trouv := FAUX
TANTQUE NON Trouv Et ( K <= Longchaine ( Mot ) )
SI Caract ( Ch , 1 ) = Caract ( Mot , K )
Trouv := VRAI
SINON
K := K + 1
FSI
FTANTQUE
SI Trouv
SI ( Longchaine ( Mot ) - K + 1 ) < Longchaine ( Ch )
Arret := VRAI
SINON
{former le sous-mot}
Smot := ''
POUR J := K , K + Longchaine ( Ch ) - 1
Smot := Smot + Caract ( Mot , J )
FPOUR
SI(Ch=Smot)Et(K<>1 )Et (K+Longchaine(Ch)-1=Longchaine ( Mot ) )
Compt := Compt + 1 ; Arret := VRAI
SINON
K := K + 1
FSI
FSI
SINON
Arret := VRAI
FSI
FTANTQUE
L := Suivant ( L )
FTANTQUE
SI Compt <> 0
Ecrire ( 'Liste ' , I ,
' compte= ' , Compt )
FSI
FPOUR
Requête *x*
Lire ( Ch )
POUR I := Longchaine ( Ch ) , 10
L := Element ( Etoile [ I ] )
Compt := 0
TANTQUE L <> Nil
{recherche dans un mot}
Mot := Valeur ( L )
K := 1 ; Arret := FAUX
TANTQUE NON Arret
Trouv := FAUX
TANTQUE NON Trouv Et ( K <= Longchaine ( Mot ) )
SI Caract ( Ch , 1 ) = Caract ( Mot , K )
Trouv := VRAI
SINON
K := K + 1
FSI
FTANTQUE
SI Trouv
SI ( Longchaine ( Mot ) - K + 1 ) < Longchaine ( Ch )
Arret := VRAI
SINON
{former le sous-mot}
Smot := ''
POUR J := K , K + Longchaine ( Ch ) - 1
Smot := Smot + Caract ( Mot , J )
FPOUR
SI Ch = Smot
Compt := Compt + 1
Arret := VRAI
SINON
K := K + 1
FSI
FSI
SINON
Arret := VRAI
FSI
FTANTQUE
L := Suivant ( L )
FTANTQUE
SI Compt <> 0
Ecrire ( 'Liste ' , I ,
' compte= ' , Compt )
FSI
FPOUR