Vous êtes sur la page 1sur 34

I HISTORIQUE ET PRESENTATION

Le langage pascal a t cr en 1969 l'cole polytechnique de ZURICH par NICKLAUS WIRTH et


dvelopp en France par

BLAISE PASCAL. Il a t conu pour permettre d'enseigner la

programmation 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 langage
de dveloppement le plus utilis dans ce domaine.
En 1975, PASCAL a trs largement pntr le monde de la recherche et des universits et t
accept 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 ce
langage. 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 accs
directs la mmoire (pointeurs) pour lesquels il est un peu fastidieux. Il impose une structure de
programme cohrente, avec la dfinition systmatique des variables et des types, ce qui permet d'avoir
un contrle maximum l'excution et garder une bonne transposition algorithme/programme.
Le code est relativement compact mais permet une trs bonne lisibilit, donc une maintenance
gnralement 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 programme
permet 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 est
relativement compacte, bien que cet aspect soit de plus en plus anodin au regard des applications
Windows o la taille du programme est conditionne par les "ressources", c'est--dire les images et
autres icnes.
Le pascal est un langage de programmation compil. Il ralise la compilation et permet l'excution des
programmes. 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 un
compilateur performant et fiable celui de Turbo Pascal.

II PRINCIPE
Comme tout programme le langage pascal applique des oprations des informations. Le
programmeur 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 pas
contenir 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 aussi
par 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 cl
Else dans la structure conditionnelle alternative.

Il est permis de mettre plusieurs instructions les unes la suite des autres sur une mme ligne
du fichier source mais il est recommand de n'en crire qu'une par ligne : c'est plus clair et en
cas de bogue, on s'y retrouve plus aisment. De plus, s'il vous arrive d'crire une ligne trop
longue, le compilateur vous le signifiera avec l'erreur Error 11 : Line too long. Il vous faudra
alors 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 un
point en informatique.

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

En Pascal, les minuscules sont traites comme des majuscules (surface et SURFACE dsignent
la mme case mmoire). Les majuscules ne sont utilises que pour faire ressortir les mots
importants. 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); dans
lequel paramtres est la liste des paramtres du programme. Ces paramtres sont les noms des fichiers
de type TXT externes au programme, qui peuvent lui tre passs par la ligne de commande. Deux de
ces 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 de
dclarer ces paramtres dans l'en-tte. Au lieu de faire Program nomprogramme (input, output); on
peut donc se permettre de faire Program nomprogramme. Mais attention, les anciens compilateurs
n'acceptent pas cette criture.

(*chargement des units*) ;


Bibliothques de procdures et de fonctions.
Les procdures et fonctions utilises couramment peuvent tre regroupes en bibliothques appeles
units en Turbo Pascal. Dans ce cas on dclare l'utilisation des bibliothques dans la partie
dclarations 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 pas
besoin 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. En
utilisant WinCRT au lieu de CRT, lon cre donc un programme Windows au lieu d'un
programme "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 Turbo
Pascal (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

crit nombre (entier ou rel) dans chaine de type String avec ventuellement un total de i

STR(nombre[:i[:j]], chaine);

caractres dont j aprs la virgule.


TRUNC TRUNC(r):LongInt;
VAL

renvoie la partie entire du rel r.

Val(chaine,nombre,coderreur); transforme chaine de type String en nombre (entier ou rel) et place un code dans la
variable 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 est
inclus dans R, tout entier est un rel)
ABS

ABS(r): Real;

ARCTAN ARCTAN(r):Real;

renvoie la valeur absolue de r.


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;
COPY

quivalente l'addition des chaines de caractres.

COPY(chaine,position,nombrecar):String; renvoie une chane forme par les nombrecar


caractres 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

renvoie la position de la premire occurence de

POS(chaine1,chaine2):Byte;

chaine1 dans chaine2 et 0 si chaine1 n'a pas t


trouve.
UPCASE UPCASE(c):Char;

renvoie la majuscule du caractre c.

DEC

Procdures et fonctions diverses


DEC(nomb1[,nomb2]);

excute nomb1:=nomb1-nomb2 o nomb1 et nomb2 sont des


entiers; la valeur par dfaut de nomb2 est 1.

INC

INC(nomb1[,nomb2]);

excute nomb1:=nomb1+nomb2 o nomb1 et nomb2 sont des


entiers; 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 n


au DOS.

RANDOM

