Outils pour utilisateurs

Outils du site


developpement:delphi:toc

Pascal Objet

Dans cette page il est question du Pascal Objet, celui utilisé dans l'environnement de développement tel que Delphi de Borland.

Structure générale d'un programme

La première ligne d'un programme commence par une ligne primordiale, par exemple Program HelloWorld;, « HelloWorld » étant le titre du programme.

Voici les éléments, par ordre, qui composent un programme :

  1. Ligne du titre du programme → Program HelloWorld;
  2. Les utilisations → uses SysUtils;
  3. Les constantes globales → const
  4. Les variables globales → var
  5. Les procédures et fonctions globales → procedure ou function
  6. Programme principal → Débute par begin et termine par end.

Exemple de code

L'exemple ci-dessous n'est pas un exemple de Pascal Objet. Il s'agit plutôt d'un exemple de programme structuré.

Voici un exemple de programme pascal qui tourne en mode console. Notez que pour un programme console, il faut y trouver la ligne {$APPTYPE CONSOLE}, normalement ajouté automatiquement dans Delphi.

///////////////////////////////////////////////////////////////
// Auteur         : Pierre-Jean Jacques                      //
// Version 1.0 (finale)                                      //
//===========================================================//
// BUT: Ce programme compte des heures de consommation       //
//      internet.  Le programme produit une facture d'utili- //
//      sation et d'autres statistiques sur l'ensemble       //
//      des clients.                                         //
///////////////////////////////////////////////////////////////
 
program Projet2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 
const
  ligne40 = '----------------------------------------';
  ligne80 = '-------------------------------------------------------------------------------';
 
  MAX_HR  = 5000;       // la limite maximale d'heures
 
var
  i           : integer;  // compteur boucle for
  cChoix1,                // Choix de menus de l'utilisateur
  cChoix2     : char;
  CC          : integer;  // compteur de clients
  NO          : integer;  // numero du client (institutionnel et commercial)
  HR          : integer;  // nombre d'heures d'utilisation
  CT          : integer;  // Code de taxe
  TX          : real;     // Valeur de la taxe
  CR          : integer;  // Code rabais (utiliser CE ?)
  RB          : real;     // valeur du rabais
  PRB         : real;     // valeur du rabais en %
  MBrut,                  // Montant brut
  MNet,                   // Montant net (MBrut - tx et - rabais)
  MTaxe,                  // Montant de taxe
  MRab        : real;     // Montant rabais
  Cat1, Cat2,
  Cat3, Cat4  : Integer;  // Catégories
  PGHR,                   // le nb d'hr le >
  PPHR        : Integer;  // le nb d'hr le <
  PGHRC,                  // no de client ayant le > nb hr
  PPHRC       : Integer;  // no de client ayant le < nb hr
  PCTCat1,
  PCTCat2,
  PCTCat3,
  PCTCat4     : Real;     // Pourcentages des catégories
 
 
