Corrigé C8. Enoncé
A) Recherche d'un mot donné
ALGORITHME Motd
VAR Motd, C, Mot : CAR
Trouv
: BOOLEEN
DEBUT
LIRE(Motd)
Trouv := FAUX
LIRE(C)
TANTQUE C # '.' ET NON Trouv :
SI C=' ' : LIRE(C)
SINON
Mot := ''
{Formation du mot }
TANTQUE C # '.' ET C # ' ' :
Mot := Mot + C
LIRE(C)
FINTANTQUE
SI Mot = Motd : Trouv := VRAI FSI
FSI
FINTANTQUE
ECRIRE(Trouv)
FIN
B) Impression des mots commençant par 'T' et se terminant par 'S'
ALGORITHME TS
VAR C, Mot, Dernier : CAR
DEBUT
LIRE(C)
TANTQUE C # '.' :
{Parcours des blancs}
TANTQUE c = ' ' :
LIRE(c) FINTANTQUE
SI C='T' :
Mot := ''
TANTQUE C # '.' ET C # ' ' :
Mot := Mot + C
Dernier := C
LIRE(C)
FINTANTQUE
SI Dernier = 'S' : ECRIRE(Mot) FSI
SINON
{Le premier caractère est différent de 'T'
Aller au prochain blanc}
TANTQUE C #' ' ET C #'.' :
LIRE(C)
FINTANTQUE
FSI
FINTANTQUE
FIN
Partie 2 : Actions composées
a1) Calcul de ( (AB +CD) / AD )A
Définissant d'abord la fonction puissance
FONCTION Puiss (A, B) : ENTIER
VAR A, B, : ENTIER
DEBUT
Puiss := 1
POUR I= 1, B
Puiss := Puiss * A
FINPOUR
FIN
L 'algorithme est le suivant :
ALGORITHME Calcul
VAR A, B, C, D : ENTIER
DEBUT
LIRE(A, B, C, D)
ECRIRE(Puiss(((Puiss(A, B) + Puiss(C, D)) /
Puiss(A, D)), A))
FIN
a2) Traduction en Pascal
PROGRAM Calcul;
VAR A, B, C, D : INTEGER;
FUNCTION Puiss ( A, B : INTEGER) : INTEGER;
VAR I : INTEGER;
BEGIN
P := 1;
FOR I := 1 TO B DO P := P * A END;
Puiss := P
END;
BEGIN
READ(A, B, C, D);
WRITE(PUISS(((Puiss(A, B) + Puiss(C, D)) /
Puiss(A, D)), A))
END.
b1) Fonctions F, G et le prédicat Egal
Fonction F(x)
FONCTION F(X) : ENTIER
VAR
X : ENTIER
DEBUT
F := X**5 + X**2 + 18
FIN
Fonction G(x)
FONCTION G(X) : ENTIER
VAR
X : ENTIER
DEBUT
F := X**7 + X**3 + X + 1
FIN
Prédicat Egal (A, B)
PREDICAT Egal(A, B)
VAR
A, B : ENTIER
DEBUT
Egal := (A = B )
FIN
b2) Solutions de l'équation F(x) = G(x) pour x dans l'intervalle
[-1000, +1000]
ALGORITHME Solutions
VAR
I : ENTIER
DEBUT
POUR I :=-1000, +1000
SI Egal(F(I), G(I) )
ECRIRE(I)
FSI
FINPOUR
FIN
b3) Traduction en PASCAL
PROGRAM Solutions ;
VAR
I : INTEGER ;
{ Fonction F(x) }
FUNCTION F(X) : INTEGER ;
VAR
X : INTEGER ;
BEGIN
F := X**5 + X**2 + 18
END ;
{ Fonction G(x) }
FUNCTION G(X) : INTEGER ;
VAR
X : INTEGER ;
BEGIN
F := X**7 + X**3 + X + 1
END ;
{ Prédicat Egal (A, B) }
FUNCTION Egal(A, B) : BOOLEAN ;
VAR
A, B : INTEGER ;
BEGIN
Egal := (A = B )
END ;
{Programme principal }
BEGIN
FOR I :=-1000 TO +1000 DO
IF Egal(F(I), G(I) )
THEN WRITE(I)
END.