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.