Corrigé C23. Enoncé
Exercice 1 : Impression d'un V en PASCAL.
PROCEDURE ImprimerV (C :CHAR ; X : INTEGER) ;
VAR I : INTEGER ;
BEGIN
WHILE (X>1) DO
BEGIN
WRITE(C) ;
FOR I :=1 TO X DO WRITE(' ') ;
WRITELN(C) ;
X := X-2
END
END ;
Exercice 2 : Mots de la forme ...XY....., mots de la forme
.....X....Y......
Les mots de la forme ...XY....., c'est a dire n caractères, suivi de la
chaîne 'XY', suivi de m caractères. n et m > 0
ALGORITHME Xy VAR
N,M : ENTIER
C, Mot : CAR
Trouv : BOOLEEN
DEBUT
LIRE(C)
TANTQUE ( C <> '#' )
{ Parcours des blancs }
TANTQUE ( C
= ' ' ) LIRE(C) FINTANTQUE
N := 0
Mot := ''
Trouv := FAUX
TANTQUE (C<>' ')
ET ( C <>'#') ET non Trouv
N := N + 1;
Mot := Mot + C ;
LIRE(C)
FINTANTQUE
SI C = 'X'
Mot := Mot + C
LIRE(C)
SI N > 0
Trouv := (C='Y')
SINON
N := N+1
FSI
FSI
FINTANTQUE
SI Trouv
M := - 1;
TANTQUE ( (C<>'
') ET ( C<>'#') )
Mot := Mot + C;
M := M + 1;
LIRE(C)
FINTANTQUE
SI M > 0
ECRIRE( Mot);
FSI
FSI
FIN
Les mots de la forme ...X....Y....., c'est a dire n caractères, suivi de X
suivi de m caractères, suivi de Y suivi de p caractères. n ET m > 0
ALGORITHME Xy
VAR N,M,P : ENTIER
C, Mot : CAR
DEBUT
LIRE(C)
TANTQUE ( C <> '#' )
{ Parcours des blancs }
TANTQUE ( C = ' ' )
LIRE(C) FINTANTQUE
{ Recherche De 'X' s'il
existe. Soit mot la chaîne de caractère avant le 'X'
N sa longueur
}
Mot := ''
N := 0
TANTQUE ( (C<>'
') ET ( C <>'#') ET (C<>'X') )
N := N + 1
Mot := Mot + C
LIRE( C)
FINTANTQUE
SI C = 'X'
Mot := Mot + C
M :=0
LIRE(C)
SI C = 'Y' :
M:=1 Mot := Mot+C
LIRE(C)
FSI
{Rechercher Y }
TANTQUE (C<>' ') ET ( C <>'#') ET (C<>'Y')
Mot := Mot + C
M := M+1
LIRE( C)
FINTANTQUE
SI C = 'Y'
P := -1
TANTQUE ( (C<>' ') ET ( C<>'#') )
Mot := Mot + C
P := P + 1
LIRE(C)
FINTANTQUE
SI M*P*N <> 0
ECRIRE(Mot, N, M, P)
FSI
FSI
FSI
FINTANTQUE
FIN
Exercice 3 : Variétés
1) Modules nécessaires
Prédicat Carre (A, B, C)
En Entrée : 3 entiers A, B et C
En sortie : VRAI si A2 = B + C, FAUX sinon
Action Placer (A, B, C, D)
En entrée : 4 entiers A, B, C et D
En sortie : Les 3 plus grands parmi les 4 rangés dans B, C et D tel que B < C < D
Prédicat Estilfact(A)
En entrée : un entier A
En sortie : VRAI s'il existe un entier X tel que X ! = A , FAUX sinon
ALGORITHME Principal
VAR I,N1, N2, N3, Dernier : ENTIER
Exist : BOOLEEN
DEBUT
LIRE(N) { Le nombre d'éléments}
LIRE(N1, N2, N3)
{Ordonner N1, N2, N3 dans Max1, Max2, Max3}
Max1 := N1
SI N2 > Max1 : Max2 := N2
SINON Max2 := Max1 ; Max1 := N2 FSI
SI N3 > Max2 : Max3 := N3
SINON
SI N3 > Max1 : Max3
:= Max2 ; Max2 := N3
SINON
Max3 := Max2 ; Max2:=Max1 ; Max1 := N3 FSI
FSI
SI Estilfact(N1) ECRIRE(N1) FSI
SI Estilfact(N2) ECRIRE(N2) FSI
SI Estilfact(N3) ECRIRE(N3) FSI
Exist := FAUX
SI Carre(N3, N1, N2) : Exist := VRAI ; Dernier
: N3 FSI
N1 := N2
N2 := N3
POUR I :=1 , N
LIRE(Nombre)
SI Carre(Nbr, N1, N2)
Exist := VRAI
Dernier := Nbr
FSI
Placer (Nbr, max1,
Max2, Max3)
SI Estilfact(nbr) :
ECRIRE(Nbr) FSI
N1 := N2
N2 := Nbr
FINPOUR
ECRIRE(N1, N2, N3)
SI Exist ECRIRE5Dernier) FSI
FIN
Ecriture des modules
a)
PREDICAT Carre (A, B, C)
VAR A, B, C : ENTIER
DEBUT
Carre := ( A2 = B + C)
FIN
b) ACTION Placer (A, Ma1, Max2, Max3)
VAR A, Ma1, Max2, Max3 : ENTIER
DEBUT
SI A > Max3
Max1 := Max2
Max2 := Max3
Max3 := A
SINON
SI A > Max2
Max1 := Max2
Max2 := A
SINON
SI A > Max1
Max1 := A
FSI
FSI
FSI
FIN
c) PREDICAT Estilfact(N)
VAR N , I, F : ENTIER
DEBUT
F := 1
I := 1
TANTQUE F < N
F := F * I
I := I + 1
FINTANTQUE
Estilfact := ( F= N)
FIN