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