Enoncé précédent Programme suivant

PROGRAMME 4 : Les mots de la forme .........XY...........

Ecrire un programme qui détermine sur la machine caractères tous les mots de la forme   .....XY...... c'est à dire n caractères suivi de la chaîne 'XY' suivi de m caractères.

n et m sont des entiers quelconques et strictement supérieurs à 0.

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

Le programme


PROGRAM _ XY_  (Fe, Fs);
  VAR N,M : INTEGER;
    C, Sauv : CHAR; Mot : STRING[40];
    Mememot : BOOLEAN;
    Fe, Fs : TEXT;
  BEGIN
    ASSIGN ( Fe, 'D_xy.Pas' );
    ASSIGN ( Fs, 'R_xy.Pas' );
    RESET(Fe);
    REWRITE(Fs);
    READ(Fe,C);
    Mememot := FALSE;

    WHILE ( C <> '#' ) DO
      BEGIN
        { Parcours des blancs }
        WHILE ( C = ' ' ) DO READ(Fe,C);
          IF NOT Mememot
          THEN
            BEGIN
              N := 0;
              Mot := '';
            END;

          { Recherche de 'Y' s'il existe
            Soit Mot la chaîne de caractères avant le 'Y'
            N sa longueur
            Sauv le caractère qui précède 'Y' }
          WHILE (  (C<>' ') AND ( C <>'#') AND (C<>'Y') ) DO
            BEGIN
              N  := N + 1;
              Mot := Mot + C;
              Sauv := C;
              READ(Fe, C)
            END;
          IF C = 'Y'
          THEN
            IF (Sauv = 'X') AND ( N > 1)
            { Au moins un caractère avant le 'X' }
            THEN
              BEGIN
                { Rechercher le prochain blanc en comptant le nombre
                  de caractères après le Y, soit M
                  On continue ... former le mot}
                M := - 1;
                WHILE ( (C<>' ') AND ( C<>'#') ) DO
                  BEGIN
                    Mot := Mot + C;
                    M := M + 1;
                    READ(Fe,C)
                  END;
                IF    M > 0
                THEN
                  WRITELN(Fs, ' > Mot = ', Mot,
                              '   ( Avant : ', N-1 : 2,' , ',
                              ' AprŠs : ',  M:2, ' )' );
                Mememot := FALSE;
              END
            ELSE
              { Le caractère qui précède 'Y' est différent de 'X'
                ou il n'y a pas de caractère avant le 'X'
                ====>   Rechercher prochain Y  dans le même mot }
              BEGIN
                Mot := Mot + C;
                READ(Fe, C);
                IF C <>' '
                THEN Mememot := TRUE;
                N := N +1
              END
          ELSE Mememot := FALSE;
      END;
      CLOSE(Fs)
   END.

Les données

Contenu du fichier D_XY.Pas

abbbbbbbbXYynnnnnn     aXYxxxxxxx        annnnyssssssssXYyyyyyyy XY     aaaaaaayaaaaaaayaaaaaaaaXYaaaa   bbbbbbbXY  XYzzzz XYXYXY #

Les résultats

Contenu du fichier R_XY.Pas

> Mot = abbbbbbbbXYynnnnnn  ( Avant :  9 ,   Après :  7 )
> Mot = aXYxxxxxxx  ( Avant :  1 ,  Après :  7 )
> Mot = annnnyssssssssXYyyyyyyy  ( Avant : 14 ,  Après :  7 )
> Mot = aaaaaaayaaaaaaayaaaaaaaaXYaaaa  ( Avant : 24 ,  Après :  4 )
> Mot = XYXYXY  ( Avant :  2 ,  Après :  2 )