Corrigé C12. Enoncé

Exercice 1 : Vérification syntaxique de déclarations FORTRAN

Définissant d'abord les modules suivants :


Sauter-blancs (K) :

    ACTION Sauter-blancs (K)
    VAR     K : ENTIER
        C : CAR
    DEBUT
        TANTQUE C=' ' ET K <= 72 :
            LIRE(C)
            K := K + 1
        FINTANTQUE
    FIN

Erreur(I) :

    ACTION Erreur(I)
    VAR I : ENTIER
    DEBUT
        ECRIRE(Message(I))
        Sauter-ligne
    FIN

Message (I) :           

    ACTION Message(I)
    VAR I : ENTIER
    DEBUT
        SI I=1
            ECRIRE('Zone étiquette erronée')
        SINON
            SI I=2
                ECRIRE('Déclaration non identifiée')
            SINON
                SI I=3
                    ECRIRE('Erreur dans une déclaration')
                SINON
                    ECRIRE('Erreur dans un identificateur')
                FSI
            FSI     
        FSI
    FIN


L'algorithme est le suivant :

    ALGORITHME Fortran
    VAR    C, Mot     : CAR
        I, N, L, K     : ENTIER
        Err : BOOLEEN
    DEBUT
        LIRE(N)
        {Traiter N déclarations une à une}

        POUR I=1, N :
            {Zone étquette}
            K := 1 ; Err := FAUX
            TANTQUE K < 6 ET NON Err :
                LIRE(C)
                Err := (C # ' ')
                K := K + 1
            FINTANTQUE
            SI Err
                Erreur(1)
            SINON
                {Zone type }
                Sauter-blancs (K)
                SI K > 72
                    Erreur(2)
                SINON
                    {Former le type}
                    M := ''
                    TANTQUE C #' ' ET K<= 72 :
                        M := M + C
                        LIRE(C)
                        K := K + 1
                    FINTANTQUE
                    SI K > 72 :
                        Erreur(2)
                    SINON
                        SI Mot # 'INTEGER' ou Mot #'REAL' ou     Mot#'LOGICAL' :
                            Erreur(2)    
                            Err := VRAI
                        FSI
                        {Analyse des identificateurs}
                        TANTQUE K <72 ET NON Err :
                            Sauter-blancs(K)
                            SI K > 72 :
                                Erreur(3)
                                Err := Vrai
                            SINON
                                SI C < 'A' : Erreur(4) ;Err:=VRAI
                                SINON
                                    L := 1
                                    TANTQUE C#',' ET C#' ' ET NON Err ET K<= 72
                                        LIRE(C)
                                        L := L + 1
                                        Erreur := NON (C>='1')
                                        K := K + 1
                                    FINTANTQUE
                                SI K >72 OU L>8 OU Err:  

                                    Erreur(4)
                                 SINON
                                    Sauter-blancs (K)
                                    SI K<=72 ET C#',' :
                                         Erreur(3)
                                    FSI
                                FSI
                            FSI
                        FINTANTQUE
                    FSI
                FSI
            FINTANTQUE
        FINPOUR
    FIN

Exercice 2 : Course de ski

    ALGORITHME ski
    VAR     Mm, Ss, Cc          : ENTIER
        T1, T2, T3, T, I, N     : ENTIER
        Num1, Num2, Num3, Num     : CAR
        Nom1, Nom2, Nom3, Nom     : CAR
    DEBUT
        {Initialisation}
        LIRE(N)
        T1, T2, T3 := 360 000
        Num1, Num2, Num3 := ''
        Nom1, Nom2, Nom3 := ''
        POUR I=1, N
            LIRE(Num, Nom, Mm, Ss, Cc)
            ECRIRE(Num, Nom, Mm, Ss, Cc)
            T := (60*Mm + Ss)*100 + Cc
            {C'est le temps exprimé en Cc }
            SI T < T1 :
                T3 := T2;    Num3 := Num2;    Nom3 := Nom2
                T2 := T1;    Num2 := Num1;    Nom2 := Nom1
                T1 := T;    Num1 := Num ;    Nom1 := Nom
            SINON
                SI T < T2 :
                    T3 := T2;    Num3 := Num2;Nom3 := Nom2                    

                    T2 := T;    Num2 := Num1;Nom2 := Nom
                SINON
                    SI T < T3:
                        T3 := T;Num3 := Num;Nom3 := Nom
                    FSI
                FSI
            FSI
        FINPOUR

        {Ecriture des trois premiers}
        SS := T1 / 100
        Cc := T1 - 100*Ss
        Mm := Ss / 60
        SS := Ss - 60*Mm
        ECRIRE(Num1, Nom1, Mm, Ss, Cc)

        SS := T2 / 100
        Cc := T2 - 100*Ss
        Mm := Ss / 60
        SS := Ss - 60*Mm
        ECRIRE(Num2, Nom2, Mm, Ss, Cc)

        SS := T3 / 100
        Cc := T3 - 100*Ss
        Mm := Ss / 60
        SS := Ss - 60*Mm
        ECRIRE(Num3, Nom3, Mm, Ss, Cc)
    FIN

Programmation

Se référer au programme P7.