Dans cette page il est question du Pascal Objet, celui utilisé dans l'environnement de développement tel que Delphi de Borland.
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 :
Program HelloWorld;
uses SysUtils;
const
var
procedure
ou function
begin
et termine par end.
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.