(* PROCEDURE LIRE_ENTIER *****************************************)
 { Un remplaçant pour "readln" qui permet l'entrée d'un entier
   au clavier. Cette procédure prend deux paramètres: un intervalle
   d'entiers acceptés en entrée et un paramètre variable qui est
   l'entier en entrée proprement dit. Si l'entier en entrée n'est pas
   dans les entiers autorisés, ou s'il s'agit d'un non-entier cette
   procédure retourne à la situation précédente et attend que
   l'utilisateur entre un entier correct. }
 
Procedure Lire_Entier(Min, Max: INTEGER; Var Nombre: INTEGER);
 
Var
  Controle   : Integer; {Pour stocker résultat diagnostic  E/S}
 
Begin
  Repeat
    {$I-}           	  { Détection d'erreur E/S désactivée }
    Readln(Nombre);       { Lit le caractère au clavier }
    {$I+}            	  { Détection d'erreur E/S réactivée }
    Controle := ioresult; { Diagnostic E/S }
 
    if (Controle <> 0) or not ((Nombre >= Min) and (Nombre <= Max)) then
      begin
        Write('  --> Mauvaise entree, recommencez : ');
      end;
  until (Controle = 0)		      { Type de l'entrée correct }
        and (Nombre >= Min)  { Nombre entre dans l'intervalle autorisé }
        and (Nombre <= Max)
end; {Fin de Lire_Entier}
 
 
// ============= PROCEDURE Afficher_Facture ===================================
// BUT : Affiche la facture d'un client
 
procedure Afficher_Facture;
begin
    for i := 1 to 30 do Writeln;   //écran vide
 
    if cChoix2 = 'I' then
      Writeln('-=-=-=-=- FACTURE INSTITUTIONNELLE (CLIENT # ',NO,') -=-=-=-=-')
    else
      Writeln('-=-=-=-=- FACTURE COMMERCIALE      (CLIENT # ',NO,') -=-=-=-=-');
 
    Writeln('       Consommation   : ',HR:8,' heure(s)');
    Writeln;
    Writeln('                 Prix : ',MBrut:8:2,' $');
    Writeln('                 Taxe : ',MTaxe:8:2,' $');
 
    if cChoix2 = 'I' then
      Writeln('               Rabais : ',MRab:8:2,' $')
    else
      Writeln('               Remise : ',MRab:8:2,' $');
 
    Writeln('                __________________');
    Writeln('                TOTAL : ',MNet:8:2,' $');
    Writeln('-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-');
end;
 
// ============= PROGRAMME PRINCIPAL ==========================================
 
begin
 
  // initialisation globale
  CC  := 0;
  Cat1 := 0;  Cat2 := 0;  Cat3 := 0;  Cat4 := 0;
 
  PGHRC := -1;
  PPHRC := MAX_HR + 1;
 
  repeat
    inc(CC);
 
    Writeln; Writeln;
    Writeln('UTILISATION D''UNE BANDE PASSANTE');
    Writeln(ligne80);
    Writeln;
 
    Writeln('Quel type de facture ?');
    Writeln('  (I)nstitutionelle');
    Writeln('  (C)ommerciale');
 
    Repeat
      Write('  Votre choix --> ');
      Readln(cChoix2);
    until cChoix2 in ['I','i','C','c'];
 
    cChoix2 := UpCase(cChoix2);
 
    if cChoix2 = 'I' then
    begin  //choix d'une facture institutionnelle
 
      Writeln(ligne40);
      Write('Entrez le numero du client (100-600) : ');
      Lire_Entier(100,600,NO);
 
      Writeln(ligne40);
      Write('Entrez le nombre d''heures d''utilisation (1-',MAX_HR,') : ');
      Lire_Entier(1,MAX_HR,HR);
 
      // ==== définir la taxe ====
      Writeln(ligne40);
      Writeln('Entrez le code de taxe');
      Writeln('  1 - Taxe de 15%');
      Writeln('  2 - Taxe de 17%');
      Writeln('  3 - Taxe de 20%');
      Write('  Votre choix --> ');
      Lire_Entier(1,3,CT);
      case CT of
        1 : TX := 0.15;
        2 : TX := 0.17;
        3 : TX := 0.20;
      end;
 
      // ==== définir le rabais ====
      Writeln(ligne40);
      Writeln('Entrez le code de rabais');
      Writeln('  1 - Rabais de 5%');
      Writeln('  2 - Pas de rabais');
      Write('  Votre choix --> ');
      Lire_Entier(1,2,CR);
      case CR of
        1 : RB := 0.05;
        2 : RB := 0;
      end;
 
      //Calcul de MBrut
      if HR > 150 then MBrut := ((HR-150) * 0.03) + (50 * 0.04) + (100 * 0.05)
      else if HR > 100 then MBrut := ((HR-100) * 0.04) + (100 * 0.05)
      else MBrut := HR * 0.05;
 
    end
    else
    begin  //choix d'une facture commerciale
 
      Writeln(ligne40);
      Write('Entrez le numero du client (601-800) : ');
      Lire_Entier(601,800,NO);
 
      Writeln(ligne40);
      Write('Entrez le nombre d''heures d''utilisation (1-10000) : ');
      Lire_Entier(1,10000,HR);
 
      // ==== définir la taxe ====
      Writeln(ligne40);
      Writeln('Entrez le code de taxe');
      Writeln('  1 - Taxe de 10%');
      Writeln('  2 - Taxe de 12%');
      Writeln('  3 - Taxe de 17%');
      Write('  Votre choix --> ');
      Lire_Entier(1,3,CT);
      case CT of
        1 : TX := 0.10;
        2 : TX := 0.12;
        3 : TX := 0.17;
      end;
 
      // ==== définir le rabais ====
      Writeln(ligne40);
      Writeln('Entrez le code de remise');
      Writeln('  1 - Rabais de 2%');
      Writeln('  2 - Rabais de 5%');
      Writeln('  3 - Rabais de 8%');
      Writeln('  4 - Rabais de 10%');
      Write('  Votre choix --> ');
      Lire_Entier(1,4,CR);
      case CR of
        1 : RB := 0.05;
        2 : RB := 0;
      end;
 
      //Calcul de MBrut
      if HR > 300 then MBrut := ((HR-150) * 0.01) + (100 * 0.02) + (100 * 0.03) + (100 * 0.04)
      else if HR > 200 then MBrut :=  ((HR-100) * 0.02) + (100 * 0.03) + (100 * 0.04)
      else if HR > 100 then MBrut :=  ((HR-100) * 0.03) + (100 * 0.04)
      else MBrut := HR * 0.04;
 
    end; //if
 
    //Calcul de Mnet (taxes et rabais)
    if MBrut > 10 then RB := RB + 0.01;  //rabais supp. de 1%
    MTaxe := MBrut * TX;                 //Taxe
    MNet := MBrut + MTaxe;
    MRab := MNet * RB;                   //Rabais
    MNet := MNet - MRab;
 
    //Catégories
    case HR of
      0..100   : Inc(Cat1);
      101..150 : Inc(Cat2);
      151..300 : Inc(Cat3);
      else       Inc(Cat4);
    end;
 
    if HR > PGHRC then
    begin
      PGHRC := HR;
      PGHR := NO;
    end;
 
    if HR < PPHRC then
    begin
      PPHRC := HR;
      PPHR := NO;
    end;
 
    Afficher_Facture;
 
    Writeln;
    Repeat
      Write('Voulez-vous continuer ? (O/n) ');
      Readln(cChoix1);
    until cChoix1 in ['O','o','N','n']
 
  until cChoix1 in ['N','n'];
 
  PCTCat1 := Cat1 / CC * 100;
  PCTCat2 := Cat2 / CC * 100;
  PCTCat3 := Cat3 / CC * 100;
  PCTCat4 := Cat4 / CC * 100;
 
  //Afficher les résultats DES clients
  Writeln;Writeln;
  Writeln('-=-=-=-=- STATISTIQUES SUR L''ENSEMBLE DES CLIENTS -=-=-=-=-');
  Writeln;
  Writeln('Distribution des clients dans les categories');
  Writeln('                              Categorie 1 : ',Cat1,' (',PCTCat1:3:1,'%)');
  Writeln('                              Categorie 2 : ',Cat2,' (',PCTCat2:3:1,'%)');
  Writeln('                              Categorie 3 : ',Cat3,' (',PCTCat3:3:1,'%)');
  Writeln('                              Categorie 4 : ',Cat4,' (',PCTCat4:3:1,'%)');
  Writeln;
  Writeln(' Le plus grand nombre d''heures va au client # ',PGHR);
  Writeln(' Le plus petit nombre d''heures va au client # ',PPHR);
  Writeln;
 
  Writeln;
  Writeln(ligne80);
  Write('Appuyez une touche pour terminer...');
  Readln;
 
end.
developpement/delphi/toc.txt · Dernière modification : 2022/02/02 00:42 de 127.0.0.1