Enoncé précédent  Programme suivant

PROGRAMME 2 : Etablissement d'une facture

En vue d'établir une facture, on a relevé sur chaque ligne d'un fichier TEXT Pascal les informations que l'on organisé comme suit :
col 1 à 5 : Numéro du produit ou désignation
col 10 à 14 : quantité ( entier)
col 20 à 28 : prix unitaire

La dernière ligne ne contient que des zéros.

Ecrire l'algorithme puis le Programme PASCAL qui édite la facture selon le Format suivant :

*---------------*----------*----------*----------*
*  Designation  * Quantite *    Pu    *    Total *
*---------------*----------*----------*----------*
*     ? ? ?     *    ?     *    ?     *   ?      *
*     ? ? ?     *    ?     *    ?     *   ?      *
*               *          *          *          *
*---------------*----------*----------*----------*
*                                                *
*                   Net A Payer  : ? ? ?         *
*                                                *
*---------------*----------*----------*----------*

Le programme

PROGRAM Facture;
  VAR Qte, Numero : INTEGER;
    Pu, Total, Cumul : REAL;
    Fdon, Fsort : TEXT;

  PROCEDURE Entete;
    BEGIN
      WRITELN(Fsort,'*---------------*----------*----------*----------*');
      WRITELN(Fsort,'*  D‚signation  * Quantit‚ *    Pu    *   Total  *');
      WRITELN(Fsort,'*---------------*----------*----------*----------*');
    END;

  PROCEDURE Netapayer ( Cumul : REAL);
    BEGIN
      WRITELN(Fsort,'*---------------*----------*----------*----------*');
      WRITELN(Fsort,'*                                                 *');
      WRITELN(Fsort,'*                   Net A Payer  : ',Cumul:8:2,'*':8);
      WRITELN(Fsort,'*                                                 *');
      WRITELN(Fsort,'*---------------*----------*----------*----------*');
    END;

  PROCEDURE Ligne ( Numero, Qte :INTEGER;Pu,Total : REAL);
    BEGIN
      WRITELN(Fsort,'*',' ':5,Numero:5,' ':5,'*', ' ':3,Qte:4,' ':3,
                    '* ', Pu:8:2,' * ',Total:8:2,' *');
    END;

  { Initialisation}
  BEGIN
    ASSIGN(Fdon,'D_factur.Pas');
    ASSIGN(Fsort,'R_factur.Pas');
    RESET(Fdon);
    REWRITE(Fsort);
    Entete;
    Cumul := 0;
    READLN( Fdon, Numero, Qte, Pu);
    WHILE Numero <> 0 DO
      BEGIN
        Total := Pu * Qte;
        Ligne(Numero, Qte, Pu, Total);
        Cumul := Cumul + Total;
        READLN( Fdon, Numero, Qte, Pu);
      END;
    Netapayer(Cumul);
    CLOSE(Fsort)
  END.

Les données

Contenu du fichier D_Factur.Pas :

12654    24         35.3
785      31        67.12
12       18        27
00       000       0000

Les résultats

Contenu du fichier R_Factur.Pas

*---------------*----------*----------*----------*
*  Désignation  * Quantité *    Pu    *   Total  *
*---------------*----------*----------*----------*
*     12654     *     24   *    35.30 *   847.20 *
*       785     *     31   *    67.12 *  2080.72 *
*        12     *     18   *    27.00 *   486.00 *
*---------------*----------*----------*----------*
*                                                *
*                  Net A Payer  :  3413.92       *
*                                                *
*---------------*----------*----------*----------*