RANDOM[(nomb)]:Integer ou renvoie un nombre alatoire entier entre 0 et nomb; si nomb n'est

RANDOMIZE

Real;

pas prcis on obtient un nombre alatoire dcimal entre 0 et 1.

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 de
procdures et de fonctions). Lors de la compilation un programme produira un fichier *.EXE qui sera
donc directement excutable sous Dos alors qu'une unit produira un fichier *.TPU non excutable
mais 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 sont
possibles :

notation dcimale avec signe ventuel et le point pour sparer la partie entire de la partie
fractionnaire. 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 une
variable mois comme tout autre entier) mais peuvent utiliser moins de mmoire.
Les variables sont destines contenir des informations modifiables. Elles sont types, ceci permet au
compilateur d'une part de prvoir la taille de l'espace mmoire qui leur est ncessaire et d'autre part de
dfinir 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 en


criture 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 premier
octet reprsente en effet la longueur de la chane.

String[n]

n reprsente un entier positif infrieur 255; taille de n+1 octets; peut contenir des
chanes d'au plus n caractres.

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

Dsignation

Description

Bornes

Place en mmoire

Real

Rel

2.9E-039 et 1.7E+038

6 octets

Single(*)

Rel

1.5E-045 et 3.4E+038

4 octets

Double (*)

Rel

5.0E-324 et 1.7E+308

8 octets
10 octets

Extended (*)

Rel

3.4E-4932 et 1.2E+4932

Comp (*)

Rel

-2E+063 +1 et 2E+063+1

8 octets

(en ralit, entier64 bits)


Integer

entier sign

LongInt

Entier sign

ShortInt

-32768 et 32767
-2147483648 et 2147483647

Entier sign

2 octets
4 octets

-128 et 127

1 octet

Word

Entier non sign

0 et 65535

2 octets

Byte

Entier non sign

0 et 255

1 octet

Boolean

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 octets
DateTime Format de date
PathStr 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 : 1
50 : < 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 :E
70 : P 71 : G 72 : H 73 : I 74 : J 75 : K 76 : L 77 : M 78 : N 79 : O
80 : 81 : Q 82 : R 83 : S 84 : T 85 : U 86 :V 87 : W 88 : X 89 : Y
90 : Z 91 : [ 92 : \ 93 : ] 94 : ^ 95 : _ 96 : 97 : a 98 : b 99 : c
100 : d 101 : e 102 :f 103 : g 104 : h 105 : i 106 : j 107 : k 108 : l 109 : m
110 : n 111 : o 112 : p 113 : q 114 : r 115 : s 116 : t 117 : u 118 : v 119 : w
120 : 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 ASCII
tendu

{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 compos
de 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 <nom_de_variable>.<nom_de_champ>
Exemple: Z1.Re:=3; Z1.Im:=-1; Z1.Im:=Z1.Re+Z2.Im; writeln(Z1.Re:5:2,' + i * ',Z1.Im:5:3);

Exemple 2

Une 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 les
sous-programmes sont dclars (prototype), alors ils seront

dfinis aprs le programme

principal, sinon les dfinir avant le programme principal.


Procedures
Une 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 programme
fournit la procdure sous forme de constantes, de variables ou d'expressions, ils sont prcds du
mot 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 *)
<actions excuter> ;
END. (* fin du programme principal *)

(*Dfinition ventuelle des sous-programmes*)


Procdures
o Procedure Identificateur ( var Param1:Type1,Param2:Type2,...) (*en tete sans
point virgule*)
o Dclarations de constantes, types, variables utiliss l'intrieur de la procdure.
(*Corps de la procdure*)
Begin
Instruction1;
Instruction2;
End;

