Vous êtes sur la page 1sur 42

Lyce Saint-Louis Classes prparatoires

1
re
anne














Introduction au

Turbo Pascal



















J ean-Philippe Poli
jean-philippe.poli@laposte.net 2008 2009

Table des matires
Chapitre 1 Introduction 1
1 Algorithmes et programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Syntaxe et smantique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4 Le langage Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Chapitre 2 Utiliser lenvironnement de programmation 5
1 Description des menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1 Menu File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Menu Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Menu Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Menu Compile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Menu Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Editeur de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Utilisation de lenvironnement de programmation . . . . . . . . . . . . . . . . . . . . . 6
Chapitre 3 Programmer en Pascal 9
1 Structure gnrale dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Symboles et sparateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Identicateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 Types et constantes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.1 Nombres entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2 Nombres rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.3 Boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.4 Chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.5 Passage dun type lautre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7 Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
i
Table des matires
7.1 Aectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.2 Entres-sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.3 Branchement conditionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.4 Blocs dinstructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.5 Structures rptitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.6 Nombres alatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
9 Procdures et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
9.1 Procdures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
9.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
9.3 Passages de paramtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9.4 Variables locales et variables globales . . . . . . . . . . . . . . . . . . . . . . . . 36
10 Dclaration de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
ii
Chapitre 1
Introduction
Dans ce chapitre, nous allons introduire direntes notions dinformatique qui permettront de
comprendre ce que nous allons faire tout au long de lanne.
1 Algorithmes et programmes
Les notions dalgorithme et de programme sont des notions lies mais quil ne faut pas confondre.
On appelle algorithme une suite doprations lmentaires permettant de rsoudre un problme
ou deectuer un calcul et qui peut tre crite dans un langage proche de notre langue naturelle,
cest--dire le franais.
Exemple Lalgorithme suivant est une mthode qui permet dacher successivement les
nombres de 1 5.
Pour i allant de 1 5 faire
crire i
Un programme est une suite dinstructions crites dans un langage appel langage machine ,
constitu uniquement de 0 et de 1, et qui est le seul langage compris par un ordinateur. Par exemple,
les traitements de texte et les messageries instantanes sont des programmes.
Le rle dun programmeur est donc dcrire une suite dinstructions que lordinateur devra excuter
lorsquun utilisateur dmarre un programme. Il est trs dicile, pour des raisons videntes, dcrire
un programme en langage machine. Le programmeur utilise donc un langage appel langage de
programmation qui est un intermdiaire entre la langue naturelle et le langage machine.
1
Chapitre 1. Introduction
2 Compilation
Ainsi, le programmeur crit dans un chier (parfois appel code source ) lensemble des instruc-
tions en utilisant le langage de programmation. Puisque lordinateur ne comprend pas ces instructions,
il faut les traduire en langage machine ; cette phase de traduction est appele compilation (voir
gure 1) et est eectue par un logiciel. Aprs la compilation, on obtient un programme.
Fig. 1 La compilation : transformation du code source en un programme
Pour crire un programme dans un langage donn, nous utilisons un environnement de program-
mation. Il sagit dun ensemble de logiciels destins au programmeur et comprenant : un diteur de
texte, un compilateur, un systme daide, un systme de dbogage . . .
3 Syntaxe et smantique
Tout langage, que ce soit une langue naturelle comme le franais ou un langage de programmation
comme Pascal, possde deux aspects complmentaires que nous allons tenter de dcrire brivement :
la syntaxe et la smantique.
La syntaxe dun langage est dnie par un ensemble de rgles qui rgissent la construction des
phrases et de leurs constituants. Pour une langue naturelle, on parle plutt de grammaire et dortho-
graphe. Pour un langage de programmation, il sagit des mots que lon peut utiliser et comment ils
peuvent tre agencs entre eux. La syntaxe dun langage ne demande aucune comprhension mais un
apprentissage par cur ; nous verrons dans le chapitre 3 lensemble des rgles de syntaxe du langage
Pascal.
Lorsque une phrase ou un programme est syntaxiquement correct, on peut alors parler de smantique.
La smantique dune langue naturelle correspond au sens que lon donne aux mots et aux phrases tandis
que la smantique dun programme dnit quel moment lexcution de celui-ci est correcte (cest--
dire que le programme fait bien ce que lon voulait).
Exemple An de bien comprendre la dirence entre la syntaxe et la smantique, prenons
lexemple de la langue franaise.
La phrase souris chat manger est syntaxiquement incorrecte puisquelle ne respecte pas les
rgles de grammaires.
A prsent, si lon considre la souris mange le chat, la phrase est syntaxiquement correcte,
puisque les rgles de grammaires sont respectes. En revanche, elle nest pas smantiquement
correcte car elle na pas le sens quon voulait lui donner ( savoir que le chat mange la souris).
Enn, la phrase le chat mange la souris est syntaxiquement et smantiquement correcte.
2
4. Le langage Pascal
En informatique, un programme qui nest pas syntaxiquement juste ne va pas tre compil par le
compilateur ; ce dernier va avertir le programmeur quil y a une erreur. En revanche le compilateur ne
peut pas avertir le programmeur dune erreur de smantique : cest lexcution que lutilisateur sen
apercevra (cest ce que lon appelle un bug).
4 Le langage Pascal
Le langage Pascal a initialement t cr par Nicklaus Wirth, un professeur suisse, la n des
annes soixante-dix.
Lorsque Pascal a t conu, il existait plusieurs langages de programmation, mais quelques-uns
seulement taient dun usage rpandu, tels FORTRAN, C, Assembleur, COBOL. Lide matresse du
nouveau langage tait la structuration, organise laide dun concept solide de type de donnes et
exigeant des dclarations et des contrles de programmes structurs. Ce langage devait par ailleurs
tre un outil denseignement pour les cours de programmation.
Turbo Pascal, le compilateur de Borland mondialement connu, a t introduit en 1985. Il a t lun
des compilateurs les plus vendus de tous les temps et a rendu le langage particulirement populaire
grce son quilibre entre simplicit et puissance.
Turbo Pascal a introduit un Environnement de Dveloppement Intgr (EDI) dans lequel on
pouvait diter du code, faire tourner le compilateur, visualiser les erreurs et revenir aux lignes contenant
ces erreurs. Considrations triviales lheure actuelle, mais auparavant il fallait quitter lditeur, revenir
au DOS, actionner la ligne de commande du compilateur, noter les lignes errones, ouvrir lditeur et
sauter jusque l.
En 1995, aprs neuf versions de compilateurs Turbo et Borland Pascal, qui ont progressivement
tendu le langage, Borland a lanc Delphi, faisant de Pascal un langage de programmation visuel.
3
Chapitre 1. Introduction
4
Chapitre 2
Utiliser lenvironnement de
programmation
Dans ce chapitre, nous allons tudier lenvironnement de dveloppement, cest--dire le logiciel qui
nous permet dcrire des programmes en Pascal.
1 Description des menus
Lenvironnement de programmation que nous utilisons apparat dans une fentre en haut de laquelle
se trouve la barre des menus (voir gure 2) qui permet daccder aux fonctionnalits du logiciel.
Fig. 2 La barre des menus
Nous allons prsent passer en revue les fonctionnalits dont vous aurez besoin durant les travaux
pratiques.
1.1 Menu File
Le menu File permet daccder aux fonctionnalits suivantes :
New : ouvre une nouvelle fentre ddition (dans la quelle le code source doit tre crit).
Open : ouvre un chier existant.
Save : enregistre le contenu de la fentre dans un chier. Lors de la premire sauvegarde, un
nom de chier est demand. Les sauvegardes suivantes seectuent dans le mme chier.
Save as : enregistre le contenu de la fentre dans un nouveau chier.
Exit : quitte le logiciel.
5
Chapitre 2. Utiliser lenvironnement de programmation
1.2 Menu Edit
Le menu Edit permet daccder aux fonctionnalits concernant ldition du texte :
Undo : annule la dernire action.
Cut : supprime le texte slectionn et le copie en mmoire.
Copy : copie le texte slectionn en mmoire sans le supprimer.
Paste : colle le texte mmoris lemplacement actuel du curseur.
1.3 Menu Run
Dans ce menu, nous nutiliserons que loption Run qui permet dexcuter le programme corres-
pondant votre code source. Si votre code source nest pas compil, la commande Run excutera
pralablement une compilation. Il est toutefois prfrable de lancer la compilation manuellement.
1.4 Menu Compile
Dans ce menu, loption Compile compile le code source actuel. La compilation cre alors un
programme excutable partir du menu Run.
1.5 Menu Debug
Dans ce menu, loption User screen ache lcran de lexcution du programme.
2 Editeur de texte
La gure 3 reprsente une fentre de lditeur de texte. Plusieurs fentres peuvent tre ouvertes
simultanment dans lenvironnement de dveloppement.
Lditeur de texte connat le langage Pascal et changera la couleur des mots en fonction de leur
rle dans le code : les mots cls, les commentaires, les chanes de caractres se distingueront par leur
couleur.
3 Utilisation de lenvironnement de programmation
Une fois lenvironnement de programmation dmarr, il est dusage de crer un nouveau chier
qui contiendra votre code source. Il ne peut y avoir quun seul programme par chier. Sauvegardez le
plus rapidement possible le nouveau chier an de lui donner un nom. Ensuite, il est recommand de
sauvegarder assez souvent de faon conserver les modications que vous apportez votre programme.
Lorsque vous avez termin votre programme, vous pouvez en demander la compilation ; la com-
pilation provoque obligatoirement une sauvegarde au pralable. Vous pouvez ensuite excuter le pro-
6
3. Utilisation de lenvironnement de programmation
Fig. 3 Lditeur de texte de lenvironnement de programmation
gramme. Celui-ci sexcute dans une fentre indpendante de lenvironnement de programmation. Il
ne faut jamais la fermer : si elle ne se ferme pas seule, cest que votre programme prsente un bug.
Pour grer vos chiers et vos programmes, il vous est recommand dobserver les
conseils suivants :
vitez les accents et les caractres spciaux dans les noms de chiers : lenvironne-
ment gre mal ces caractres ;
donnez des noms vocateurs vos chiers pour les trouver facilement, et de prf-
rence un nom de la forme TP1exo5 qui facilite une recherche ultrieure ;
tout nom de chier contenant des instructions en Pascal doit se terminer par
lextension .pas ce qui permet lenvironnement de changer la couleur des
mots en fonction de leur rle ;
sauvegardez vos chiers dans votre rpertoire personnel (cr en dbut danne) ;
nouvrez jamais plusieurs fois le mme chier dans lenvironnement ou plusieurs
environnements : cela conduit trs souvent la perte des modications apportes
vos chiers.
7
Chapitre 2. Utiliser lenvironnement de programmation
8
Chapitre 3
Programmer en Pascal
A prsent, nous allons dcrire lensemble des rgles qui permettent dcrire un programme en langage
Pascal. Les mots-cls du langage Pascal sont inspirs de mots anglais.
1 Structure gnrale dun programme
program i d e n t i f i c a t e u r ;
DECLARATIONS
begi n
instruction
1
;
instruction
2
;
.
.
.
instruction
n
;
end .
Le code ci-dessus montre la structure gnrale dun programme crit en Pascal. Tout programme
doit commencer par le mot-cl program suivi du nom que vous voulez donner celui-ci : il est impratif
que ce soit la premire ligne de votre chier. Ce nom peut tre dirent de celui du chier qui contient
votre code et doit tre crit en respectant les rgles des identicateurs (voir page 12). Enn, cette
premire ligne est termine par un point-virgule.
Exemple program essai;
Dans la partie appele dclarations , tous les objets (variables, constantes, fonctions, procdures,
etc . . .) qui seront utiliss dans le programme doivent tre dcrits.
9
Chapitre 3. Programmer en Pascal
Enn, tout programme doit contenir un begin et un end. entre lesquels seront placs les instructions.
Ce bloc est appel programme principal et le end. marque la n de celui-ci (avec le point nal).
Aprs la compilation, lexcution du programme consistera excuter de faon squentielle chacune
des instructions du programme principal jusqu atteindre le end. nal.
Il ne peut y avoir quun seul programme par chier, donc une seule fois le mot-cl
program
Rien ne doit tre crit au-dessous de end.
Exemple voici un petit programme qui demande son utilisateur de rentrer un nombre
quil ache par la suite.
program f a c i l e ;
var i : i nt eger ;
begi n
wr i t el n ( Ent r ez un c h i f f r e ) ;
readl n ( i ) ;
wr i t el n ( Vous avez e nt r : , i ) ;
end .
2 Symboles et sparateurs
Un programme Pascal est constitu de symboles et de sparateurs. Les sparateurs sont les blancs
(un ou plusieurs espaces, tabulation), les sauts de ligne, et les commentaires.
Les commentaires sont des textes comprhensibles par lhomme et qui ne seront pas lus par la
machine. Pour indiquer quun texte est en commentaire, il faut le placer entre des accolades { }, ou
alors entre (* *).
Exemple le code suivant montre les direntes faons dcrire un commentaire en Pascal :
{ c e c i e s t un commentai r e }
( a a u s s i )
{ c e c i e s t un commentai r e
s ur p l u s i e u r s l i g n e s }
( c e l u i c i
a u s s i )
Il existe dirents types de symboles : les symboles spciaux, les mots-cls, les identicateurs, les
nombres, les chanes de caractres . . .
10
2. Symboles et sparateurs
Voici lensemble des symboles spciaux du langage Pascal que nous allons utiliser (nous verrons
leurs sens plus tard) :
+ / , : ; = <> <= >= := .. ( ) [ ]
De mme, les mots-cls du langage Pascal (au programme) sont :
and array begin const div
do downto else end for
function if mod not of
or procedure program repeat then
to type until var while
Au moins un sparateur doit gurer entre deux identicateurs, mots-cls, ou nombre
Aucun sparateur ne doit gurer dans un symbole Pascal
Exemple Voici deux exemples pour illustrer les rgles ci-dessus :
beginX constitue un seul symbole qui est un identicateur, tandis que begin X constitue
deux symboles savoir le mot-cl begin et lidenticateur X
<= na pas le mme sens que < = qui est syntaxiquement faux en Pascal
Les rgles assez souples concernant le nombre de sparateurs entre deux mots-cls ou deux identi-
cateurs permettent de prsenter correctement un programme. Nhsitez pas arer vos instructions
et les indenter (i.e. les dcaler vers la droite) pour que votre code source soit clair.
Exemple Les deux programmes ci-dessous sont identiques pour lordinateur, mais vous
conviendrez que le premier est beaucoup plus lisible que le second pour un humain :
program e s s a i ;
var age : i nt eger ;
begi n
wr i t el n ( v ot r e age ? ) ;
readl n ( age ) ;
wr i t el n ( vous avez , age , ans . ) ;
end .
program e s s a i ; var age : i nt eger ;
begi n wr i t el n ( v ot r e age ? ) ; readl n ( age ) ;
wr i t el n ( vous avez , age , ans . ) ; end .
11
Chapitre 3. Programmer en Pascal
3 Identicateurs
Les identicateurs servent donner des noms des objets de faon les distinguer. Les rgles
observer pour les identicateurs sont les suivantes :
un identicateur est compos de lettres (non accentues), de chires et du caractre _ (appel
underscore), mais doit obligatoirement commencer par une lettre ;
la longueur minimale dun identicateur est 1 caractre, la longueur maximale est 255. Cela
permet de donner des variables ou un programme un nom qui a du sens, mais attention car
manipuler des identicateurs trop longs peut tre pnible.
En Pascal, il ny a pas de dirence entre les majuscules et les minuscules, cest--
dire que A et a dsignent le mme objet
Aucun identicateur ne doit avoir la mme orthographe quun mot-cl ou un identi-
cateur pr-dclar
Aucun identicateur ne peut tre le mme que celui du programme
Exemple Exo_TP1_1, TP1_1, serie_d_euler sont des identicateurs corrects, alors que
Srie d euler , suite_relle , 3a ne le sont pas.
La liste des identicateurs pr-dclars (cest--dire qui ont dj un sens en Pascal) que nous allons
utiliser, et dont nous verrons le sens aprs, est la suivante :
abs arctan boolean cos exp
false integer ln read readln
real round sin sqr sqrt
true trunc write writeln
4 Types et constantes de base
Un type dcrit un ensemble de valeurs pouvant tre manipules par un ensemble doprateurs. Nous
allons tudier quelques types simples, mais nous verrons plus tard des types dits structurs (voir page
28).
4.1 Nombres entiers
Les valeurs de type integer sont un sous-ensemble des entiers relatifs, cest--dire les entiers de
lintervalle [-32768 ; 32767]. Si on dpasse les valeurs de cet intervalle, il y aura une erreur lexcution
(parfois mme la compilation).
Exemple Voici des exemples corrects dentiers : 0 1 32000 -56.
12
4. Types et constantes de base
Soit x et y deux integer, les oprateurs sur les entiers sont :
+x Oprateur unaire didentit
x Oprateur unaire pour le signe oppos
x+y Addition entire
xy Soustraction entire
xy Multiplication entire
x/y Division relle.
Si y est nul, il y aura une erreur lexcution.
Le rsultat de x/y est le quotient rel de la division de x par y
x div y Division entire.
Si y est nul, il y aura une erreur lexcution.
Le rsultat de x div y est la partie entire du quotient de la division de x par y
x mod y Modulo.
Si y est ngatif ou nul, il y a une erreur lexcution.
Le rsultat est le reste de la division entire de x par y
et les fonctions prdnies sur les entiers sont :
abs(x) Calcule la valeur absolue |x| de x
sqr(x) Calcule x
2
On remarque donc que le rsultat dune opration sur deux integer est toujours un integer sauf
dans le cas de la division relle.
4.2 Nombres rels
Il sagit du type real couvrant les valeurs de lintervalle [2.9E-39 ; 1.7E38] aussi bien dans les rels
ngatifs que positifs et dont la prcision peut atteindre 11 12 chires signicatifs. Il faut remarquer
quil ny a pas despace entres les chires, et surtout que le sparateur dcimal, qui en franais est la
virgule, est ici le point.
Exemple Voici des exemples corrects de rels : 0.0 1E0 -1.5E4 .
Soit x et y deux rels, voici les oprateurs du type real :
+x Identit
y Oppos
x+y Addition relle
xy Soustraction relle
xy Multiplication relle
x/y Division relle. Si y est nul, il y a une erreur lexcution
Le rsultat de ces oprations est toujours un real.
13
Chapitre 3. Programmer en Pascal
Il existe aussi des fonctions prdnies prenant en paramtre un real :
abs(x) Calcule la valeur absolue |x| de x
sqr(x) Calcule x
2
sin(x) Sinus de x, avec x en radians
cos(x) Cosinus de x, avec x en radians
exp(x) e
x
ln(x) Logarithme nprien de x.
Si x nest pas strictement positif, il y aura une erreur lexcution
sqrt(x) Racine carre de x.
Si x est strictement ngatif, il y aura une erreur lexcution
arctan(x) Valeur principale en radians de larc tangente de x exprim en radians
Le rsultat de ces fonctions est toujours un real.
4.3 Boolens
Il sagit du type boolean qui a deux valeurs possibles notes true et false et qui est utilis pour
reprsenter les valeurs logiques vrai et faux .
Trois oprateurs permettent de manipuler des boolens : la ngation (not), la conjonction (and) et
la disjonction (or). A titre de rappel, voici les tables de vrits de ces oprateurs :
X Y not X X and Y X or Y
true true false true true
true false false false true
false true true false true
false false true false false
Des oprateurs appels oprateurs de comparaison permettent de comparer deux valeurs entires
ou relles tout en renvoyant un rsultat boolen :
= est gal
< est infrieur
> est suprieur
<= est infrieur ou gal
>= est suprieur ou gal
<> est dirent de
Exemple La valeur de 1<=2 est true et la valeur de 10<>5+5 est false.
Il ne faut surtout pas confondre loprateur de comparaison = et loprateur daf-
fectation := (voir page 20) !
14
4. Types et constantes de base
4.4 Chanes de caractres
Nous utiliserons les chanes de caractres pour acher un rsultat ; nous nirons donc pas plus loin
dans la dnition de ce type. Une chane de caractres reprsente un mot ou une phrase qui nest pas
interprte par la machine. Une chane de caractres est dlimite par les cotes, cest--dire le caractre
apostrophe.
Exemple Voici quelques chanes de caractres :
bonjour il fait beau un t ensoleill .
Puisque lordinateur reproduit les chanes de caractres sans les interprter, il est
possible dcrire en franais et dutiliser les accents ; cependant, les accents sachent
gnralement mal
Si dans une chane de caractres on veut utiliser lapostrophe, il faut le doubler :
loiseau
4.5 Passage dun type lautre
Il est impossible de passer du type boolean un autre type. En revanche il est possible de passer
du type integer real et vice-versa sous certaines conditions.
Avant daller plus loin il est important de comprendre qu cause de la faon de coder les entiers et
les rels dans la mmoire dun ordinateur, les entiers sont catgoriquement dirents des rels. Ainsi,
mme si en mathmatiques on crit indiremment 6 et 6.0, en informatique ce ne sont pas du tout
les mmes nombres : en informatique, les integer ne sont pas inclus dans les real alors que les entiers
sont inclus dans les rels.
Pour remdier cela, on peut tre amen vouloir transformer un entier en rel ou linverse. La
conversion des integer en real est automatique.
Cela va avoir une implication assez importante. Nous avons vu prcdemment quun
oprateur comme le + ncessitait soit deux entiers, soit deux rels. Grce la capacit
de conversion automatique dun entier en rel, il sera possible dutiliser tous les
oprateurs et toutes les fonctions des real avec des integer et le rsultat sera toujours
un real.
Exemple On peut considrer les oprations suivantes :
1+3.0 a pour rsultat 4.0 de type real ;
sqrt(2) a pour rsultat 2.0 de type real.
15
Chapitre 3. Programmer en Pascal
En revanche, la conversion des real en integer ne peut pas se faire seule, comme en mathmatiques
dailleurs. En eet convertir 6.6 en entier nous laisse le choix entre deux valeurs : 6 ou 7. Il faut donc
utiliser lune des deux fonctions suivantes, o x est un real et le rsultat est un integer :
trunc(x) Partie entire de x
round(x) Entier le plus proche de x.
Exemple Ces deux fonctions peuvent donner les rsultats suivants :
avec trunc(6.6) on obtiendra 6 (de type integer)
avec round(6.6) on obtiendra 7 (de type integer)
avec round(6.3) on obtiendra 6 (de type integer)
5 Variables
Le mot variable na pas le mme sens en informatique et en mathmatiques. En informatique,
une variable est un objet qui permet de contenir une valeur : cest un emplacement dans la mmoire de
lordinateur accessible par un nom (son identicateur, voir page 12) et dont la taille dpend du type
(voir page 12) de la valeur quil contient.
La dirence majeure entre le sens informatique et le sens mathmatique dune variable rside
surtout dans la manire daecter une valeur une variable. En mathmatiques, une variable peut :
reprsenter nimporte quelle valeur dun ensemble, lorsquon crit par exemple x R ;
avoir une valeur dnie explicitement, lorsquon crit pour x = 2 ;
avoir une valeur dnie implicitement, cest--dire que la valeur de la variable nest pas calcule
directement mais tous les lments ncessaires son calcul sont fournis, comme dans 2x = 6 .
En informatique, une variable ne peut tre dnie que de faon explicite par une instruction que
lon appelle aectation (voir page 20). On ne pourra jamais demander lordinateur de rsoudre
lquation 2x = 6 notre place : il faudra lui spcier que x vaut
6
2
.
Toute variable utilise dans un programme doit faire lobjet dune dclaration, cest--dire que lon
va nommer toutes les variables dont on va avoir besoin et leur donner un type laide du mot-cl var :
var l i s t e _d e _v a r i a b l e s
1
: type
1
;
var l i s t e _d e _v a r i a b l e s
2
: type
2
;
.
.
.
var l i s t e _d e _v a r i a b l e s
n
: type
n
;
Une liste de variables consiste en fait une liste didenticateurs spars par des virgules. Les
dirents type
i
sont les types simples real, integer, boolean (voir page 12) et les types structurs ou
dnis que nous verrons plus tard (voir page 28). Il peut y avoir autant de listes de variables dclarer
que ncessaire mais en principe il ny en a quune par type.
16
6. Expressions
Le mot cl var na pas besoin dtre rpt au dbut de chaque ligne de dclaration.
On peut trs bien crire :
var l i s t e _d e _v a r i a b l e s
1
: type
1
;
l i s t e _d e _v a r i a b l e s
2
: type
2
;
.
.
.
l i s t e _d e _v a r i a b l e s
n
: type
n
;
Il est conseill de donner des noms vocateurs vos variables : si une variable doit
reprsenter le poids dun colis par exemple, il est toujours prfrable de lappeler p
plutt que x, et dautant plus prfrable de lappeler directement poids.
Exemple Nous allons dclarer trois variables a, b et c de type integer, une variable taille
de type real et deux conditions, condition1 et condition2, de type boolean :
var a , b , c : i nt eger ;
t a i l l e : r eal ;
c ondi t i on1 , c o ndi t i o n2 : bool ean ;
La dclaration dune variable rserve un emplacement en mmoire mais ne lui aecte
pas de valeur par dfaut. Par exemple, dans lexemple prcdent, a, b et c ont t
dclares comme des valeurs entires mais leur valeur ce moment est indtermine
(elles ne valent pas 0 !). Dans de trs nombreux cas, il faudra donc initialiser les va-
riables au dbut du programme principal, cest--dire leur donner une valeur initiale.
Exercice 1 Dclarez les variables ncessaires pour reprsenter : le nombre de litres de lait,
le nombre de cuillres caf de sucre en poudre, la quantit de beurre en grammes et la
quantit de farine en kilogrammes quil est ncessaire de mlanger pour une recette de cuisine.
Exercice 2 Trouvez les 2 fautes de dclaration qui se sont glisses dans lextrait de pro-
gramme suivant :
program c a l c u l ;
var abs , a , b , c : i nt eger ;
c a l c u l , B: r eal ;
begi n
. . .
end .
6 Expressions
Nous avons lhabitude, en mathmatiques, de manipuler des expressions. Une expression est une
formule compose de constantes, de variables, dappels de fonctions et doprateurs. Une expression
17
Chapitre 3. Programmer en Pascal
a donc une valeur et un type. On dit quune expression est bien forme lorsque lon peut calculer sa
valeur et dterminer son type. Une expression mal forme ne permet pas au programme dtre compil.
Exemple Le tableau ci-dessous prsente des exemples dexpressions bien et mal formes.
Expressions bien formes Expressions mal formes
1+10.0 1+true
true and false 1 / false
1 mod 2 1 div sqrt(4)
Sil est ncessaire de donner une explication pour les expressions mal formes, on peut dire
que la premire tente dadditionner un entier et un boolen, la seconde tente deectuer une
division par un boolen et la dernire tente dutiliser loprateur entier div avec un rel puisque
sqrt(4) est bien un rel.
Pour dterminer si une expression est bien forme ou pas, il sut dappliquer les rgles suivantes :
1. Une expression forme dune seule constante est bien forme. Le type de lexpression est alors
celui de la constante.
Exemple 10.0 est une expression bien forme de type real
2. Une expression forme dune seule variable est bien forme. Le type de lexpression est celui de
la variable.
Exemple si on a var Z : INTEGER;, alors Z est une expression bien forme de type
integer
3. Une expression fonctionnelle est bien forme si la fonction dsigne est dnie, si les sous-
expressions arguments sont bien formes, et si le nombre et le type des sous-expressions arguments
sont corrects. Lexpression est du type de la fonction.
Exemple sin(3.1415) est une expression bien forme de type real
4. Une expression forme dune sous-expression entre parenthses ( ) est bien forme si la sous-
expression lest et son type est celui de la sous-expression.
Exemple si C est une expression bien forme de type boolean, alors (C) lest aussi
5. Une expression forme dun oprateur unaire appliqu une sous-expression est bien forme si
la sous-expression lest et si le type de la sous-expression est celui de loprande indiqu ci-aprs.
Le type de lexpression est alors le type du rsultat correspondant ci-dessous :
Oprateur Type de loprande Type du rsultat
not boolean boolean
+ integer integer
+ real real
18
7. Instructions
Exemple -12.0 est une expression bien forme de type real
6. Une expression forme dun oprateur binaire appliqu deux sous-expressions est bien forme
si les deux sous-expressions le sont et si le type des sous-expressions respecte les rgles ci-aprs.
Le type de lexpression est alors le type du rsultat comme indiqu ci-dessous :
les oprandes de <, <=, =, >=, > sont de mme type simple. Le rsultat est de type boolean;
les oprandes et le rsultat de or et and sont de type boolean;
si les oprandes de +, -, * sont de type integer alors le rsultat est aussi integer. Si lun des
oprandes est de type real alors le rsultat est real ;
loprateur / a des oprandes de type integer ou real et le rsultat est de type real ;
les oprateurs div et mod ont des oprandes et un rsultat de type integer.
Exemple Soit B de type boolean, J de type integer et R de type real. Alors lex-
pression B or (trunc(R+1) <= (J/0)) est bien forme et de type boolean, mme si elle
est smantiquement fausse cause de la division par 0 :
boolean

