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.