Fonctions
o 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*)
Begin
Instruction1;
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 pour
la procdure ou la fonction et sont donc inconnues pour le reste du programme ; les variables ainsi
dclares sont dites locales.
Par contre les variables dclares dans lentte du sous-algorithme, sont appeles paramtres ou
arguments 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 le
reste 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 en
paramtre on utilise le mot rserv Var. Ainsi, la procdure dclare par MaProc(Var r:Real) peut
modifier le contenu de la variable r car elle travaille non avec une copie de la valeur de r, mais avec
l'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 lui
passer mais on souhaiterait que ce soit elle qui nous renvoie des valeurs (exemple typique d'une
procdure de saisie de valeurs par l'utilisateur), ou alors on dsire que la procdure puisse modifier la
valeur de la variable passe en paramtre.
Les syntaxes prcdentes ne conviennent pas ce cas spcial. Lors de la dclaration de paramtre au
sein de la procdure paramtre, le mot-cl Var (place devant l'identificateur de la variable ) permet
de 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, les
paramtres 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 doit
absolument dj avoir une valeur (valeur nulle accepte). De plus, sans Var, la variable ( l'intrieur de
la 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 pas
affecter en quoi que ce soit la valeur initiale qui fut envoye la procdure. Cette valeur initiale reste
la 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. Elle
naucune interaction avec le programme principal (mme si elle est capable d'appeler elle-mme
d'autres procdures et fonctions).
Par contre, si Var est l, la valeur de la variable globale passe en paramtre la procdure va pouvoir
changer (elle pourra donc ne rien contenir l'origine). Si, au cours de la procdure, la valeur est
change (lors d'un calcul, d'une saisie de l'utilisateur...), alors la nouvelle valeur de la variable dans la
procdure ira se placer dans la variable globale (du programme principal) qui avait t passe en
paramtre la procdure. Donc, si on veut passer une variable en paramtre dont la valeur dans le
programme 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 paramtre
change 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 tches
trs souvent utilises.

Fonctions mathmatiques
Nom
Fonction
Exemple de code
Sin(x)
Calcul du sinus (Radians)
write(sin(0), sin(Pi));
Cos(x)
Calcul du cosinus (Radians)
write(cos(0), cos(Pi));
ArcTan(x) Renvoi la cotangente
write(ArcTan(4));
Sqr(x)
Carr
write(Sqr(5));
Sqrt(x)
Racine carr
write(Sqrt(81));
Exp(x)
Eleve une puissance nprienne
write(Exp(0));
Ln(x)
Logarithme nprien
write(Ln(1));
Trunc(x)
Tronque la partie entire
write(Trunc(Pi));
Int(x)
Renvoi la partie entire
write(Int(Pi));
Frac(x)
Renvoi la partie fractionnaire (aprs
write(Frac(45.98765));
la virgule)
Round(x)
Arrondi lentier le plus proche
write(Round(28.7),
Round(28.3));
Pred(x)
Renvoi le prdcesseur dun nombre write(Pred(5));
ordonn (entier)
Succ(x)
Renvoi le succsseur dun nombre
write(Succ(5));
ordonn (entier)
Odd(x)
Renvoi true si le nombre est
write(Odd(3), Odd(2));
impair, false si pair
Abs(x)
Renvoi la valeur absolue
write(Abs(-54));
Pi
Renvoi la constante Pi
write(Pi);
Random(x) Renvoi un nombre alatoire entre 0 et write(Random(10));
largument
Inc(x [, i]) Incrmente la variable de i si
Inc(MyVar); Inc(MyVar, 5);
spcifi, ou de 1 par dfaut
Dec(x, [,
Dcrmente la variable de i si
Dec(MyVar); Dec(MyVar,
i])
spcifi, ou de 1 par dfaut
5);

Rsultat
01
10
.7853982
25
9
1
0
3
3,000
0.98765
29 28
4
6
TRUE FALSE
54
3.14159265358
5.7895415

III.4 GESTION DES ENTREES/SORTIES

Entres : L'instruction Readln (Variable) permet l'utilisateur d'entrer au clavier la valeur


associe la variable qui est de type numrique ou de type chane de caractres avec retour la
ligne du curseur (Read sans retour la ligne du curseur).

Sorties : L'instruction Write (Expression1[[,Expression2]....]) permet l'affichage l'cran du


contenu de Variable. L'instruction Writeln (Expression1[[,Expression2]....]) effectue la mme
opration 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 type
numrique ou chane de caractres.

Format daffichage : Il est galement possible de mettre en forme les rsultats numriques en
utilisant la notation write (nombre:c:d) o nombre va tre affich avec c nombre de caractres
minimum 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'affecter
une valeur une variable. Syntaxe Variable :=expression ;

Oprateurs arithmtiques : Oprent sur les variables numriques :


Multiplication
Modulo

mod ;

Division entire
Addition

div ;

+:

Division fractionnaire / ;

Soustraction

Oprateurs logiques : Oprent sur les variables boolennes :


Ou logique ;

*;

xor

Ou exclusif ;

not

and

Et logique ;

Ngation.

Oprateurs relationnels ou de comparaison : Oprent sur tous les types de variables


prcdemment dfinis : >strictement Suprieur ;>= Suprieur ou gal ;
Infrieur ;

<= ;Infrieur ou gal ;=

Egal ; <>

< strictement

Diffrent

Oprateur de chanes de caractres : L'oprateur + permet de concatner deux chanes.

or

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, il
commence par BEGIN et se termine par END.
Autres structures
Il est souvent ncessaire dorganiser le corps du programme en utilisant des structures, des
instructions ne sont excutes que si certaines conditions sont vrifies ou simplement excutes un
certain nombre de fois :

Structure conditionnelle complte

Cette structure a lallure suivante:

If Condition then
Instruction1 ;
else
Instruction2;
Si condition est vraie, condition est une expression boolenne ralise par les oprateurs de
comparaison(ex if(a<b) a<b est vrai) ou des oprateurs logiques (ex if (a and b) a et b est vrai ).
Instruction1 et Instruction2 sont soit une instruction simple pas de ncessit de lencadrer entre
begin et end ; soit un bloc d'instructions dlimit par les mots rservs Begin et End.
Si Condition est vraie, le programme excute Instruction1, sinon c'est Instruction2 qui est excute
lorsqu'elle existe.

Structure case...of

Cette instruction prend l'aspect suivant :


case Expression of
valeur1 : Instruction1;
valeur2 : Instruction2;
.
else Instruction par dfaut

end;
Expression reprsente une expression de type entier ou caractre; Valeur1, valeur2, ... reprsentent
des 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 mots
rservs Begin et End.
Le programme n'excutera que Instruction1 ou Instruction2 ou ... selon la valeur de Expression. La
partie 'else Instruction par dfaut' est facultative.

Structure While...do...

Cette instruction prend l'aspect suivant :


While Condition do
Instruction;
Condition est une expression boolenne; Instruction est soit une instruction simple soit un bloc
d'instructions dlimit par les mots rservs Begin et End. Le programme excute Instruction tant que
Condition 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; Instruction
est 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 Break
lorsque celleci est place au sein de la boucle en question.
Exemple :
Program Arret;
Var i, x : Integer;
Begin
x := 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 Continue

e
Continue interrompt l'excution du tour de boucle en cours, et renvoie l'instruction de fin du bloc
d'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;
BEGIN
Write('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 est
forcment 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 <= borne_sup

Exemples :
Type Binaire = 0..1;
Type Alpha = 'A'..'Z';
Type Cent = 1..100;

Les instructions suivantes :

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;

BEGIN
x := 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 liste
de valeurs possibles associes un type.

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

BEGIN
Today := mar;
Today := Succ(Today);
Inc(Today,2);
case Today of
dim : 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 lments
reprsentant les jours de la semaine. Remarquez que les lments sont uniquement des identifiants qui
n'ont aucune valeur intrinsque; on peut tout juste les reprer par leur index (l'ordre dans lequel ils
apparaissent 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 son
successeur dans la dclaration. Ensuite, on l'incrmente de 2. Et, selon sa valeur, on affiche l'cran le
jour de la semaine correspondant si cela est possible. Remarque : La fonction Chr() (propre au type
Char) ne s'applique pas aux types intervalles et numrs.
Il est impossible d'utiliser les procdures Write(Ln) et Read(Ln) avec les variables
de type numr.

Exemple :
Program Exemple35;
Type
Couleurs = (red, yellow, green, black, blue);
Var Color : Couleurs;
BEGIN
Color := 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 - peut
tre sujette des tests boolens. Ici, sa valeur est incrmente dans une boucle Repeat qui ne s'arrte
que 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 la
dfinition 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 do
Begin
writeln (entrer lelement dindice, i);
readln(tab[i]);
End;

{affichage du vecteur}
for i:=1 to 16 do
Begin
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 de
64 Ko ou plus exactement 65521 octets cause de problmes de gestion de la mmoire. Ainsi un
tableau contiendra au maximum 65521 octets ou 32760 lments de type Integer qui occupe chacun 2
octets 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 dclar
comme array[0..255] of Char. Sa particularit vient du fait de sa structure interne et des nombreuses
procdures et fonctions qui lui sont ddies. Le premier octet du tableau reprsente la longueur relle
de la chane considre.
Par exemple :
Si on considre la chane S:='EXEMPLE', on aura en mmoire un tableau de 256 caractres
commenant

par

la

suite

#7

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 do
Begin
For j:=1 to col do
Begin
writeln (entrer lelement dindice, i,j);
readln(tab[I,j]);
End;
End;

{affichage du tableau}
For i:=1 to lignes do
Begin
For j:=1 to col do
Begin
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 le
champ 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 ;
Var
Personne : Formulaire;
BEGIN
with Personne do
begin
Nom := 'Etivant';
Age := 18;
Sexe := 'M';
Nb_enfants := 3;
end ;
END.

sans with
Program Exemple25b;
Type
Descendance = 0..15;
Formulaire = Record
Nom : String[20];
Age : Byte;
Sexe : Char;
Nb_enfants : Descendance;
end;

Var
Personne : Formulaire ;
BEGIN
Personne.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 une
variable 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 = Record
Nom : String[20];
Date_naissance : Date;
end;
Var
Personne : Formulaire;
BEGIN
with Personne do
begin
Nom := '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 ;
Var
Personne : Formulaire;
BEGIN
with Personne do
begin
Nom := 'Etivant';
with Date_naissance do
begin
Jour := 21;
Mois := 10;
An := 1980;
end;
end;
END.

L aussi, les programmes Exemple25c et Exemple25d sont pratiquement identiques. Ils utilisent tous
deux 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 est


quelquefois ncessaire de pouvoir, en fonction d'un champ, dcider de la cration d'autres champs de
tel 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 = Record
case 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 plusieurs
champs.

Program Exemple30a;
Const
Nmax = 1;
Type
Materiaux = (metal, beton, verre);
Produit = Record
Nom : 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) ;
Begin
with prod do
begin
WriteLn('Produit ', nom);
case Matiere of
metal : WriteLn('Conductivit : ',Conductivite);
beton : WriteLn('Rugosit : ',Rugosite);
verre : begin
WriteLn('Opacit : ',Opacite);
if Incassable then WriteLn('Incassable');
end;
end;
end ;
End;
Var
x : Tab;
i : Integer;
BEGIN
with x[1] do
begin
Nom := '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 avant
de 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 Dev

Pascal 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 Free
Pascal ou GNU Pascal. Il offre une interface sous Windows qui permet de remplacer
avantageusement 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 prsente
gnralement 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-forme
Windows.
L'environnement de dveloppement Dev-Pascal, est simple installer et utiliser, ce qui en fait un
bon choix pour dbuter en Pascal. Une version traduite en franais de l'diteur est galement
disponible. Le seul inconvnient est que Dev-Pascal est accompagn d'une version antrieure du
compilateur 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 rencontrer
aucune 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 un
raccourci 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 le
moment de le faire avec devpas.exe. Faites un clic droit sur le fichier et choisissez Excuter en
tant qu'administrateur :

Pourquoi faire cela la premire utilisation ? Parce que Dev-Pascal va tenter d'crire dans la base
de 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 ce
cas, 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 avant
d'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 pouvez
galement 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 avertit
qu'il va tenter d'crire dans la base de registre du systme (pour rendre effectives les associations de
fichiers ci-dessus) mais que cela chouera si vous n'tes pas en mode administrateur. De fait, si vous
ne disposez pas des droits suffisants, lorsque vous pressez OK Dev-Pascal vous avertit
immdiatement 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 fois
suivantes, passez par le menu de dmarrage ou le raccourci sur le bureau.

III.8.3 Premier programme de test

prsent,

nous

allons

tester

si

Sur la barre d'outils, cliquez sur le bouton

tout

est

correctement

install

et

configur.

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;

Begin
Write('Hello world');
ReadLn;
End.

Cliquez sur le bouton

ou pressez la combinaison de touches Control-S ou, encore, cliquez sur

le menu Fichier, puis Sauver l'unit :

Dans le dialogue de sauvegarde, slectionnez (ou crez) un dossier o enregistrer le fichier source et
donnez-lui un nom. Le type de fichier, au bas du dialogue, est Source Pascal (*.pas) ; si vous ne
spcifiez pas l'extension .pas la suite du nom du fichier, Dev-Pascal le fera pour vous. Une fois que
vous 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 le

menu Excuter puis Compiler.

Le processus de compilation dmarre ; Dev-Pascal affiche l'tat d'avancement de la compilation dans


le 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 tre
couronne de succs. Le titre du dialogue central est chang en Compilation completed, le bouton
>> Excuter << s'active (cliquez dessus) et vous fondez en larmes de bonheur. Dans le cas contraire,
il y a fort parier que les dossiers n'ont pas correctement t configurs dans les options du
compilateur.

Voici le programme qui s'excute dans une console :