34

Cours de Turbo PascalVRAIok_6

Embed Size (px)

DESCRIPTION

turbo

Citation preview

  • I HISTORIQUE ET PRESENTATION

    Le langage pascal a t cr en 1969 l'cole polytechnique de ZURICH par NICKLAUS WIRTH etdvelopp en France par BLAISE PASCAL. Il a t conu pour permettre d'enseigner laprogrammation comme une science. Ce langage est la base d'une nouvelle mthode de programmation, la programmation structure, a eu un vritable succs dans l'enseignement, devenant ainsi un langagede dveloppement le plus utilis dans ce domaine.

    En 1975, PASCAL a trs largement pntr le monde de la recherche et des universits et taccept dans le monde industriel grce :

    De bonnes relations entre les universits et les industries (aux USA !) Les caractristiques propres PASCAL (simplicit, fiabilit) L'effort du DoD (dpartement de la dfense amricaine) , qui Ds 1975, a cre un groupe de

    travail (High Order Langage Working Group) charg de apporter des ameliorations celangage. Ce qui lui a permis de devenir lun des langages les plus utiliss en programmation

    professionnelle sur micro-ordinateur.

    Le langage PASCAL permet de manipuler tout type de variable, sauf en ce qui concerne les accsdirects la mmoire (pointeurs) pour lesquels il est un peu fastidieux. Il impose une structure deprogramme cohrente, avec la dfinition systmatique des variables et des types, ce qui permet d'avoirun contrle maximum l'excution et garder une bonne transposition algorithme/programme.

    Le code est relativement compact mais permet une trs bonne lisibilit, donc une maintenancegnralement assez aise. Enfin, la structuration permet de dcouper le programme en units de travail,chacune ayant ses propres variables et types. La conception descendante de la structure du programmepermet ce dcoupage et augmente la logique de la structure et la lisibilit.

    La rapidit d'excution d'un programme crit en Pascal est trs bonne, et la taille des excutables estrelativement compacte, bien que cet aspect soit de plus en plus anodin au regard des applicationsWindows o la taille du programme est conditionne par les "ressources", c'est--dire les images etautres icnes.

    Le pascal est un langage de programmation compil. Il ralise la compilation et permet l'excution desprogrammes. Son essor a suivi celle de la micro-informatique, grce notamment Philippe Khan,Franais bien connu, fondateur de la socit BORLAND qui le premier a commercialis uncompilateur performant et fiable celui de Turbo Pascal.

  • II PRINCIPE

    Comme tout programme le langage pascal applique des oprations des informations. Leprogrammeur doit :

    prvoir de l'espace mmoire pour ces informations : partie dclarative ; permettre de recevoir les informations : gestion des entres ; spcifier les oprations effectuer : diffrentes instructions ; permettre de fournir des rsultats l'utilisateur : gestion des sorties.

    III. GRAMMAIRE DU LANGAGE ET RECOMMANDATIONS

    III.1 RECOMMANDATIONS

    Un nom de programme respecte les rgles lies aux identificateurs (cf. plus bas) et ne peut pascontenir le caractre point ".".

    Un programme principal dbute toujours par BEGIN et se termine par END. (avec un point).Alors qu'un sous-programme (ou fonction, procdure, bloc conditionnel...) commence lui aussipar Begin mais se termine par End; (sans point mais avec un point-virgule).

    Chaque instruction doit se terminer avec un point-virgule, sauf le End prcdant le mot clElse dans la structure conditionnelle alternative.

    Il est permis de mettre plusieurs instructions les unes la suite des autres sur une mme lignedu fichier source mais il est recommand de n'en crire qu'une par ligne : c'est plus clair et encas de bogue, on s'y retrouve plus aisment. De plus, s'il vous arrive d'crire une ligne troplongue, le compilateur vous le signifiera avec l'erreur Error 11 : Line too long. Il vous faudraalors effectuer des retours la ligne.

    En Turbo Pascal, les entiers admissibles sont compris entre -32768 et +32767. Tous les compilateurs Pascal possdent une constante prdclare MAXINT, qui donne le plus

    grand entier admissible. Les rels doivent tre compris en Turbo Pascal entre + et -1.7E37 (c'est--dire 1,7 fois 10

    puissance 37), avec 11 chiffres significatifs. La virgule dcimale est toujours reprsente par unpoint en informatique.

    Un identificateur (tout nom que vous choisissez : variable, programme...) peut tre form delettres (A Z), de chiffres et (pas sur toutes les versions de Pascal) du signe _ (soulign). TurboPascal accepte des noms de 127 caractres maximum, certains versions sont plus limits (31caractres par ex). Le premier caractre doit tre une lettre. Par exemple, valeur1 ouprem_valeur sont possibles mais pas 1ere_valeur.

  • En Pascal, les minuscules sont traites comme des majuscules (surface et SURFACE dsignentla mme case mmoire). Les majuscules ne sont utilises que pour faire ressortir les motsimportants. Les accents et autres ne sont pas autoriss (var diamtre : rel est interdit cause de l'accent).

    Un blanc dans un identificateur est galement interdit (utilisez _ pour sparer des mots dans un mme identificateur). Un nom de programme respecte les rgles lies aux identificateurs (cf. plus bas) et ne peut pas

    contenir le caractre point ".".

    Toute variable utilise dans un programme doit tre dclare. Les commentaires peuvent tres entre accolades... {} ou (*..*).

    III.2 MOTS RESERVES

    AND - ARRAY ASM-BEGIN- CASE - CONST CONSTRUCTOR- DESTRUCTOR - DIV - DO DOWNTO- ELSE

    - END EXPORTS- FILE - FOR FUNCTION- GOTO- IF - IMPLEMENTATION - IN - INHERITED - INLINE

    INTERFACE- LABEL LIBRARY- MOD- NIL NOT- OBJECT - OF OR- PACKED - PROCEDURE - PROGRAM-RECORD - REPEAT SET - SHL - SHR STRING-THEN - TO TYPE-UNIT - UNTIL USES- VAR- WHILE

    WITH- XOR

    III.3 STRUCTURE GENERALE

    La structure gnrale dun programme en pascal est la suivante :

    (*en tete du programme*) ;La forme canonique de l'en-tte d'un programme est : Program nomprogramme (paramtres); danslequel paramtres est la liste des paramtres du programme. Ces paramtres sont les noms des fichiersde type TXT externes au programme, qui peuvent lui tre passs par la ligne de commande. Deux deces fichiers sont prdfinis : Input et Output, pour respectivement la lecture des donnes et leur sortie,qui sont par dfaut le clavier et l'cran. Avec les nouveaux compilateurs, lon peut s'abstenir dedclarer ces paramtres dans l'en-tte. Au lieu de faire Program nomprogramme (input, output); onpeut donc se permettre de faire Program nomprogramme. Mais attention, les anciens compilateursn'acceptent pas cette criture.

  • (*chargement des units*) ;

    Bibliothques de procdures et de fonctions.

    Les procdures et fonctions utilises couramment peuvent tre regroupes en bibliothques appelesunits en Turbo Pascal. Dans ce cas on dclare l'utilisation des bibliothques dans la partiedclarations du programme en utilisant le mot rserv Uses suivi des noms des units.

    Le Turbo Pascal fournit un certain nombre d'units prtes l'emploi:

    Unit System : Elle contient les procdures et fonctions de base. C'est la seule unit qui n'a pasbesoin d'tre dclare et qui est toujours utilisable.

    Unit Crt : Permet la gestion de l'cran en mode texte, la gestion du clavier, la gestion du son. Unit WinCRT : Elle permet d'excuter un programme console non pas dans une console

    classique mais dans une vraie fentre Windows qui mule le fonctionnement d'une console. Enutilisant WinCRT au lieu de CRT, lon cre donc un programme Windows au lieu d'unprogramme "DOS".

    Unit Dos : Permet la gestion des fonctions fournies par le DOS. Unit Lst : Permet la gestion de l'imprimante. Unit Graph : Permet la gestion de l'cran en mode graphique.

    Procdures et fonctions de l'unit System

    L'unit System contient toutes les fonctions et procdures standards et d'entres/sorties de TurboPascal (Write et Read). Elle contient aussi les dclarations de constantes et variables utiles :

    - Procdures et fonctions de transfert

    Elles transforment des donnes d'un type en un autre.

    CHR CHR(n):Char; renvoie le caractre de code ASCII n.

    ORD ORD (ident):LongInt; renvoie la position de ident dans son type;par exemple, ord('A') renvoie 65 car A est le 65me caractre de la table ASCII.

    ROUND ROUND(r) : LongInt; renvoie la valeur arrondie du rel r.

    STR STR(nombre[:i[:j]], chaine); crit nombre (entier ou rel) dans chaine de type String avec ventuellement un total de icaractres dont j aprs la virgule.

    TRUNC TRUNC(r):LongInt; renvoie la partie entire du rel r.

    VAL Val(chaine,nombre,coderreur); transforme chaine de type String en nombre (entier ou rel) et place un code dans lavariable coderreur de type Integer; coderreur=0 lorsque l'interprtation a russi.

  • - Fonctions mathmatiques

    Ces fonctions oprent sur les nombres du type Real et renvoient des valeurs de type Real. (N estinclus dans R, tout entier est un rel)

    ABS ABS(r): Real; renvoie la valeur absolue de r.

    ARCTAN ARCTAN(r):Real; renvoie l'arc tangente de r.

    COS COS(r):REAL; renvoie le cosinus de r renvoie le cosinus de r.

    EXP EXP(r):Real; renvoie l'exponentielle de r.

    FRAC FRAC(r):Real; renvoie la partie fractionnaire de r.

    INT INT(r):Real; renvoie la partie entire de r.

    LN LN(r):Real; renvoie le logarithme nprien de r.

    PI PI; renvoie la valeur du nombre pi.

    SIN SIN(r):Real; renvoie le sinus de r.

    SQR SQR(r):Real; renvoie le carr de r.

    SQRT SQRT(r):Real; renvoie la racine carre de r.

    - Procdures et fonctions sur les chanes de caractres

    Elles permettent les manipulations de chanes de caractres.

    CONCAT CONCAT (chaine1,chaine2,[,...]):String; quivalente l'addition des chaines de caractres.

    COPY COPY(chaine,position,nombrecar):String; renvoie une chane forme par les nombrecarcaractres situs partir de position dans chaine.

    DELETE DELETE (chaine,position,nombrecar); supprime dans chaine nombrecar caractres situs partir de position.

    INSERT INSERT(chaine1,chaine2,position); insre chaine1 dans chaine2 partir de position.

    LENGTH LENGTH(chaine):Byte; renvoie la longueur de chaine.

    POS POS(chaine1,chaine2):Byte; renvoie la position de la premire occurence dechaine1 dans chaine2 et 0 si chaine1 n'a pas ttrouve.

    UPCASE UPCASE(c):Char; renvoie la majuscule du caractre c.

  • - Procdures et fonctions diverses

    DEC DEC(nomb1[,nomb2]); excute nomb1:=nomb1-nomb2 o nomb1 et nomb2 sont desentiers; la valeur par dfaut de nomb2 est 1.

    INC INC(nomb1[,nomb2]); excute nomb1:=nomb1+nomb2 o nomb1 et nomb2 sont desentiers; la valeur par dfaut de nomb2 est 1.

    PARAMCOUNT PARAMCOUNT:Word; renvoie le nombre de paramtres spcifis l'appel du programme.

    PARAMSTR PARAMSTR (nomb):String; renvoie le paramtre numro nomb spcifi l'appel du programme.

    EXIT EXIT; permet de sortir d'une procdure ou d'une fonction avant sa fin.

    HALT HALT(n); permet de quitter le programme en envoyant un ErrorLevel gal nau DOS.

    RANDOM RANDOM[(nomb)]:Integer ouReal;

    renvoie un nombre alatoire entier entre 0 et nomb; si nomb n'estpas prcis on obtient un nombre alatoire dcimal entre 0 et 1.

    RANDOMIZE RANDOMIZE; initialise le gnrateur de nombres alatoires.

    Programmes et units

    Un fichier source *.PAS de Turbo Pascal peut reprsenter un programme ou une unit (bibliothque deprocdures et de fonctions). Lors de la compilation un programme produira un fichier *.EXE qui seradonc directement excutable sous Dos alors qu'une unit produira un fichier *.TPU non excutablemais qui sera utilis pendant la compilation d'un programme.

    (*partie dclarative*)

    { dclaration ventuelle des constantes } ;

    Les constantes sont destines recevoir des informations non modifiables. Plusieurs notations sontpossibles :

    notation dcimale avec signe ventuel et le point pour sparer la partie entire de la partiefractionnaire. Exemples : 56.4 ou -7

    notation hexadcimale, le signe $ suivi d'un nombre hexadcimal. Exemples : $15 ou $AF00 notation scientifique, mantisse suivi de E et de l'exposant. Exemples : 1.6E8 ou 2.3E-5

    Syntaxe de dclaration, CONST nom= expression ou valeur ; ex : CONST PI=3.14 ;

  • {declaration des variables globales}Syntaxes :

    Variables de base var nomvariable : type ; ex : var a :integer ; ou var a,b : real ; Type intervalle Ex :

    TYPE

    jourtravail = lundi..vendredi;{si on a dj dfini tjour }mois = 1..12;

    {sous-ensemble du type INTEGER}byte = 0..255;{prdfini en Turbo Pascal, prend 1 octet en mmoire}minuscules = 'a'..'z';

    Ces variables s'utilisent comme des variables du type dont est issu leur intervalle (on peut utiliser unevariable mois comme tout autre entier) mais peuvent utiliser moins de mmoire.

    Les variables sont destines contenir des informations modifiables. Elles sont types, ceci permet aucompilateur d'une part de prvoir la taille de l'espace mmoire qui leur est ncessaire et d'autre part dedfinir les oprations qui peuvent les modifier. On distingue plusieurs types de variables :

    Valeurs numriques entires

    Byte taille de 1 octet (succession de 8 bits), permet d'crire des entiers de 0 255

    Integer taille de 2 octets, permet d'crire des entiers de -32768 32767

    Word taille de 2 octets, permet d'crire des entiers de 0 65535

    LongInt taille de 4 octets, permet d'crire des entiers de -2147483648 2147483647

    Valeurs numriques fractionnaires

    Real taille de 6 octets; il donne 11 chiffres significatifs et permet d'crire des nombres encriture scientifique avec des exposants entre -38 et +38.

  • Valeurs boolennes

    Boolean taille de 1 octet; deux valeurs possibles : true (vrai) et false (faux)

    Caractres et chanes de caractres

    Char taille de 1 octet; 256 valeurs possibles dfinies par la table ASCII

    String taille de 256 octets; peut contenir des chanes d'au plus 255 caractres; le premieroctet reprsente en effet la longueur de la chane.

    String[n] n reprsente un entier positif infrieur 255; taille de n+1 octets; peut contenir deschanes d'au plus n caractres.

    Voici une petite liste-exemple trs loin d'tre exhaustive :

    Dsignation Description Bornes Place en mmoireReal Rel 2.9E-039 et 1.7E+038 6 octetsSingle(*) Rel 1.5E-045 et 3.4E+038 4 octetsDouble (*) Rel 5.0E-324 et 1.7E+308 8 octetsExtended (*) Rel 3.4E-4932 et 1.2E+4932 10 octetsComp (*) Rel -2E+063 +1 et 2E+063+1 8 octets(en ralit, entier64 bits)Integer entier sign -32768 et 32767 2 octetsLongInt Entier sign -2147483648 et 2147483647 4 octetsShortInt Entier sign -128 et 127 1 octetWord Entier non sign 0 et 65535 2 octetsByte Entier non sign 0 et 255 1 octetBoolean Boolen True ou False 1 octet

    Array [1..10] of xxx Tableau de 10 colonnes fait d'lments de type dfini xxx (Char, Integer...)Array [1..10,1..50, 1..13] of xxx Tableau en 3 dimensions fait d'lments de type dfini xxx (Char,Integer...)String Chane de caractres 256 octets

  • String [y] Chane de caractre ne devant pas excder y caractres y + 1 octets

    Text Fichier texte File Fichier File of xxx Fichier contenant des donnes de type xxx (Real, Byte...)Char Caractre ASCII 1 octet "Pointeur" Adresse mmoire 4 octetsDateTime Format de datePathStr Chane de caractres (nom complet de fichier)DirStr Chane de caractres (chemin de fichier)NameStr Chane de caractres (nom de fichier)ExtStr Chane de caractres (extension de fichier)

    Le caractre est compris entre deux apostrophes ou le symbole # suivi du code ASCII.Exemples : 'f' ou #123. La chane de caractres est comprise entre deux apostrophes.Exemples : 'Ceci est une chane de caractres.'Pour inclure une apostrophe dans une chane de caractres on crit deux apostrophes conscutives.Exemple : 'Voici l''exemple.'

    Prsentation de la table ASCII

    Table ASCII (American Code for Information Interchange)32 : espace 33 : ! 34 : " 35 : # 36 : $ 37 : % 38 : & 39 :

    40 : 2 41 : ) 42 : * 43 : + 44 : , 45 : - 46 : . 47 : / 48 : 0 49 : 150 : < 51 : 3 52 : 4 53 : 5 54 : 6 55 : 7 56 : 8 57 : 9 58 : : 59 : ;60 : F 61 : = 62 : > 63 : ? 64 :@ 65 :A 66 : B 67 : C 68 : D 69 :E70 : P 71 : G 72 : H 73 : I 74 : J 75 : K 76 : L 77 : M 78 : N 79 : O80 : 81 : Q 82 : R 83 : S 84 : T 85 : U 86 :V 87 : W 88 : X 89 : Y90 : Z 91 : [ 92 : \ 93 : ] 94 : ^ 95 : _ 96 : 97 : a 98 : b 99 : c100 : d 101 : e 102 :f 103 : g 104 : h 105 : i 106 : j 107 : k 108 : l 109 : m110 : n 111 : o 112 : p 113 : q 114 : r 115 : s 116 : t 117 : u 118 : v 119 : w120 : x 121 : y 122 : z 123 :{ 124 : | 125 : } 126 :~ 127 128 129

    Dans les commentaires et les chanes de caractres, on peut galement utiliser le code ASCIItendu

  • {dclaration ventuelle des structures} ;

    Type tableau :- Vecteur type tab=array[1..n] of integer;- Type n dimensions: type mat = array[1..3,1..3] of real;- Avec une constant: const DegreMax = 5 ; type polynome = array[0..DegreMax]

    of real; var P1,P2 : polynome ;

    Type enregistrement- Exemple 1 :

    Un complexe sera reprsent par un enregistrement compos de 2 rels. Lenregistrement est composde 2 champs nots Re et Im. La dclaration de type sera :TYPE complex = RECORD

    Re, Im : real ;

    END;Des variables Z1 et Z2 de ce type seront dclares par VAR Z1, Z2: complex;On pourra alors utiliser dans un programme les variables Z1 et Z2. Par exemple : Z1 := Z2;les diffrents champs de ces variables par .Exemple: Z1.Re:=3; Z1.Im:=-1; Z1.Im:=Z1.Re+Z2.Im; writeln(Z1.Re:5:2,' + i * ',Z1.Im:5:3);

    - Exemple 2Une date sera reprsente par un enregistrement compos de 2 entiers et un mot.Lenregistrement est compos de 3 champs nots Jour, Mois et Anne.

    La dclaration de type pourra tre :TYPE date = RECORD

    Jour : 1..31 ; { intervalle de N }Mois : string ; { chane de caractres }Annee : 1900..2100; { entier dans un intervalle }END;

    Des variables avant et maintenant de ce type seront dclares par VAR avant, maintenant : date;On pourra alors utiliser dans un programme les variables avant et maintenant. Par exemple :Avant:=maintenant;

    les diffrents champs de ces variables. Exemple:avant.Jour:=15;avant.Mois:='Octobre';

  • avant.Annee:=1995; { 15/10/95 }if (maintenant.Mois=avant.Mois)and(maintenant.Annee=avant.Annee)then nb_jours:=maintenant.Jour-avant.Jour;

    {dclaration ventuelle des sous-programmes, fonctions ou procdures }

    Dans toute programmation, il faut declarer ou definir tout sous-programme avant de lappeler. Si lessous-programmes sont dclars (prototype), alors ils seront dfinis aprs le programmeprincipal, sinon les dfinir avant le programme principal.

    ProceduresUne procdure est un sous-programme qui neffectue aucun calcul, donc ne retourne aucun rsultat.

    Syntaxe declarative: Procdure Identificateur (var Param1:Type1,Param2:Type2,...);(*prototype*)

    Identificateur est le nom de la procdure; Param1, Param2 ... sont des paramtres que le programmefournit la procdure sous forme de constantes, de variables ou d'expressions, ils sont prcds dumot cl var; Type1, Type2 ... sont les types de ces paramtres.

    Fonctions

    La fonction se dclare comme une procdure, sauf que la liste des paramtres nest pas prcde du

    mot cl var, et lon doit indiquer le type de valeur retourne.

    Syntaxe declarative: Function Identificateur (Param1:Type1,Param2:Type2,...):Type R;(*prototype*)

    (*programme principal *)Son corps situe entre le bloc BEGIN et END., contient lnonc, la procdure de saisie des donnes,le traitement, ventuellement lappel des sous-programmes, et laffichage des rsultats.

    BEGIN (* dbut du programme principal *)(* Le corps du programme principal *) ;

    END. (* fin du programme principal *)

  • (*Dfinition ventuelle des sous-programmes*)

    Procdures

    o Procedure Identificateur ( var Param1:Type1,Param2:Type2,...) (*en tete sanspoint virgule*)

    o Dclarations de constantes, types, variables utiliss l'intrieur de la procdure.

    (*Corps de la procdure*)BeginInstruction1;

    Instruction2;

    End;

    Fonctionso Function Identificateur (Param1:Type1,Param2:Type2,...):TypeR (*entete sans point

    virgule*)o dclarations de constantes, types, variables utiliss l'intrieur de la fonction.

    (*Corps de la fonction*)BeginInstruction1;

    Instruction2;

    Identificateur:=rsultat;

    End;

    III.3.4 Variables et paramtres d'une procdure ou d'une fonction

    II.3.4.1 Variables locales et paramtres

    Les dclarations se trouvant l'intrieur d'une procdure ou d'une fonction ne sont valables que pourla procdure ou la fonction et sont donc inconnues pour le reste du programme ; les variables ainsidclares sont dites locales.

    Par contre les variables dclares dans lentte du sous-algorithme, sont appeles paramtres ouarguments du sous-algorithme

  • II.3.4.2 Transmission des paramtres

    Les variables transmises en paramtres une procdure ou une fonction ne sont pas modifies pour lereste du programme, en effet la procdure ou la fonction qui les utilisent ne disposent que d'une copie: on a une transmission de paramtres par valeur.

    Pour permettre une procdure ou une fonction de modifier le contenu d'une variable passe enparamtre on utilise le mot rserv Var. Ainsi, la procdure dclare par MaProc(Var r:Real) peutmodifier le contenu de la variable r car elle travaille non avec une copie de la valeur de r, mais avecl'adresse mmoire de la variable r : on a une transmission de paramtres par adresse.

    II.3.4.3 Le mot cl VAR

    Il est quelquefois ncessaire d'appeler une procdure paramtre sans pour autant avoir de valeur luipasser mais on souhaiterait que ce soit elle qui nous renvoie des valeurs (exemple typique d'uneprocdure de saisie de valeurs par l'utilisateur), ou alors on dsire que la procdure puisse modifier lavaleur de la variable passe en paramtre.

    Les syntaxes prcdentes ne conviennent pas ce cas spcial. Lors de la dclaration de paramtre ausein de la procdure paramtre, le mot-cl Var (place devant l'identificateur de la variable ) permetde dclarer des paramtres formels dont la valeur l'intrieur de la procdure ira remplacer la valeur,dans le programme principal, de la variable passe en paramtre. Et lorsque Var n'est pas l, lesparamtres formels doivent imprativement avoir une valeur lors de l'appel de la procdure.Pour expliquer autrement, si Var n'est pas l, la variable qu'on envoie en paramtre la procdure doitabsolument dj avoir une valeur (valeur nulle accepte). De plus, sans Var, la variable ( l'intrieur dela procdure) qui contient la valeur de la variable passe en paramtre, mme si elle change de valeur,n'aura aucun effet sur la valeur de la variable (du programme principal) passe en paramtre. C'est dire que la variable de la procdure n'existe qu' l'intrieur de cette dernire et ne peut absolument pasaffecter en quoi que ce soit la valeur initiale qui fut envoye la procdure. Cette valeur initiale restela mme avant et aprs l'appel de la procdure. Car en effet, la variable de la procdure est dynamique,elle est cre lorsque la procdure est appele et elle est dtruite lorsque la procdure se termine. Ellenaucune interaction avec le programme principal (mme si elle est capable d'appeler elle-mmed'autres procdures et fonctions).Par contre, si Var est l, la valeur de la variable globale passe en paramtre la procdure va pouvoirchanger (elle pourra donc ne rien contenir l'origine). Si, au cours de la procdure, la valeur estchange (lors d'un calcul, d'une saisie de l'utilisateur...), alors la nouvelle valeur de la variable dans laprocdure ira se placer dans la variable globale (du programme principal) qui avait t passe enparamtre la procdure. Donc, si on veut passer une variable en paramtre dont la valeur dans leprogramme principal ne doit pas tre modifie (mme si elle change dans la procdure), on n'utilise

  • pas le Var. Et dans le cas contraire, si on veut de la valeur de la variable globale place en paramtrechange grce la procdure (saisie, calcul...), on colle un Var.

    II.3.4.4 Fonctions internes

    Un certain nombre de fonctions ont t prvues par les concepteurs du langage pour faire des tchestrs souvent utilises.

    Fonctions mathmatiquesNom Fonction Exemple de code RsultatSin(x) Calcul du sinus (Radians) write(sin(0), sin(Pi)); 0 1Cos(x) Calcul du cosinus (Radians) write(cos(0), cos(Pi)); 1 0ArcTan(x) Renvoi la cotangente write(ArcTan(4)); .7853982Sqr(x) Carr write(Sqr(5)); 25Sqrt(x) Racine carr write(Sqrt(81)); 9Exp(x) Eleve une puissance nprienne write(Exp(0)); 1Ln(x) Logarithme nprien write(Ln(1)); 0Trunc(x) Tronque la partie entire write(Trunc(Pi)); 3Int(x) Renvoi la partie entire write(Int(Pi)); 3,000Frac(x) Renvoi la partie fractionnaire (aprs

    la virgule)write(Frac(45.98765)); 0.98765

    Round(x) Arrondi lentier le plus proche write(Round(28.7),Round(28.3));

    29 28

    Pred(x) Renvoi le prdcesseur dun nombreordonn (entier)

    write(Pred(5)); 4

    Succ(x) Renvoi le succsseur dun nombreordonn (entier)

    write(Succ(5)); 6

    Odd(x) Renvoi true si le nombre estimpair, false si pair

    write(Odd(3), Odd(2)); TRUE FALSE

    Abs(x) Renvoi la valeur absolue write(Abs(-54)); 54Pi Renvoi la constante Pi write(Pi); 3.14159265358Random(x) Renvoi un nombre alatoire entre 0 et

    largumentwrite(Random(10)); 5.7895415

    Inc(x [, i]) Incrmente la variable de i sispcifi, ou de 1 par dfaut

    Inc(MyVar); Inc(MyVar, 5);

    Dec(x, [,i])

    Dcrmente la variable de i sispcifi, ou de 1 par dfaut

    Dec(MyVar); Dec(MyVar,5);

  • III.4 GESTION DES ENTREES/SORTIES

    Entres : L'instruction Readln (Variable) permet l'utilisateur d'entrer au clavier la valeurassocie la variable qui est de type numrique ou de type chane de caractres avec retour laligne du curseur (Read sans retour la ligne du curseur).

    Sorties : L'instruction Write (Expression1[[,Expression2]....]) permet l'affichage l'cran ducontenu de Variable. L'instruction Writeln (Expression1[[,Expression2]....]) effectue la mmeopration que Write avec un retour la ligne la fin de l'affichage.Les expressions sont des variables ou des constantes ou des rsultats d'oprations de typenumrique ou chane de caractres.

    - Format daffichage : Il est galement possible de mettre en forme les rsultats numriques enutilisant la notation write (nombre:c:d) o nombre va tre affich avec c nombre de caractresminimum et d nombre de chiffres aprs la virgule.

    III.5 OPERATIONS SUR LES VARIABLES ET CONSTANTES

    Oprateur d'affectation : Opre sur tout type de variables. Reprsent par := Il permet d'affecterune valeur une variable. Syntaxe Variable :=expression ;

    Oprateurs arithmtiques : Oprent sur les variables numriques :Multiplication * ; Division entire div ; Division fractionnaire / ;

    Modulo mod ; Addition + : Soustraction -

    Oprateurs logiques : Oprent sur les variables boolennes : and Et logique ; orOu logique ; xor Ou exclusif ; not Ngation.

    Oprateurs relationnels ou de comparaison : Oprent sur tous les types de variablesprcdemment dfinis : >strictement Suprieur ;>= Suprieur ou gal ; < strictement

    Infrieur ;

  • III .6 STRUCTURES DE PROGRAMMES

    Ce sont des structures utilises pour amliorer la qualit des programmes. On en distingue plusieurs :

    Structure squentielle

    Le corps du programme est une suite d'instructions. Il ne contient ni boucles ni sauts dtapes, ilcommence par BEGIN et se termine par END.

    Autres structures

    Il est souvent ncessaire dorganiser le corps du programme en utilisant des structures, desinstructions ne sont excutes que si certaines conditions sont vrifies ou simplement excutes uncertain nombre de fois :

    Structure conditionnelle complte

    Cette structure a lallure suivante:

    If Condition thenInstruction1 ;

    else

    Instruction2;

    Si condition est vraie, condition est une expression boolenne ralise par les oprateurs decomparaison(ex if(a

  • end;

    Expression reprsente une expression de type entier ou caractre; Valeur1, valeur2, ... reprsententdes constantes de type entier ou caractre qui sont les valeurs possibles de Expression; Instruction1,Instruction2, ... sont soit une instruction simple soit un bloc d'instructions dlimit par les motsrservs Begin et End.

    Le programme n'excutera que Instruction1 ou Instruction2 ou ... selon la valeur de Expression. Lapartie 'else Instruction par dfaut' est facultative.

    Structure While...do...

    Cette instruction prend l'aspect suivant :

    While Condition doInstruction;

    Condition est une expression boolenne; Instruction est soit une instruction simple soit un blocd'instructions dlimit par les mots rservs Begin et End. Le programme excute Instruction tant queCondition est vraie.

    Structure Repeat...until...

    Cette instruction prend l'aspect suivant :

    Repeat

    Instruction1;Instruction2;

    .

    Until Condition;

    Instruction1, Instruction2, ... sont des instructions simples. Condition est une expression boolenne.Le programme excute la suite Instruction1, Instruction2, ... jusqu' ce que Condition soit vraie.

    Structure For...do...

    Cette instruction prend l'un des 2 aspects suivants :

    For Compteur:=liminf to limsup do Instruction;ou For Compteur:=limsup downto liminf do Instruction ;

  • Compteur est une variable entire; liminf et limsup sont les valeurs limites de Compteur; Instructionest soit une instruction simple soit un bloc d'instructions dlimit par les mots rservs Begin et End.

    Dans les 2 cas le programme initialise Compteur, puis excute Instruction et augmente (ou diminue)Compteur d'une unit et recommence jusqu' ce que Compteur atteigne sa valeur finale.

    B

    Structure Break

    Il est possible de terminer une boucle For, While ou Repeat> en cours grce la commande Breaklorsque celleci est place au sein de la boucle en question.Exemple :

    Program Arret;

    Var i, x : Integer;

    Beginx := 0 ;

    Repeat

    Inc(i);Break;

    x := 50;until i > 10;

    WriteLn(i);WriteLn(x);End.

    L'excution des instructions contenues dans la boucle repeat est stoppe l'instruction Break, et donc x:= 50; n'est jamais excut. En sortie de boucle, i vaudra donc 1 et x vaudra 0.

    Structure Continuee

    Continue interrompt l'excution du tour de boucle en cours, et renvoie l'instruction de fin du blocd'instructions de la boucle, qui passe alors au tour suivant (ou s'arrte, si la condition d'arrt est vraie).

  • III.7 UTILISATION DES TYPES DE DONNEES

    III.7.1 Types simples ou statiques

    On dclare les nouveaux types simples dans la partie dclarative du programme, avant toute utilisation.

    Syntaxe :

    Type nom_du_type = nouveau_type;Exemples :

    Program Exemple24;

    Type

    Chaine = String[20];Var Nom : Chaine;

    Age : Byte;

    BEGINWrite('Entrez votre nom : ');ReadLn(Nom);Write('Entrez votre ge : ');ReadLn(Age);WriteLn('Votre nom est : ',Nom,' et votre ge : ',Age);END.Ce programme Exemple24 utilise un nouveau type appel Chaine qui sert dclarer la variable Nom.

    III.7.1.1 Types intervalles

    Les types intervalles sont trs utiliss. Ils peuvent tre de n'importe quel type scalaire. Un intervalle estforcment ordonn et continu.Syntaxe : Type Nom_type = borne_inf..borne_sup;On doit obligatoirement avoir : borne_inf et borne_sup de n'importe quel type scalaire

    borne_inf

  • Inc() (incrmentation de la variable passe en paramtre),

    Dec() (dcrmentation de la variable passe en paramtre),

    Succ() (renvoie le successeur de la variable passe en paramtre), Pred() (renvoie le prdcesseur de la variable passe en paramtre),

    Ord() (renvoie l'index de la variable dans l'intervalle auquel elle appartient)

    s'appliquent aux types intervalles, qu'ils soient de type nombre entier ou caractre et numrs.

    Exemple :

    Program Exemple31;

    Const Max = 100;Type

    Intervalle = 1..Max;

    Var x : Intervalle;

    BEGINx := 1;

    {...}if not(Succ(x) = Max) then Inc(x);{...}END.

    III.7.1.2 Types numrs

    Un type numr est un type dont les variables associes n'auront qu'un nombre trs limit de valeurs(au maximum 256 diffrentes possibles). La dfinition d'un type numr consiste dclarer une listede valeurs possibles associes un type.

    Program Exemple32;

    Type

    Jours = (dim, lun, mar, mer, jeu, ven, sam);Var Today : Jours;

    BEGINToday := mar;Today := Succ(Today);Inc(Today,2);case Today ofdim : WriteLn('Dimanche');

  • lun : WriteLn('Lundi');mar : WriteLn('Mardi');mer : WriteLn('Mercredi');jeu : WriteLn('Jeudi');ven : WriteLn('Vendredi');sam : WriteLn('Samedi');else

    WriteLn('autre, ',Ord(today));end;

    END.Dans ce programme Exemple32, il est dclar un type Jours de type numr compos de 7 lmentsreprsentant les jours de la semaine. Remarquez que les lments sont uniquement des identifiants quin'ont aucune valeur intrinsque; on peut tout juste les reprer par leur index (l'ordre dans lequel ilsapparaissent dans la dclaration, o le premier lment a le numro 0 et le dernier : n-1). Tout d'abord,une affectation l'aide de l' oprateur habituel := vers la variable Today. Puis on lui affecte sonsuccesseur dans la dclaration. Ensuite, on l'incrmente de 2. Et, selon sa valeur, on affiche l'cran lejour de la semaine correspondant si cela est possible. Remarque : La fonction Chr() (propre au typeChar) ne s'applique pas aux types intervalles et numrs.Il est impossible d'utiliser les procdures Write(Ln) et Read(Ln) avec les variablesde type numr.

    Exemple :

    Program Exemple35;Type

    Couleurs = (red, yellow, green, black, blue);Var Color : Couleurs;

    BEGINColor := red;

    repeat

    Inc(Color);until Color > green;if Color = black then WriteLn('Noir');END.

    Ce programme Exemple35 montre que, comme toute variable, Color - qui est de type numr - peuttre sujette des tests boolens. Ici, sa valeur est incrmente dans une boucle Repeat qui ne s'arrteque lorsque Color atteint une valeur qui, dans le type numr, est suprieure la valeur green. Ensuite

  • un test If vient confirmer que la dernire valeur prise par Color ( laquelle on s'attendait au vu de ladfinition du type numr) est black.

    III.7.2 Structures de donnes

    III.7.2.1 Les tableaux

    Le langage Pascal permet de gerer les tableaux

    Tableau une dimension

    Lecture et criture des lments d'un vecteur

    { Assignation de valeurs un vecteur : remplissage non indice }

    A[2]:=1 ;A[3]:=A[2]+1;B[0]:=1.2345;

    {remplissage indic}for i:=1 to 16 doBegin

    writeln (entrer lelement dindice, i);

    readln(tab[i]);End;

    {affichage du vecteur}for i:=1 to 16 doBegin

    Writeln (tab[i]);End;

    Limites de taille

    La taille d'un tableau est limite par la place mmoire que va occuper ses lments. Cette limite est de64 Ko ou plus exactement 65521 octets cause de problmes de gestion de la mmoire. Ainsi untableau contiendra au maximum 65521 octets ou 32760 lments de type Integer qui occupe chacun 2octets ou 10920 lments de type Real qui occupent chacun 6 octets.

  • Cas particulier du type String

    Le type String reprsente les chanes de caractres. C'est en fait un tableau qui aurait pu tre dclarcomme array[0..255] of Char. Sa particularit vient du fait de sa structure interne et des nombreusesprocdures et fonctions qui lui sont ddies. Le premier octet du tableau reprsente la longueur rellede la chane considre.

    Par exemple :

    Si on considre la chane S:='EXEMPLE', on aura en mmoire un tableau de 256 caractrescommenant par la suite #7 E X E M P L E suivie d'octets indtermins.L'accs aux diffrents caractres de la chane se fait comme pour un tableau classique. On aura ainsi :S[1]='E', S[4]='M', S[0]=#7. De mme on pourra modifier les caractres contenus dans la chane.

    Tableau 2 dimensions

    Lecture et criture des lments d'un tableau 2 dimensions

    { Assignation de valeurs un tableau : remplissage non indice }

    A[2,1]:=1 ; A[3,4]:=55; B[0]:=1.2345;{remplissage indic}

    For i:=1 to lignes doBegin

    For j:=1 to col doBegin

    writeln (entrer lelement dindice, i,j);

    readln(tab[I,j]);End;

    End;

    {affichage du tableau}For i:=1 to lignes doBegin

    For j:=1 to col doBegin

    writeln (entrer lelement dindice, i,j);

    readln(tab[I,j]);End;

    End;

  • III.7.2.2 Les enregistrements

    On ne peut pas afficher le contenu d'une variable structure sans passer par une syntaxe spcifiant lechamp dont on veut connatre la valeur.Note : les champs d'une variable de type structur peuvent tre de tout type (mme tableau).

    avec with

    Program Exemple25a;Type

    Descendance = 0..15;Formulaire = Record

    Nom : String[20];Age : Byte;

    Sexe : Char;Nb_enfants : Descendance;end ;

    VarPersonne : Formulaire;

    BEGINwith Personne do

    beginNom := 'Etivant';

    Age := 18;Sexe := 'M';

    Nb_enfants := 3;end ;

    END.

    sans with

    Program Exemple25b;Type

    Descendance = 0..15;Formulaire = RecordNom : String[20];Age : Byte;

    Sexe : Char;

    Nb_enfants : Descendance;end;

  • VarPersonne : Formulaire ;

    BEGINPersonne.Nom := 'Etivant';

    Personne.Age := 18;

    Personne.Sexe := 'M';Personne.Nb_enfants := 3;END.

    Ces programmes Exemple25a et Exemple25b sont pratiquement identiques. Ils utilisent tous deux unevariable Personne de type Formulaire qui comprend quatre champs : Nom, Age, Sexe et Nb_enfants.L'utilisation de ces champs se fait ainsi : variable.nom_du_champ (Exemple25b). Lorsqu'on les utilise la chane (Exemple25a), on peut faire appel with.

    Program Exemple25c;Type

    Bornes_Jour = 1..31;

    Bornes_Mois = 1..12;

    Bornes_An = 1900..2000;Date = Record

    Jour : Bornes_Jour;

    Mois : Bornes_Mois;

    An : Bornes_An;

    end ;

    Type

    Formulaire = RecordNom : String[20];Date_naissance : Date;

    end;

    VarPersonne : Formulaire;

    BEGINwith Personne do

    beginNom := 'Etivant';

    with Date_naissance do

    begin

  • Jour := 21;

    Mois := 10;An := 1980;end ;end ;

    END.

    Program Exemple25d;Type

    Bornes_Jour = 1..31;Bornes_Mois = 1..12;

    Bornes_An = 1900..2000;Formulaire = Record

    Nom : String[20];Date_naissance : Record

    Jour : Bornes_Jour;

    Mois : Bornes_Mois;

    An : Bornes_An;

    end;end ;

    VarPersonne : Formulaire;

    BEGINwith Personne do

    beginNom := 'Etivant';

    with Date_naissance do

    beginJour := 21;

    Mois := 10;

    An := 1980;end;

    end;END.

    L aussi, les programmes Exemple25c et Exemple25d sont pratiquement identiques. Ils utilisent tousdeux une variable Personne de type Formulaire qui comprend deux champs : Nom et Date_naissance,qui elle-mme est de type structur et comprenant les champs Jour, Mois et An.

  • Enregistrements conditionnels Lors de la cration d'un enregistrement (type structur), il estquelquefois ncessaire de pouvoir, en fonction d'un champ, dcider de la cration d'autres champs detel ou tel type.

    Une telle dclaration s'effectue grce la syntaxe Case of que l'on connaissait dj.

    Syntaxe :Exemple avec un type numr

    Type type_enumere = (element1, element2, ... elementN);mon_type = Record

    champ1 : type_enumere;

    case champ2 : type_enumere of

    element1 : (champ3 : type3);element2 : (champ4 : type4; champ5 : type5; ... champM : typeM);...

    elementN : ( );end;

    Exemple avec un autre type (Integer)Type mon_type = Recordcase champ1 : Integer of

    0 : (b1 : Integer);1000 : (b2 : Single);...

    end;

    Le principe est que, suivant la valeur d'un champ fixe, on va procder la cration d'un ou plusieurschamps.

    Program Exemple30a;

    ConstNmax = 1;

    Type

    Materiaux = (metal, beton, verre);Produit = RecordNom : String[20];case Matiere : Materiaux of

    metal : (Conductivite : Real);beton : (Rugosite : Byte);

  • verre : (Opacite : Byte; Incassable : Boolean);end;Tab = Array [1..Nmax] of Produit;Procedure affichage(prod : produit) ;Beginwith prod do

    beginWriteLn('Produit ', nom);case Matiere of

    metal : WriteLn('Conductivit : ',Conductivite);beton : WriteLn('Rugosit : ',Rugosite);verre : beginWriteLn('Opacit : ',Opacite);if Incassable then WriteLn('Incassable');end;

    end;end ;

    End;

    Varx : Tab;i : Integer;

    BEGINwith x[1] dobeginNom := 'Lampouille';

    Matiere := verre;

    Opacite := 98;Incassable := True;end;for i := 1 to Nmax do Affichage(x[i]);END.

    Il est absolument ncessaire de remplir le champ qui conditionne le choix des autres champs avantde remplir les champs qui sont soumis condition. Sinon, il est renvoy des rsultats absurdes.___________________________________________________________________________

  • III.8 ENVIRONNEMENT DE DEVELOPPEMENT DE PASCAL

    Il existe de nombreux environnements de dveloppement intgr ( EDIs) pour le langage pascal.Certains sont payants comme par exemple Turbo Pascal, d'autres gratuits comme par exemple DevPascal gnralement utilis dans lenseignement, et qui sera lobjet de notre tude.

    III.8.1 lEDI ou IDE de Dev Pascal

    Dev-Pascal est un environnement de dveloppement destin tre utilis avec les compilateurs FreePascal ou GNU Pascal. Il offre une interface sous Windows qui permet de remplaceravantageusement l'IDE natif de ces derniers, et permet mme d'intgrer un debugger.

    LIDE de Dev Pascal sert d'diteur, et prend en charge tout le processus de compilation. Ils se prsentegnralement sous la forme dune fentre et dispose des composantes standards dune fentre

    Windows (barre de titre, barre de menus, barre des outils, zone ddition, etc,.

    Dev Pascal est telechargeable sur le net, et est facilement instalable, gnralement sur la plate-formeWindows.

    L'environnement de dveloppement Dev-Pascal, est simple installer et utiliser, ce qui en fait unbon choix pour dbuter en Pascal. Une version traduite en franais de l'diteur est galementdisponible. Le seul inconvnient est que Dev-Pascal est accompagn d'une version antrieure ducompilateur Free Pascal et qu'il faut donc passer par l'installation de sa version jour.

    Toutes les tapes d'installation sont copieusement illustres ; vous ne devriez normalement rencontreraucune difficult.

    III.8.2 Premire excution de Dev-Pascal

    Tant que vous tes dans l'explorateur de fichiers, profitez-en, si vous le dsirez, pour crer unraccourci sur le bureau. Faites un clic droit sur devpas.exe et choisissez Envoyer vers puis Bureau(crer un raccourci) :

  • Si vous avez la possibilit d'excuter une application avec les droits d'administrateur, c'est lemoment de le faire avec devpas.exe. Faites un clic droit sur le fichier et choisissez Excuter entant qu'administrateur :

    Pourquoi faire cela la premire utilisation ? Parce que Dev-Pascal va tenter d'crire dans la basede registre de Windows et que, sans droits d'administrateur, l'opration chouera.Si vous ne disposez pas des droits suffisants, ce n'est absolument pas grave, rassurez-vous. Dans cecas, affichez le bureau de Windows et double-cliquez sur le raccourci frachement cr :

    Tout de suite, Windows affiche un avertissement de scurit :

    Si vous ne voulez plus voir ce message par la suite, dcochez la case Toujours demander avantd'ouvrir ce fichier avant de cliquer sur le bouton Excuter.

    Apparat alors le dialogue de premire excution de Dev-Pascal :

  • Il vous permet d'associer (ou pas) l'environnement de dveloppement avec les fichiers d'extension.dp (projet Dev-Pascal), .pas (source Pascal classique) et .pp (source Free Pascal). Vous pouvezgalement choisir le style des boutons de l'interface.

    Une fois que vous avez termin, pressez OK.

    prsent, c'est Dev-Pascal qui y va de son petit avertissement :

    Il fait partie des messages qui n'ont pas t traduits en franais. En substance, Dev-pascal vous avertitqu'il va tenter d'crire dans la base de registre du systme (pour rendre effectives les associations defichiers ci-dessus) mais que cela chouera si vous n'tes pas en mode administrateur. De fait, si vousne disposez pas des droits suffisants, lorsque vous pressez OK Dev-Pascal vous avertitimmdiatement que l'opration en question a chou :

    L'excution de Dev-Pascal en mode administrateur ne doit se faire que la toute premire fois. Les foissuivantes, passez par le menu de dmarrage ou le raccourci sur le bureau.

    III.8.3 Premier programme de test

    prsent, nous allons tester si tout est correctement install et configur.Sur la barre d'outils, cliquez sur le bouton ou pressez la combinaison de touches Control-U ou,encore, cliquez sur le menu Fichier, puis Nouveau fichier source :

  • Saisissez le code source suivant :

    Program Hello;

    BeginWrite('Hello world');ReadLn;

    End.

    Cliquez sur le bouton ou pressez la combinaison de touches Control-S ou, encore, cliquez surle menu Fichier, puis Sauver l'unit :

    Dans le dialogue de sauvegarde, slectionnez (ou crez) un dossier o enregistrer le fichier source etdonnez-lui un nom. Le type de fichier, au bas du dialogue, est Source Pascal (*.pas) ; si vous nespcifiez pas l'extension .pas la suite du nom du fichier, Dev-Pascal le fera pour vous. Une fois quevous avez termin, cliquez sur Enregistrer.

    Le moment est venu d'essayer de compiler le programme.

    Cliquez sur le bouton ou pressez la combinaison de touches Control-F9 ou, enfin, cliquez sur lemenu Excuter puis Compiler.

  • Le processus de compilation dmarre ; Dev-Pascal affiche l'tat d'avancement de la compilation dansle dialogue central et inscrit les messages renvoys par le compilateur Free Pascal au bas de l'cran :

    Si vous avez correctement configur les options du compilateur, la compilation devrait trecouronne de succs. Le titre du dialogue central est chang en Compilation completed, le bouton>> Excuter