PROGRAMME 6 : Analyse des constantes 'virgule flottante'
Soit sur le ruban de la machine caractères une
suite de constantes réelles représentées en Virgule flottante. La suite est terminée
par le caractères '$'. Les constantes sont séparées par une combinaison de blancs et de
virgules. Ecrire un algorithme qui donne pour chaque constante correcte ses attributs w et
d. On imprimera le nombre de constantes incorrectes. Une constante en virgule flottante a
la forme suivante : [+/-] [chchch...] [.][chchch....] E [+/-]chch Les crochets désignent les parties facultatives, le symbole / désigne ou. |
Le programme
PROGRAM Virguleflottante;
VAR Mot : STRING[30];
Fe, Fs : TEXT;
C : CHAR; W, D : INTEGER;
FUNCTION Chiffre( C : CHAR) : BOOLEAN;
BEGIN
IF (C >='0' ) AND ( C <= '9')
THEN Chiffre := TRUE
ELSE Chiffre := FALSE;
END;
PROCEDURE Erreur;
BEGIN
WHILE (C <>' ') AND ( C <>'$' )
DO
BEGIN
Mot := Mot + C;
READ(Fe,C);
END;
WRITELN(Fs, Mot : 35, ' Constante erronée' : 30);
END;
BEGIN
ASSIGN(Fe, 'D_vf.Pas');
ASSIGN(Fs, 'R_vf.Pas');
RESET(Fe);
REWRITE(Fs);
READ(Fe, C);
WHILE C <> '$' DO
BEGIN
Mot := '';
W := 0; D := 0;
WHILE C=' ' DO
READ(Fe,C);
IF (C = '+') OR( C ='-')
THEN
BEGIN
W := 1; Mot
:= Mot + C; READ(Fe,C);
END;
WHILE ( (
C<>'.') AND (C<>'E') AND ( C<> ' ') AND (C<>'$')
AND ( Chiffre(C) ) ) DO
BEGIN
W := W + 1;
Mot := Mot + C;
READ(Fe, C)
END;
IF C = '.'
THEN
BEGIN
W := W + 1;
Mot := Mot + C;
READ(Fe,C);
WHILE ( ( C<>' ')
AND ( C <>'$') AND (Chiffre(C)) AND
( C<>'E') ) DO
BEGIN
W := W + 1; D := D + 1; Mot := Mot + C;
READ(Fe,C)
END;
END;
IF C = 'E'
THEN
BEGIN
Mot := Mot + C;
W := W + 1;
READ(Fe, C);
IF (C='+') OR (C='-')
THEN
BEGIN
W := W +1; Mot := Mot + C; READ(Fe, C)
END;
IF Chiffre(C)
THEN
BEGIN
W := W + 1; Mot := Mot + C; READ(Fe, C);
IF Chiffre(C)
THEN
BEGIN
W := W + 1;
Mot := Mot + C;
READ(Fe,C);
IF( C =' ') OR( C='$')
THEN
WRITELN (Fs, Mot: 35, 'W=':10 ,W:2, ' D=':10, D:2);
END
ELSE Erreur
END
ELSE Erreur
END
ELSE
IF C <> '$' THEN Erreur
END;
CLOSE(Fs);
END.
Les données
Contenu du fichier D_Vf.Pas
123.. 234.543E02 12E21
23.6754E-23 EEE 231E.23 E+12
1.1E-11 .345E04 -.23E00 34ADSE $
Les résultats
Contenu du fichier R_Vf.Pas
123.. Constante erronée
234.543E02 W=10 D= 3
12E21 W= 5
D= 0
23.6754E-23 W=11 D= 4
EEE Constante erronée
231E.23 Constante erronée
E+12 W= 4
D= 0
1.1E-11 W= 7 D= 1
.345E04 W= 7 D= 3
-.23E00 W= 7 D= 2
34ADSE Constante erronée