Enoncé précédent  Programme suivant

PROGRAMME 5 :  Les mots de la forme .........X....Y...........

Ecrire un programme qui détermine sur la machine caractères  tous les mots de la forme   ...X....Y... c'est à dire c'est à dire n caractères suivi de la lettre 'X' suivi de m caractères suivi de la lettre 'Y' suivi de p caractères. n ,m et p

On assimilera la machine caractère à un fichier TEXT PASCAL

Le programme

PROGRAM Xy (Fe, Fs);
  VAR N,M,P : INTEGER;
    C : CHAR; Mot : STRING[40];
    Fe, Fs : TEXT;
  BEGIN
    ASSIGN ( Fe , 'D_x_y.Pas' );
    ASSIGN ( Fs , 'R_x_y.Pas' );
    RESET(Fe);
    REWRITE(Fs);
    READ(Fe,C);
    WHILE ( C <> '#' ) DO
      BEGIN
        { Parcours des blancs }
        WHILE ( C = ' ' ) DO READ(Fe,C);

        { Recherche De 'X' S'il Existe
          Soit mot la chaîne de caractère avant le 'X'
          N sa longueur    }
        Mot := '';
        N := 0;
        WHILE (  (C<>' ') AND ( C <>'#') AND (C<>'X') ) DO
          BEGIN
            N  := N + 1;
            Mot := Mot + C;
            READ(Fe, C)
          END;

        IF C = 'X'
        THEN
          BEGIN
            Mot := Mot + C;
            M :=0;
            READ(Fe,C);
            IF C = 'Y' THEN BEGIN M:=1; Mot := Mot+C; READ(Fe,C) END;
            WHILE (   (C<>' ') AND ( C <>'#') AND (C<>'Y') ) DO
              BEGIN
                Mot := Mot + C;
                M := M+1;
                READ(Fe, C)
              END;

            IF C = 'Y'
            THEN
              BEGIN
                P := -1;
                WHILE ( (C<>' ') AND ( C<>'#') ) DO
                  BEGIN
                    Mot := Mot + C;
                    P := P + 1;
                    READ(Fe,C)
                  END;

                IF M*P*N <> 0
                THEN
                  WRITELN(Fs, ' > Mot = ', Mot, ' ( Avant : ', N:2,
                                ' Milieu : ', M:2, ' Après : ', P:2, ' )');
              END;
          END;
      END;
      CLOSE(Fs)
  END.

Les données

Contenu du fichier D_X_Y.Pas

abcXaaYde  abxXxaYy   bXYya aXYXYyyd XYy XY aXYyyyyyyaax XYyyzt #

Les résultats

Contenu du fichier R_X_Y.Pas

> Mot = abcXaaYde ( Avant :  3 Milieu :  2 AprŠs :  2 )
> Mot = abxXxaYy ( Avant :  3 Milieu :  2 AprŠs :  1 )
> Mot = aXYXYyyd ( Avant :  1 Milieu :  2 AprŠs :  3 )

* * * * *