boolean

B or
boolean

(
integer

trunc (
real

real

R +
integer

1 ) <=
integer

(
integer

J /
integer

0 ))
Exercice 3 Dterminez si les expressions suivantes sont bien formes (si cest le cas, d-
terminez leur valeur et leur type) :
1 < 2 < 3 1 + 2 cos(30) 1 / 2 div 3
ln (2 div 3) (1.0 div 2) (1 mod 2) / 5
7 Instructions
Une instruction spcie une opration ou un enchanement doprations excuter sur des objets.
Les instructions sadressent toutes lordinateur.
Chaque instruction doit se terminer par un point-virgule : rien dautre ne peut sparer deux ins-
tructions.
Lorsque plusieurs instructions doivent tre excutes, on a tendance se dire il
faut excuter linstruction
1
et linstruction
2
ce que lon a envie de traduire par
instruction
1
AND instruction
2
ce qui est absolument faux.
Nous allons prsent passer en revue toutes les instructions qui sont au programme.
19
Chapitre 3. Programmer en Pascal
7.1 Aectation
Laectation est peut-tre linstruction la plus importante puisquelle permet dattribuer une valeur
une variable. Cette attribution dune valeur se fait par le remplacement de la valeur prcdente par
la nouvelle valeur. Linstruction daectation se note :=. Si V est une variable dun type quelconque
et expression est une expression de mme type, alors :
V:= e x p r e s s i o n ;
Exemple Nous allons illustrer ce quil se passe lorsquune aectation est eectue. Une fois
que la variable X de type integer est dclare, elle ne contient pas de valeur. Nous procdons
une premire aectation en lui attribuant la valeur 10. A prsent, la variable contient 10.
Puis, nous faisons une aectation un peu plus complique : on lui aecte sa valeur courante
augmente de 5. Une fois cette aectation eectue, X contient 15.
Avant Aectation Aprs
X ? X:=10; X 10
X 10 X:=X+5; X 15
Exemple Nous allons crire un programme qui va utiliser une variable x de type integer
et qui va calculer son carr dans une variable carre de type integer aussi :
program a f f e c t a t i o n ;
var x , c a r r e : i nt eger ;
begi n
x : =5;
c a r r e :=sqr ( x ) ;
end .
7.2 Entres-sorties
Un programme doit pouvoir communiquer avec son utilisateur :
un programme peut informer lutilisateur dun rsultat ou lui donner des explications en achant
un message ;
un programme peut demander lutilisateur de saisir des valeurs pour pouvoir fonctionner.
Pour acher un message lcran, il faut employer les instructions write et writeln :
wr i te ( e x p r e s s i o n
1
, . . . , e x p r e s s i o n
n
)
wr i t el n ( e x p r e s s i o n
1
, . . . , e x p r e s s i o n
n
)
Ces deux instructions achent la valeur des expressions qui lui sont passes en paramtres. La
dirence entre write et writeln est que writeln va la ligne aprs avoir ach les expressions. Si une
20
7. Instructions
expression est une chane de caractres, la chane va tre reproduite lcran. Sinon, si lexpression est
un calcul ou une variable, la valeur est ache.
Lordinateur peut aussi lire ce que lutilisateur a saisi au clavier. Pour cela, il faut lui demander de
lire ce qui a t entr et lui donner la variable dans laquelle la valeur va tre stocke :
readl n ( v a r i a b l e )
En pratique, linstruction readln ache un curseur qui permet lutilisateur de taper du texte (dans
notre cas, il ne peut sagir que dun nombre rel ou dun nombre entier). Une fois que lutilisateur a
appuy sur la touche entre , le texte est convertit en real ou integer puis est stock dans la variable
spcie.
Il peut savrer pratique de demander lutilisateur de rentrer plusieurs valeurs dun coup. Pour
cela, les deux formes suivantes sont quivalentes :
readl n ( v a r i a b l e
1
, . . . , v a r i a b l e
n
) ; readl n ( v a r i a b l e
1
) ;
.
.
.
readl n ( v a r i a b l e
n
) ;
Nous verrons des exemples dutilisation de writeln et readln dans les parties suivantes.
Nous avons vu que lorsque lordinateur atteint le end. nal du programme, celui-ci
sarrte. Parfois, cela ne laisse pas le temps de lire un rsultat quon attendait. Il est
possible de placer un readln; avant le end. nal pour bloquer le programme jusqu
ce que la touche ENTREE soit presse.
Exercice 4 Ecrivez les instructions ncessaires pour demander lutilisateur de saisir les
quantits de beurre, de lait, de farine et de sucre pour une recette en utilisant les variables
dclares dans lexercice 1 (page 17) et acher le message La recette ncessite lutilisation
des quantits suivantes et achez lensemble des ingrdients et leur quantit sur des lignes
direntes.
7.3 Branchement conditionnel
Linstruction de branchement conditionnel permet dexcuter une instruction en fonction dune
certaine condition. Elle scrit :
i f c o n d i t i o n then i n s t r u c t i o n
1
i f c o n d i t i o n then i n s t r u c t i o n
1
el s e i n s t r u c t i o n
2
Dans lencadr ci-dessus, condition est une expression boolenne, cest--dire dont la valeur peut
tre soit true, soit false ; cette expression peut tre aussi complexe que ncessaire. De plus, instruction
1
21
Chapitre 3. Programmer en Pascal
et instruction
2
reprsentent nimporte quelle instruction, y compris une nouvelle instruction if then
else. Cette instruction peut se traduire par si . . .alors . . .sinon . . . .
La premire forme de branchement conditionnel excute instruction
1
si condition est vraie et la
seconde forme excute instruction
1
si condition est vraie et instruction
2
si condition est fausse. On
remarque alors que le else est facultatif mais pas le then.
Il ny a jamais de point-virgule avant le else, mme sil est en fait prcd dune
instruction.
Exemple Voici un programme qui demande son ge lutilisateur et lui dit sil est majeur
ou pas :
program ma j o r i t e ;
var age : i nt eger ;
begi n
wr i t el n ( Quel age avezvous ? ) ;
readl n ( age ) ;
i f age >18 then
wr i t el n ( vous e t e s maj eur ( e ) )
el s e
i f age=18 then wr i t el n ( ouf ! de j u s t e s s e ! )
el s e wr i t el n ( vous e t e s t r op j e une ) ;
end .
Exercice 5 Ecrivez la portion de programme qui correspond lalgorithme suivant (en uti-
lisant les variables dclares dans lexercice 1, page 17) :
si la recette contient plus de 200g de beurre alors acher "la recette est trop grasse" sinon
acher "la recette est bonne".
7.4 Blocs dinstructions
Nous venons de voir quune instruction peut tre excute en fonction dune condition. Mais que
se passe-t-il si plusieurs instructions doivent tre excutes en fonction de la mme condition ?
Dans ce cas, on groupe les instructions dans un bloc qui commence par begin et se termine par
end; :
22
7. Instructions
begi n
i n s t r u c t i o n
1
;
.
.
.
i n s t r u c t i o n
n
;
end ;
On comprend donc que le programme principal est un bloc dinstruction particulier puisquil est le
seul se terminer par un point plutt que par un point virgule.
Les blocs dinstructions ne doivent tre utiliss quaprs un then, un else ou un do
Si un bloc dinstruction est plac devant un else, il ne faut pas mettre de point-
virgule aprs le end du bloc
Exemple Ecrivons un programme qui ache le produit de deux nombres. Si le premier
nombre entr est 0, le rsultat sera forcment 0. Dans le cas o le premier nombre nest pas
nul, le programme demande alors le deuxime nombre pour acher le rsultat de leur produit :
program pr o dui t ;
var a , b : i nt eger ;
begi n
wr i t el n ( Ent r ez un nombre ) ;
readl n ( a ) ;
i f a=0 then
wr i t el n ( l e r s u l t a t e s t 0 )
el s e
begi n
wr i t el n ( Ent r ez un nombre ) ;
readl n ( b ) ;
wr i t el n ( l e r s u l t a t e s t , ab ) ;
end ;
end .
7.5 Structures rptitives
Une instruction ditration permet de rpter lexcution dune ou plusieurs instructions sous cer-
taines conditions. Il existe trois types de boucles.
Boucle for
La boucle for est la boucle la plus simple. Elle permet de faire varier la valeur dune variable dune
valeur une autre en laugmentant (ou la diminuant) de 1 chaque tape. Cette variable, appele
sentinelle , doit tre, notre niveau, de type integer. Si variable dnote une variable entire et si
inf et sup sont deux expressions entires, la boucle for peut scrire :
23
Chapitre 3. Programmer en Pascal
f or v a r i a b l e := i n f to sup do i n s t r u c t i o n
f or v a r i a b l e :=sup downto i n f do i n s t r u c t i o n
La boucle for se traduit par pour variable allant de inf sup rpter linstruction . Cette boucle
ne peut donc tre utilise que lorsque lon connat a priori le nombre ditrations (i.e. de passage dans
la boucle). Pour quelle fonctionne correctement, cest--dire quil y ait eectivement une rptition, il
faut au moins que la condition inf sup soit vrie. Si sup < inf, aucune erreur nest gnre mais
la boucle ne sera jamais excute.
Exemple Voici un programme qui ache la table de multiplication de 6 lenvers :
program mu l t i p l i c a t i o n ;
var i : i nt eger ;
begi n
f or i :=10 downto 1 do
wr i t el n ( 6 x , i , = , 6 i ) ;
end .
Il nest pas obligatoire dimpliquer la sentinelle dans un calcul : elle peut ne servir
que de compteur ditrations sans intervenir dans un calcul.
Exemple Pour illustrer cette astuce, nous allons faire un programme qui ache 5 fois le
mot coucou :
program coucou5 ;
var i : i nt eger ;
begi n
f or i :=1 to 5 do
wr i t el n ( coucou ) ;
end .
Il est peu recommand de modier la valeur de la sentinelle lintrieur dune boucle
for car cela peut rendre le nombre ditrations imprvisible. Il vaut mieux laisser la
boucle for faire varier toute seule la sentinelle.
Exemple Voici un programme dans lequel la boucle ne se termine jamais : chaque fois que
la boucle augmente la sentinelle de 1, linstruction rpter la diminue de 1.
24
7. Instructions
program i n f i n i ;
var i : i nt eger ;
begi n
f or i :=1 to 5 do
i :=i 1;
end .
Exercice 6 Ecrire un programme qui demande lutilisateur de rentrer un entier N > 0,
puis calculer et acher la somme des N premiers nombres.
Boucle while
La boucle while permet de rpter une instruction sans connatre lavance le nombre de rptitions.
Si condition dnote une expression boolenne, la boucle while est de la forme :
whi l e c o n d i t i o n do i n s t r u c t i o n
Cette boucle peut se traduire par tant que la condition est vraie rpter linstruction . Lorsque
lordinateur arrive sur une telle boucle, il va en eet valuer la valeur de la condition : si celle-ci vaut
false, la boucle est saute et lordinateur passe linstruction suivante. En revanche, si la condition
vaut true, linstruction de la boucle est excute puis lordinateur rvalue la condition et dcide de
poursuivre ou non la boucle en fonction de sa valeur. On dit alors que la condition est une condition
dentre dans la boucle ce qui fait quune boucle while peut ne jamais excuter linstruction rpter.
Exemple Nous allons crire un programme qui demande lutilisateur de rentrer un
nombre que lon va diviser par 2 tant que le rsultat est suprieur 1.
program d i v i s i o n ;
var v a l e u r : r eal ;
begi n
wr i t el n ( Ent r ez un nombre svp ? ) ;
readl n ( v a l e u r ) ;
whi l e v al e ur >1 do
v a l e u r := v a l e u r /2;
wr i t el n ( v a l e u r ) ;
end .
Linstruction de la boucle while doit forcment changer la valeur de la condition ;
si ce nest pas le cas, cela peut conduire une boucle qui sexcute indniement
( boucle innie ).
25
Chapitre 3. Programmer en Pascal
Exemple Voici prsent un exemple de boucle while innie. Nous allons reprendre le
programme prcdent et ajouter maladroitement une seconde variable. La premire contient la
valeur entre par lutilisateur et la seconde le rsultat des divisions par 2. Dans ce cas, si la
condition de la boucle while est vraie une fois, alors elle le sera toujours et nous obtiendrons
une boucle innie. En eet, la condition fait intervenir la variable depart alors quelle nest
jamais modie.
program d i v i s i o n ;
var depar t , v a l e u r : r eal ;
begi n
wr i t el n ( Ent r ez un nombre svp ? ) ;
readl n ( de par t ) ;
v a l e u r :=de par t ;
whi l e depar t >1 do
v a l e u r := v a l e u r /2;
wr i t el n ( v a l e u r ) ;
end .
Exercice 7 Ecrire un programme dans lequel vous dclarez une variable r de type real.
Aectez-lui la valeur 32000. Puis, tant que r est suprieure strictement 1, divisez r par 2 et
achez sa nouvelle valeur.
Boucle repeat
Comme la boucle while, la boucle repeat permet de rpter une instruction sans connatre
lavance le nombre de rptitions. Si condition dnote une expression boolenne, la boucle repeat est
de la forme :
repeat
.
.
.
instructions
.
.
.
unt i l c o n d i t i o n ;
La boucle repeat peut se traduire par rpter les instructions jusqu ce que la condition soit
vraie . Lorsque lordinateur arrive sur une telle boucle, il va commencer par excuter les instructions
qui se trouvent entre le mot-cl repeat et le mot-cl until . Une fois ces instructions excutes, la
condition est value ; si elle vaut false lordinateur passe linstruction qui suit la boucle, sinon
lordinateur rexcute la boucle. Cette fois-ci, la condition est une condition de sortie de la boucle, ce
qui fait que les instructions sont rptes au moins une fois.
26
7. Instructions
Comme pour la boucle while, il est important que les instructions dans la boucle modient la
condition de sortie an dviter une boucle innie.
Exemple Le programme suivant demande lutilisateur de rentrer un entier strictement
positif. Tant que lutilisateur se trompe et rentre un nombre ngatif ou nul, lordinateur lui
redemande un entier.
program que s t i on ;
var e n t i e r : i nt eger ;
begi n
repeat
wr i t el n ( Ent r e r un nombre >0: ) ;
readl n ( e n t i e r ) ;
unt i l e n t i e r >0;
end .
Exercice 8 Ecrire un programme qui implmente lalgorithme suivant :
rpter
demander lutilisateur dentrer un nombre n
jusqu ce que n = 10.
Choix dune boucle
Dans la plupart des cas, une boucle peut en remplacer une autre, mme si la boucle for est la moins
souple de toutes. Cependant, selon le problme, les boucles ne sont pas quivalentes au niveau de la
simplicit de mise en uvre. Nous allons considrer un programme qui ache les nombres de 1 10
lcran et nous allons proposer une version pour chaque boucle :
program compteur ;
var i : i nt eger ;
begi n
f or i :=1 to 10 do
wr i t el n ( i ) ;
end .
program compteur ;
var i : i nt eger ;
begi n
i : =1;
whi l e i <=10 do
begi n
wr i t el n ( i ) ;
i := i +1;
end ;
end .
program compteur ;
var i : i nt eger ;
begi n
i : =1;
repeat
wr i t el n ( i ) ;
i := i +1;
unt i l i >10;
end .
Lorsque lon compare les trois programmes, il semble vident que la boucle for est la plus approprie
lorsque lon connat le nombre ditrations. Par exemple, la boucle for augmente toute seule la variable
27
Chapitre 3. Programmer en Pascal
i, alors que dans les autres boucles, il est ncessaire de le faire soi-mme. On remarque aussi que la
condition dentre du while est exactement la ngation de la condition de sortie du repeat.
Il est donc important de bien choisir la boucle approprie en fonction du programme : mme si le
rsultat sera le mme au nal, lcriture du programme peut tre plus facile et plus rapide.
7.6 Nombres alatoires
Un ordinateur ne peut pas rellement fournir des nombres quil choisit au hasard. En informa-
tique, on a recours des gnrateurs de nombres pseudo-alatoires.
Ds quun programme ncessite des nombres alatoires, il faut utiliser une seule fois linstruction
randomize pour initialiser le gnrateur, gnralement en dbut de programme principal.
Pour obtenir un nombre alatoire (de faon uniforme) dans un intervalle, il faut utiliser la fonction
random :
random(n) o n est un integer renvoie un integer compris dans [0; n[ ;
random, sans paramtre, renvoie un real compris entre [0; 1[.
Exercice 9 Reprenez lexercice 8 (page 27) an den faire un jeu de devinette. Prenez un
nombre alatoire alea entre 1 et 10 et demandez lutilisateur de le deviner jusqu ce quil
le trouve.
8 Tableaux
Les tableaux reprsentent un moyen facile de ranger en mmoire et daccder des donnes du
mme type. Nous nous limiterons aux tableaux une ou deux dimensions.
Le type tableau une dimension scrit :
arr ay [ a . . b ] of type
o a est lindice de la premire case du tableau et b celui de la dernire, et o type est le type
de chacune des valeurs qui seront contenues dans les cases du tableau. a et b sont forcment de type
numr, donc pour nous boolean ou integer.
Exemple Voici une dclaration dun tableau une dimension ainsi quune reprsentation
graphique de celui-ci :
var Tab1 : arr ay [ 5 . . 14] of i nt eger ;
5 6 7 8 9 10 11 12 13 14
Tab1
De la mme faon, le type tableau deux dimensions scrit :
28
8. Tableaux
arr ay [ a . . b , c . . d ] of type
o [a ;b] reprsente les valeurs des indices de la premire coordonne, et [c ;d] celles de la seconde. Par
convention, la premire coordonne reprsente les lignes et la seconde les colonnes.
29
Chapitre 3. Programmer en Pascal
Exemple Voici une dclaration dun tableau deux dimensions ainsi quune reprsentation
graphique de celui-ci :
var Tab2 : arr ay [ 1. . 1 , 1 . . 2 ] of i nt eger ;
1 2
-1
Tab2 0
1
Un tableau nest pas une expression et na donc pas de valeur lorsquon le considre dans sa
globalit ; en revanche, chacune de ses cases est quivalente une variable dont le type est spci
par la dclaration du tableau. Il est possible daccder une case dun tableau en utilisant la syntaxe
suivante :
t a bl e a u [ coor donnes ]
Exemple Si x est une variable de type integer et en reprenant les tableaux dclars prc-
demment, on peut crire :
Tab1[6] :=10 pour aecter la case dindice 6 du tableau Tab1 la valeur 10 ;
Tab1[0,2] :=10 pour aecter la case situe la ligne dindice 0 et la colonne dindice
2 du tableau Tab2 la valeur 10 ;
x:=Tab1[8]+1 pour utiliser la valeur contenue dans la case dindice 6 du tableau Tab1 ;
x:=Tab1[1,2]+1 pour utiliser la valeur contenue dans la case situe la ligne dindice
-1 et la colonne dindice 2 du tableau Tab2.
Il faut faire attention aux coordonnes des cases des tableaux pour viter de de-
mander lordinateur daccder une case qui nexiste pas : cela provoque un bug
et larrt du programme. Dans des cas bien prcis mais trop rares, de telles erreurs
peuvent tre dtectes la compilation.
Puisquun tableau est une structure particulire, il est impossible dacher un tableau dans sa
globalit avec linstruction writeln, de le remplir avec readln, ou dappliquer les oprateurs arithm-
tiques ou logiques sur le tableau entier. Lensemble des oprateurs et des instructions que nous avons
vu fonctionnent en revanche sur les cases du tableau. La seule opration possible sur un tableau entier
est laectation ; pour cela, il faut que les tableaux soient de mme type. Laectation dun tableau
un autre consiste copier chacune des cases de lun vers lautre.
Exemple Si t1 et t2 sont dclars comme array [1..10] of real, il est impossible dcrire
writeln(t1), readln(t1), t1+t2, etc . . .En revanche, on peut crire t1:=t2 qui copie chacune
des valeurs des cases de t2 dans les cases correspondantes de t1.
30
9. Procdures et fonctions
Pour parcourir un tableau, on utilise souvent la boucle for en lui donnant pour valeur
de dpart lindice de la premire case et pour valeur darrive celui de la dernire case
du tableau.
Exemple Voici un programme qui remplit alatoirement un tableau de 10 entiers et laf-
che.
program t a bl e a ux ;
var t ab : arr ay [ 1 . . 1 0 ] of i nt eger ;
i : i nt eger ;
begi n
( i n i t i a l i s e l e s nombres a l a t o i r e s )
r andomi ze ;
( par c our s des 10 c a s e s
et a f f e c t a t i o n d un nombre a l a t o i r e )
f or i :=1 to 10 do
t ab [ i ] : =random ( 100) ;
( par c our s des 10 c a s e s
et a f f i c h a g e de l a cas e c our ant e )
f or i :=1 to 10 do
wr i t el n ( t ab [ i ] ) ;
end .
Exercice 10 Ecrivez un programme dans lequel vous dclarez un tableau dentiers 100
cases indexes de 0 99. Aectez aux cases 0 et 1 le chire 1, puis aectez la case i la
somme des cases i 1 et i 2.
9 Procdures et fonctions
La dcomposition dun programme en sous-programmes (procdures, fonctions) est indispensable
pour mettre en vidence la structure en blocs du programme et le rendre comprhensible par parties. Les
procdures permettent dintroduire de nouvelles instructions et les fonctions des nouvelles expressions.
9.1 Procdures
Une dclaration de procdure permet de donner un nom une suite dinstructions. Une procdure
sans paramtre est utilise pour viter davoir crire plusieurs fois une mme suite dinstructions
gurant plusieurs fois dans un programme, tandis quune procdure paramtre permet dexcuter
des instructions en fonction de valeurs et de variables direntes chaque appel. Lutilisation des
procdures ncessitent de les dclarer et de les dnir, si elles ne le sont pas dj, puis de les appeler
lorsquelles sont ncessaires.
31
Chapitre 3. Programmer en Pascal
Dclaration dune procdure
La dclaration dune nouvelle procdure intervient dans la partie dclarations dun programme
(voir page 9). Pour dclarer une procdure, il faut tablir son en-tte (ou prototype) de la faon
suivante :
procedure nom ( l i s t e des par amt r es ) ;
o nom est un identicateur qui permet didentier cette procdure. La liste des paramtres est une
liste didenticateurs spars par une virgule suivis de leur type. Sil existe des paramtres de types
dirents, il faut alors crer plusieurs listes de paramtres (une au moins pour chaque type) spares
par un point-virgule. Ces paramtres sont appels paramtres formels .
Exemple Voici des en-ttes de procdures avec ou sans paramtres :
procedure a c t i on1 ;
procedure a c t i on2 ( a , b : i nt eger ) ;
procedure a c t i on3 ( a , b : i nt eger ; r : r eal ) ;
Ces identicateurs permettent de donner un nom aux dirents paramtres an de les manipuler
dans la procdure. Ces paramtres ainsi dclars nexistent qu lintrieur de celle-ci.
Dnition de la procdure
Une fois que la nouvelle procdure a t dclare, il faut la dnir en indiquant les instructions qui
la composent et qui vont manipuler ses paramtres. Pour cela, on va associer un bloc dinstruction au
prototype de la procdure en crivant tout simplement :
procedure nom ( l i s t e des par amt r es ) ;
begi n
i n s t r u c t i o n
1
;
.
.
.
i n s t r u c t i o n
n
;
end ;
Ce bloc dinstruction est alors appel le corps de la procdure.
Appel dune procdure
Une fois quune procdure est dclare et dnie, il est possible de lutiliser : lordinateur connat
alors une nouvelle instruction que lon peut utiliser au mme titre que les instructions que nous avons
vu prcdemment. Lappel dune procdure scrit :
nom ( l i s t e des par amt r es ) ;
32
9. Procdures et fonctions
On remarque que le mot cl procedure a disparu. Lors de lappel, les paramtres qui sont prciss
entre les parenthses sont dits eectifs . La liste des paramtres eectifs est une suite dexpressions
et de variables spares par des virgules ; il nest plus ncessaire de prciser leur type.
La liste des paramtres eectifs doit correspondre la liste des paramtres formels :
le nombre de paramtres doit tre le mme ;
les dirents paramtres doivent tre donns dans le mme ordre ;
et les types des paramtres doivent correspondre.
Exemple Si lon souhaite appeler les procdures dnies prcdemment, on peut crire, si
x est un integer :
a c t i on1 ;
a c t i on2 ( 14+2 , 5) ;
a c t i on3 ( x , 12 , l n ( 12+5) ) ;
Lors de lappel dune procdure, les paramtres eectifs (ou arguments) sont valus, cest--dire
que si ce sont des expressions, leur valeur est calcule et les instructions qui composent la procdure
sont excutes.
Cela ne vous rappelle rien ? writeln et readln sont eectivement des procdures
prdnies.
9.2 Fonctions
Une dclaration de fonction donne un nom une suite dinstructions dont lobjet est de calculer une
valeur, qui dpend ou pas des paramtres formels. Cette dnition se rapproche du sens mathmatique
except quune fonction en Pascal ne peut renvoyer quune seule valeur.
Comme prcdemment pour les procdures, une fonction doit tre dclare et dnie avant de
pouvoir tre appele.
Dclaration dune fonction
La dclaration dune nouvelle fonction intervient dans la partie dclarations dun programme
(voir page 9). Pour dclarer une fonction, il faut tablir son en-tte (ou prototype) de la faon suivante :
f uncti on nom ( l i s t e des par amt r es ) : type ;
o nom est identicateur indiquant le nom que lon souhaite donner la fonction. Contrairement aux
procdures, il faut donner un type une fonction. Ainsi, nom fait rfrence une fonction qui associe
ses paramtres une valeur de type type qui est uniquement un type simple (cest--dire boolean,
integer et real). La liste des paramtres dune fonction est facultative (mais il est rare de ne pas en
avoir) et se construit comme la liste des paramtres formels dune procdure.
33
Chapitre 3. Programmer en Pascal
Exemple On peut dclarer une fonction addition qui deux entiers associe leur somme,
qui sera elle-mme un entier :
f uncti on a d d i t i o n ( a , b : i nt eger ) : i nt eger ;
Dnition dune fonction
Comme pour les procdures, il faut prsent dnir le corps de la fonction en associant son
prototype un bloc dinstructions. La particularit cette fois-ci est que la suite dinstructions a pour but
de calculer une valeur :
f uncti on nom ( l i s t e des par amt r es ) : type ;
begi n
i n s t r u c t i o n
1
;
.
.
.
i n s t r u c t i o n
n
;
nom:= e x p r e s s i o n ;
end ;
Une fois que le calcul est eectu, il faut aecter la fonction le rsultat de ce calcul qui doit
tre du mme type que la fonction. Sans cette aectation, la fonction renverra toujours une valeur
indtermine.
Dans le corps de la fonction nom, il ne faut pas que lidenticateur nom apparasse
dans la partie droite dune aectation.
Appel dune fonction
Une fois quune fonction est dclare et dnie, il est possible de lutiliser. Lappel dune fonction
scrit :
nom ( l i s t e des par amt r es )
On remarque que le mot cl function a disparu. La liste des paramtres eectifs obit aux mme
rgles que les paramtres eectifs dune procdure. Une fonction peut tre appele nimporte quel
emplacement destin une expression.
Exemple Si lon souhaite appeler la fonction dnie prcdemment, on peut crire, si x et
y sont deux integer :
wr i t el n ( a d d i t i o n ( 1 , 1 ) ) ;
wr i t el n ( a d d i t i o n ( 1 , 1+5) 5) ;
wr i t el n ( a d d i t i o n ( x , y ) ) ;
34
9. Procdures et fonctions
Lors de lappel dune fonction, les paramtres eectifs (ou arguments) sont valus, cest--dire
que si ce sont des expressions, leur valeur est calcule et lappel de la fonction est remplac par la
valeur quelle a calcul. A ce titre, une fonction ne doit pas utiliser de readln et ne doit utiliser writeln
uniquement pour acher un message derreur.
9.3 Passages de paramtres
Nous venons de voir que dans la dclaration ou lappel dune procdure ou dune fonction, des
paramtres pouvaient intervenir. Nous allons voir maintenant comment utiliser ces paramtres. Il faut
distinguer deux sortes de paramtres :
on appellera les paramtres dentre les paramtres dont la valeur, connue avant lappel de la
fonction ou de la procdure, ne sera pas modie par celle-ci. On dit aussi que ces paramtres
sont passs par valeur (car seule la valeur est fournie la fonction ou la procdure) ;
on appellera les paramtres de sortie les paramtres dont la valeur est modie par la fonction.
On dit que ces paramtres sont passs par variable (car cette fois-ci, la variable entire est passe
an dtre modie). Ces paramtres doivent tre prcds du mot cl var.
Une fonction ne prend pas de paramtre de sortie (elle retourne dj un rsultat). En pratique, les
paramtres eectifs correspondants des paramtres dentre peuvent tre soit des expressions, soit
des valeurs (ce sera alors leur valeur qui sera envoye la procdure ou la fonction). Au contraire, les
paramtres eectifs correspondants des paramtres de sortie sont forcment des variables puisquils
vont tre modis. De plus, il ne faut pas oublier que le nom des paramtres eectifs et des paramtres
formels na pas dimportance : seul lordre dans lequel les paramtres sont fournis et dclars compte.
Exemple Nous allons crire une procdure qui fournit la fois le quotient et le reste de la
division. Le var sapplique aux paramtres formels q et r de faon conserver les modications
apportes par la procdure.
program d i v i s i o n ;
procedure e u c l i d e ( a , b : i nt eger ; var q , r : i nt eger ) ;
begi n
r :=a ;
whi l e r>=b do
begi n
r :=rb ;
q:=q+1;
end ;
end ;
var x , y , quot i e nt , r e s t e : i nt eger ;
begi n
wr i t el n ( Ent r ez x et y : ) ; readl n ( x , y ) ;
e u c l i d e ( x , y , quot i e nt , r e s t e ) ;
wr i t el n ( quot i e nt = , quot i e nt , et r e s t e = , r e s t e ) ;
end .
35
Chapitre 3. Programmer en Pascal
Les paramtres dune fonction ou dune procdure ne peuvent pas tre de type array
(voir page 37).
9.4 Variables locales et variables globales
Les variables ont une visibilit dirente selon lendroit o elles sont dclares. Une variable est dite
globale quand elle est visible par tous les sous-programmes (procdures et fonctions). Au contraire,
une variable est dite locale quand elle nest visible que par un des sous-programmes.
En eet, lorsquune variable est ncessaire lexcution dune procdure ou dune fonction mais
pas au reste du programme, il faut la dclarer localement cette procdure ou fonction. Les variables
locales sont dclares laide du mot-cl var plac entre len-tte de la procdure ou de la fonction et
son corps.
Exemple Soit un programme qui permet dacher la somme des n premiers nombres en-
tiers. Nous allons crire une fonction qui calcule cette somme pour un n donn :
program SommeNPremiers ;
f uncti on somme( n : i nt eger ) : i nt eger ;
var s , i : i nt eger ;
begi n
( i n i t i a l i s a t i o n de l a somme 0 )
s : =0;
( Ca l c ul de l a somme)
f or i :=1 to n do
s :=s+i ;
( Af f e c t a t i o n de l a v a l e u r l a f o n c t i o n )
somme:=s ;
end ;
var nb : i nt eger ;
begi n
wr i t el n ( Ent r ez n : ) ;
readl n ( nb ) ;
wr i t el n ( l a somme vaut , somme( nb ) ) ;
end .
Dans lexemple ci-dessus, les variables s et i ne sont pas considres comme des paramtres (elles
nont pas de valeurs xes lappel de la fonction) et ne servent qu lintrieur de la fonction : ce
sont donc des variables locales la fonction somme. De mme, la variable nb est locale au programme
principal puisquelle nest utilise que par celui-ci.
36
10. Dclaration de types
Exemple Prenons prsent un exemple jouet plus compliqu et plus complet :
program Es s a i ;
var i : i nt eger ;
procedure P;
var i , j : i nt eger ;
begi n
.
.
.
end ;
procedure Q;
begi n
.
.
.
wr i t el n ( i ) ;
.
.
.
end ;
var k , l : i nt eger ;
begi n
.
.
.
end .
La variable i dclare la deuxime ligne de ce code est une variable dite globale. Elle est visible
dans tous les sous-programmes (fonctions et procdures) et le programme principal. Les variables k
et l dclares juste avant le programme principal sont des variables locales au programme principal.
La procdure Q na pas de variable locale, mais comme i est dclare globalement, Q peut y accder.
Enn, la procdure P dclare une variable locale nomme i et une autre nomme j. La variable j ne
peut tre utilise que dans le corps de P. Nous sommes dans le cas o une variable locale porte le nom
dune variable globale. Dans ce cas, Pascal considre que le i utilis dans le corps de P est le i dclar
en local, et non plus celui dclar en global : ce cas est donc viter car il peut prter confusion.
10 Dclaration de types
En Pascal, il est possible de dnir de nouveaux types. Dans notre cas, nous nous limiterons
dnir des types bass sur le type array :
type nouveau_type = arr ay [ a . . b ] of type ;
type nouveau_type = arr ay [ a . . b , c . . d ] of type ;
o a,b,c,d sont les bornes des indices du tableau et type est un type simple (boolean, integer et real).
Lavantage des types dnis est quils peuvent tre utiliss comme paramtre dune fonction ou
dune procdure et quils sont plus courts crire quune dclaration de type array.
37
Chapitre 3. Programmer en Pascal
En pratique, lorsquon aura besoin de faire passer un tableau en paramtre, nous serons obligs
de passer par un type dni. La dclaration des nouveaux types se fait dans la partie dclaration, en
gnral avant la dclaration des variables globales, des procdures et des fonctions.
Exemple Voici un programme qui permet de manipuler un histogramme des tempratures
en France. Lhistogramme est reprsent par un type dni. Il est dabord rempli alatoirement
puis ach :
program nouveau_type ;
type hi stogr amme = arr ay [ 4. . 40] of i nt eger ;
( r e mp l i t un hi stogr amme )
procedure r e mp l i r ( var h : hi stogr amme ) ;
var i : i nt eger ;
begi n
f or i :=4 to 40 do
h [ i ] : =random ( 100) ;
end ;
( a f f i c h e un hi stogr amme )
procedure a f f i c h a g e ( h : hi stogr amme ) ;
var i : i nt eger ;
begi n
f or i :=4 to 40 do
wr i t el n ( i , de gr s : , h [ i ] , f o i s ) ;
end ;
var h i s t o : hi stogr amme ;
begi n
r andomi ze ;
r e mp l i r ( h i s t o ) ;
a f f i c h a g e ( h i s t o ) ;
end .
38

Vous aimerez peut-être aussi