Vous êtes sur la page 1sur 97

Prface

Le langage Pascal offre une trs bonne approche de la programmation. Trs utilis
dans le milieu scolaire, il permet d'acqurir des notions solides que l'on retrouve
dans tous les autres langages. Le CyberZode est l'un des trs rares site web
proposer un vritable cours de programmation en Pascal avec de trs nombreux
exemples et programmes annots en libre tlchargement.
Les lments de base de la programmation tels que : pointeurs, types, tableaux,
procdures, fonctions, graphismes... et bien d'autres vous sont expliqus avec le
maximum de pertinance, de simplicit et d'efficacit, puisque vous tes dj trs
nombreux (tudiants comme professeurs d'Universit) vous fier ce cours.
De plus vous disposez galement de plusieurs tests d'valuation qui vous permettent
d'valuer vos connaissances en Pascal. Enfin, les travaux pratiques de filire 3 de
l'Universit Claude Bernard (Lyon 1 (69), FRANCE) sont rgulirement corrigs et
mis en tlchargement sur ce site.
Introduction

Cette aide lectronique sur la programmation en Turbo Pascal 7.0 est destine en
premier lieu aux non-initis, tous ceux qui dbutent dans la programmation. Que
ce soit dans le cadre de l'enseignement l'Universit ou pour votre propre intrt
personnel, vous avez dcid d'apprendre ce langage fort archaque mais qui a
nanmoins le mrite de former la logique informatique. Le langage Pascal est trs
structur et constitue en lui-mme une trs bonne approche de la programmation.
Vous dcouvrirez dans les pages qui vont suivre, les bases de la programmation en
gnral : les structures de boucle et de contrle, l'utilisation de la logique
boulenne, la chronologie d'excution du code... Ces notions de base vous servirons
si vous dcidez de changer de langage de programmation, car les principes de base
(et mme les instructions de base) sont les mmes.
Dans la vie courante, nous n'avons pas pour habitude de nous limiter au strict
minimum lorsqu'on communique, ici, ce principe est bafou, puisque d'une langue
vivante complexe vous allez passer un langage strict, rigide et pauvre. Issue des
mathmatiques, cette langue exacte est par essence optimise et simplifie. Par
del, l'apprentissage d'un langage informatique forme la systmique mathmatico-
informatique, vous apprendrez dominer le comportement de la machine et tre
plus clair et prcis dans votre manire de construire vos ides.
Utiliser le compilateur Borland Pascal 7.0

Pour ouvrir un fichier, aller dans le menu File/Open... ou taper la touche fonction F3.
Pour excuter un programme, aller dans le menu Run/Run ou taper la combinaison
de touches Ctrl+F9.
Pour compiler "correctement" un excutable, aller dans le menu Compile/Make (ou
/Compile ) ou taper F9 on obtient ainsi des excutables de meilleurs qualit qui
pourront tre utiliss sur d'autres ordinateurs.
Si vous avez ommis de mettre une pause la fin d'un programme, ou si vous
dsirez tout simplement avoir sous les yeux, la dernire page d'cran, il vous suffit
d'alllez dans le menu : Debug/User Screen ou tapez A!+F".
Pour une aide, aller dans le menu #elp/$n%e& ou taper S'i(t+F). Pour obtenir de l'aide
sur une instruction qui apparait dans un script, placez le curseur de la souris dessus
et allez dans le menu #elp/!opic Searc', une fentre apparatra alors.
Si un problme a lieu lors de l'excution d'un programme, utilisez le dbugger :
Debug/*atc'. Une fentre apparait en bas de page. Cliquez sur A%% et tapez le nom
de la variable dont vous dsirez connatre la dernire valeur.
Erreur 200 : Division par zro

Nombreux sont ceux d'entre vous qui ont eut un grave ppin avec le compilateur
Turbo Pascal. En effet, l'exccution d'un programme utilisant l'unit Crt provoque un
bug chez les ordinateurs rcents du type Pentium III. L'erreur observe est la
suivante : Error 200 : division by zero.
Mais d'o vient cette erreur ?
Les nouveaux microprocesseurs sont devenus incompatibles avec les oprations de
bas niveau crites dans l'unit Crt (fichier CR!.!+U). En effet, les instructions de
cette unit traitent l'heure systme dont le codage sur le microprocesseur a chang
dans les rcents modles d'ordinateurs.
Comment y remdier ?
Pour pouvoir utiliser de nouveau l'unit Crt dans vos programmes, il vous faut soit
changer quelques fichiers propres au compilateur soit appliquer un patch chacun
de vos programmes compils avant de pouvoir les excuter normalement. Notez que
la compilation du programme ne provoque aucune erreur, c'est seulement son
excution qui provoque cette erreur de division par zro.
O se procurer un patch ?
Sur le site web de Borland (diteur du compilateur Pascal le plus rpandu), ou sur
beaucoup d'autres sites que vous trouverez en effectuant une courte recherche dans
un moteur. Par exemple sur AltaVista.com, faites la recherche "Crt+patch" et
tlcharger les patchs proposs sur les sites trouvs par le moteur de recherche.
Tlcharger les patchs :
Ces patchs tants freeware, le CyberZode est autoris vous les proposer en
tlchargement. Vous avez deux types de patch votre disposition, n'en utilisez
qu'un seul.
Le premier patch : patch1.zip contient un fichier copier dans le rpertoire /,$- de
votre compilateur puis compiler. Les prochains programmes que vous compilerez
n'auront alors plus aucun problme et s'excuteront normalement.
Le second patch : patch2.zip contient toutes les explications techniques dtailles (en
anglais) sur l'unit Crt ainsi qu'un programme excuter en lui envoyant en
paramtre votre programme compil. Ce dernier sera modifi et marchera trs bien.
L'inconvnient de ce patch, c'est qu'il faut l'excuter sur chaque programme que
vous fabriquez, c'est chiant mais j'ai pas russi faire march l'autre !
Attention : ces patchs sont de leur auteurs respectifs, l'utilisation que vous en ferez
est vos risques et prils.
Gnralites

Architecture standard d'un listing en pascal
{ les instructions facultatives pour compilation doivent tres entre
accolades }
Program nom de programme ;
Uses units utilises ;
Const dclaration de constantes ;
Type dclaration de types ;
Function dclaration de fonction ;
Procedure dclaration de procdure paramtre ;
ar dclaration de variables ;
Procedure dclaration de procdure simple ;
!E"#$ { programme principal }
...
Commandes
...
E$%&
Grammaire du Pascal
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 !E"#$ et se termine par E$%&
(avec un point). Alors qu'un sous-programme (ou fonction, procdure, bloc
conditionnel...) commence lui aussi par !egin mais se termine par End ;
(sans point mais avec un point-virgule).
Chaque commande doit se terminer avec un point-virgule. Il n'y a pas
d'exception la rgle hormis !egin et l'instruction prcdent End ou E'se.
Il est tolr de mettre plusieurs instructions les unes la suite des autres sur
une mme ligne du fichier 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 en l'erreur Error ((: )ine too 'ong. Il vous faudra alors
effectuer des retours la ligne comme le montre l'exemple suivant :
*rite)n+,Fichier: ,- .i'e-
, Date de cration:,- datecrea-
, Utilisateur courant:,- nom-
, umro de code:,- /ound+0rcTan+12enter34y2o'd3:0:(03 ;
Les noms de constantes, variables, procdures, fonctions, tableaux, etc.
(appells identificateurs) doivent tres des noms simples, par exemple,
n'appelez pas une variable comme a : x4v_t3la78yugh456b2dfgt mais
plutt comme cela : discriminant (pour un programme sur les q du 2
nd

degr) ou i (pour une variable de boucle).
Les identificateurs doivent imprativement tre diffrents de ceux d'unit
utilises, de mots rservs du langage Pascal et ne doivent pas exder 127
signes (1 lettre au minimum). Ils ne doivent tre composs que de lettres, de
chiffres et du caractre de soulignement (Shift+8).
Les identificateurs ne doivent pas contenir de caractres accentus, ni
CHAPITRE I : Entres et sorties l'cran

La commande 5rite permet d'afficher du texte et de laisser le curseur la fin du
texte affich. Cette commande permet d'afficher des chanes de caractres
d'excdant pas 255 signes ainsi que des valeurs de variables, de constantes, de
types... Le texte doit tre entre apostrophe. Si le texte afficher contient une
apostrophe, il faut alors la doubler. Les diffrents noms de variables doivent tres
spars par des virgules.
Note : toute commande doit tre suivie d'un point virgule.
Syntaxe
*rite +,!e"te # afficher,- variable$- variable%- ,te"te%,3 ;
*rite +,&''apostrophe se double.,3 ;
La commande *rite)n est semblable la prcdente la diffrence prs que le
curseur est maintenant renvoy la ligne suivante.
Syntaxe
*rite)n +,!e"te avec renvoi # la ligne,3 ;
La commande read permet l'utilisateur de rentrer une valeur qui sera utilise par
le programme. Cette commande ne provoque pas de retour Chariot, c'est--dire que
le curseur ne passe pas la ligne.
Syntaxe
/ead +variable3 ;
La commande /ead)n permet l'utilisateur de rentrer une valeur qui sera utilise
par le programme. Cette commande provoque le retour Chariot, c'est--dire que le
curseur passe la ligne suivante. Lorsqu'aucune variable n'est affecte la
commande, il suffit de presser sur <ENTREE>.
Syntaxe
/ead)n +variable$- variable%3 ;
/ead)n ;
Program exemple1;
ar nom : 6tring ;
!E"#$
*rite+,(ntre) votre nom : ,3 ;
/ead)n+nom3 ;
*rite)n+,*otre nom est ,- nom3 ;
/ead)n ;
E$%&
Ce programme e"emple$ dclare tout d'abord la variable nomme nom comme
tant une chane de caractre (6tring). Ensuite, dans le bloc programme principal,
il est demand l'utilisateur d'affecter une valeur la variable nom qui est initialise
automatiquement (valeur nulle) chaque dmarrage du programme. Ensuite, il y a
affichage de la valeur de la variable et attente que la touche entre soit valide
(/ead)n).
L'quivalent de la commande /ead)n est /ead7ey qui donne une valeur une
variable de type Char (caractre ASCII).
Syntaxe
1 :8 /ead7ey ;
Il existe une quivalence cette commande trs utile pour sortir d'une boucle :
7eyPressed.
Syntaxe
/epeat
&&&
commandes
&&&
Unti' 7eyPressed ;
Program exemple2 ;
Uses crt ;
ar i : integer ;
Const bornesup8(0000 ;
!E"#$
/epeat
*rite)n+s9rt+i33 ;
#nc+i3 ;
Unti' +i8bornesup3 or 7eyPressed ;
E$%&
Ce programme e"emple% rpte une boucle jusqu' qu'une valeur soit
atteinte (bornesup) mais s'arrte si on appuie sur une touche. L'instruction
#nc+a-n3; incrmente la valeur n la variable a (par dfault n vaut 1), cette
dernire tant de type integer
CHAPITRE II : Oprateurs

Oprateurs mathmatiues
Addition (et union
1
) +
Soustraction (et complment
1
) :
Division ;
Multiplication (et intersection
1
) 4
Egalit 8
<=% : renvoie le reste de la division x MOD y
%# : renvoie le quotient de la division x DIV y
+prateurs prioritaires : *, /, DIV et MOD. +prateurs secondaires : + et -. *ous
pouve) utiliser des parent-ses.
Oprateurs relationnels
Infrieur strict >
Infrieur ou gale (et inclu
1
) >8
Suprieur strict ?
Suprieur ou gale (et contenant
1
) ?8
Diffrent >?
+prateur ultra.prioritaire : NOT. +prateur semi.prioritaire : AND. +prateur non
prioritaires : OR et XOR.
Oprateurs logiues :
0$% : le "et" logique des maths (voir chapitre 15 sur les boolens et tables de vrit)
=/ : le "ou"
@=/ : le "ou" exclusif
$=T : le "non"
Priorit des oprateurs
Niveau 1 : $=T.
Niveau 2 : 4, ;, <=%, %#, 0$%.
Niveau 3 : +, :, =/, @=/.
Niveau 4 : 8, >, ?, >8, ?8, >?.
1
: les oprateurs union, complment, intersection, inclu et contenant s'appliquent
aux ensembles (voir Chap XXV).
CHAPITRE III : Variables, formats et maths

1. Dclaration
2. Prise de valeurs
3. Fonctions
4. Eplois
5. !prations
". Forat

!" #claration
Toutes les variables doivent tres pralablement dclares avant d'tre utilises
dans le programme, c'est--dire qu'on leur affecte un type (voir types de variables). On
peut les dclarer de divers manires :
Au tout dbut du programme avec la syntaxe !"# nom de la variable
type $ elles seront alors valables pour le programme dans son intgralit
(sous-programmes, fonctions, procdures...).
Au dbut d'une procdure avec la syntaxe prcdente. Elles ne seront
valables que dans la procdure.
Aprs la dclaration des procdures, toujours avec la mme syntaxe, elles ne
pourront alors pas tres utilise par les procdures qui devront donc tre
paramtres (voir procdures paramtres).

$" Prise de valeurs
Les variables sont faites pour varier, il faut donc pouvoir leur donner diffrentes
valeurs au moyen du commutateur suivant % (deux points et signe gale) ou de
certaines fonction. Il faut bien sr que la valeur donne soit compatible avec le type
utilis. Ainsi, on ne peut donner la valeur ,bonAour, un nombre entier (integer).
Syntaxes
B :8 (CCD ;
On donne ainsi la valeur 1998 la variable Y (dclare pralablement en INTEGER).
)ETT/E :8 ,a, ;
On affecte la valeur a la variable LETTRE (dclare pralablement en CHAR).
TE6T :8 true ;
On donne la valeur true (vrai) la variable TEST (dclare pralablement en
BOOLEAN).
$=<!/E :8 B + (0E ;
Il est ainsi possible d'utiliser les valeurs d'autres variables, du moment qu'elles sont
de mme type, sinon, il faut faire des conversions au pralable.
%E)T0 :8 s9r+b3 : F4+a4c3 ;
On peut donc galement utiliser une expression littrale mathmatique dans
l'affectation de variables. Mais attention la priorit des oprateurs (voir oprateurs).
PG/06E :8 ,!onAour, + chr+E23 + $=< ;
On peut aussi ajouter des variables 6tring (voir Chapitre 13 pour les chanes de
caractres).

%" &onctions
&onction math'mati(ues )ascal de base
Syntaxe &onction
6in+a3
sinus
Cos+a3
cosinus
0rcTan+a3
arctangeante
0bs+a3
valeur absolue
69r+a3
carr
69rt+a3
racine carr
E1p+a3
exponentielle
)n+a3
logarithme nprien
L'argument des fonctions trigonomtriques doit tre exprim en radian (/ea'),
vous donc de faire une convertion si ncessaire. De plus, on peut voir que les
fonctions tangente, factorielle n'existent pas, il faudra donc crer de toute pice les
fonctions dsires (voir fonctions).

'" (mplois
Les variables peuvent tres utilises dans de nombreux emplois :
Pour des comparaisons dans une structure conditionnelle (voir chapitre 4 sur
les conditions).
Pour l'affichage de rsultats (voir chapitre 1 sur l'affichage).
Pour le dialogue avec l'utilisateur du programme (voir chapitre 1 sur les entres
au clavier).
Pour exccuter des boucles (voir chapitre 6)...

)" Oprations
Syntaxe *tilisation
+y,e des
variables
-escri,tion
#nc+a3;
Procdure intervalle ou numr
Le nombre a est incrment de 1
#nc+a-n3;
Procdure intervalle ou numr
Le nombre a est incrment de n
%ec+a3;
Procdure intervalle ou numr
Le nombre a est dcrment de
1
%ec+a-n3;
Procdure intervalle ou numr
Le nombre a est dcrment de
n
Trunc+a3
Fonction tout scalaire
Prise de la partie entire du
nombre a sans arrondis
#nt+a3
Fonction
a:/ea'
#nt+a3:)ongint Prise de la partie entire du
nombre a sans arrondis
Frac+a3
Fonction
/ea'
Prise de la partie fractionnaire
du nombre a
/ound+a3
Fonction
a:/ea'
/ound+a3:)ongint
Prise de la partie entire du
nombre a avec arrondi l'unit
la plus proche
Pred+13
Fonction intervalle ou numr Renvoit le prdcesseur de la
variable x dans un ensembre
ordonne
6ucc+13
Fonction intervalle ou numr Renvoit le successeur de la
variable x dans un ensembre
ordonne
Gight+13
Fonction tous Renvoit la plus grande valeur
possible que peut prendre de la
variable x
)o5+13
Fonction tous Renvoit la plus petite valeur
possible que peut prendre de la
variable x
=dd+a3
Fonction
a:)ongint
=dd+a3:!oo'ean Renvoit true si le nombre a est
impair et .a'se si a est pair
6ize=.+13
Fonction
1:tous
6ize=.+13:#nteger
Renvoit renvoit le nombre
d'octets occups par la variable
x

*" &ormat
Sachez encore que le format (le nombre de signes) d'une variable de type rea' peut
tre modifi :
Lors de son affichage : *rite)n + nombre : H 3 ; pour mettre 5 espaces
devant le nombre.
Lors de son affichage (bis) : *rite)n + nombre : 0 : H 3 ; pour ne
mettre aucun espace avant mais pour n'afficher que 5 signes (un rel en
possde bien plus).
Pour pouvez appliquer ce format pour tous les autres types de variable de manire
gnrale si vous ne stipuler que le nombre d'espace(s) afficher devant votre texte
ou valeur.
.xem,le *rite)n + ,Coucou, : 20 3 ;
Ici, la chane de caractres sera affiche aprs 20 espaces.
CHAPITRE IV : Diffrents types de variables

On peut donner n'importe quel nom aux variables condition qu'il ne fasse pas plus
de 127 caractres et qu'il ne soit pas utilis par une fonction, procdure, unit ou
commande dj existante.
Les identificateurs ne doivent pas contenir de caractres accentus, ni d'espace. Ils
doivent exlusivement tre composs des 26 lettres de l'alphabet, des 10 chiffres et
du caractre de soulignement. De plus, Turbo Pascal ne diffrencie aucunement les
majuscules des minuscules et un chiffre ne peut pas tre plac en dbut de nom de
variable.
Petite liste-exemple trs loin d'tre exhaustive :
-'signation -escri,tion /ornes
)lace en
m'moire
REAL nombres rels
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
EXTENDED(*) rel
1.9E-4951 et
1.1E+4932
10 octets
COMP(*) rel
-2E+063 +1 et
2E+063 +1
8 octets
INTEGER
nombres entier (sans
virgule)
-32768 et
32767
2 octets
LONGINT entier
-2147483648
et 2147483647
4 octets
SHORTINT entier -128 et 127 1 octet
WORD entier 0 et 65535 2 octets
BYTE entier 0 et 255 1 octet
LONG entier
(-2)^
31
et
(2^
31
)-1
4 octets
BOOLEAN variable boolenne TRUE ou FALSE 1 octet
ARRAY [1..10] OF
xxx
tableau de 10 colones fait
d'lments de l'ensemble
dfini xxx (CHAR,
INTEGER...)

ARRAY [1..10,
1..50, 1..13] OF
xxx
tableau en 3 dimensions fait
d'lments de l'ensemble
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
nombre correspondant un
caractre ASCII cod
0 et 255 1 octet
POINTEUR adresse mmoire 4 octet
DATETIME format de date
PATHSTR
chane de caractre (nom
complet de fichier)

DIRSTR
chane de caractre (chemin
de fichier)

NAMESTR
chane de caractre (nom de
fichier)

EXTSTR
chane de caractre
(extention de fichier)

(*) : ncessitent un co-processeur mathmatique.
CHAPITRE V : Structures alternatives

1. #$ ... %hen ... Else &
2. Case ... !$ ... End &

!" +, """ Then """ (lse
Cette commande est similaire au basic, elle se traduit par : SI . ALORS . SINON .
Program exemple3a ;
ar chiffre:integer ;
!E"#$
*rite+,(ntre) un entier pas trop grand : ,3 ;
/ead'n+chiffre3 ;
#. chiffre > (00 then 5rite'n+chiffre- , est infrieur # cent.,3
e'se 5rite'n+chiffre- , est suprieur ou gale # cent.,3 ;
E$%&
Ce programme e"emple/a compare un chiffre entr par l'utilisateur au scalaire 100.
Si le chiffre est infrieur 100, alors il affiche cette information l'cran, sinon il
affiche que le chiffre entr est suprieur ou gale 100.
Program exemple3b ;
ar chiffre:integer ;
!E"#$
*rite+,(ntre) un entier pas trop grand : ,3 ;
/ead'n+chiffre3 ;
#. chiffre > (00 then
begin
5rite'n+chiffre- , est infrieur # cent.,3 ;
end
e'se
begin
5rite'n+chiffre- , est suprieur ou gale # cent.,3 ;
end ;
E$%&
Ce programme e"emple/b fait strictement la mme chose que le /a mais sa
structure permet d'insrer plusieurs autres commandes dans les sous-blocs THEN et
ELSE. Notez que le END terminant le THEN ne possde pas de point virgule car s'il
en possdait un, alors le ELSE n'aurait rien faire ici et le bloc condition se
stopperait avant le ELSE.
Il est galement possible d'insrer d'autres bloc IF dans un ELSE, comme l'illustre
l'exemple3c qui suit :
Program exemple3c ;
ar i : integer ;
!E"#$
/andomize ;
i :8 random+(003 ;
i. i > H0 then 5rite'n + i- , est infrieur # 01.,3
e'se i. i > IE then 5rite'n + i- , est infrieur # 2/.,3
e'se 5rite'n + i- , est suprieur ou gale # 2/.,3
E$%&

$" Case """ O, """ (nd
Cette instruction compare la valeur d'une variable de type enti ou caractre (et de
manire gnrale de type intervalle, voir Chap ype) tout un tas d'autres valeurs
constantes.
Note attention car Case =. ne permet de comparer une variable qu'avec des
constantes.
Program exemple4 ;
ar age:integer ;
!E"#$
*rite+,(ntre) votre 3ge : ,3 ;
/ead'n+age3 ;
Case age o.
(D : 5rite'n+,&a ma4orit, pile.poil 5,3 ;
0&&(I : 5rite'n+,*ene) # moi, les petits enfants6,3 ;
J0&&CC : 5rite'n+,&es infirmi-res vous laisse 4ouer sur
l''ordinateur # votre 3ge 7555,3
E'se 5rite'n+,*ous tes d''un autre 3ge...,3 ;
End ;
E$%&
Ce programme e"emple8a vrifie certaines conditions quant la valeur de la
variable age dont l'a affect l'utilisateur. Et l, attention : le point-virgule avant le
E'se est facultatif. Mais pour plus scurit afin de ne pas faire d'erreur avec le bloc
#., choisissez systmatiquement d'ommettre le point-virgule avant un E'se.
Note On peut effectuer un test de plusieurs valeurs en une seule ligne par
sparartion avec une virgule si on souhaite un mme traitement pour plusieurs
valeurs diffrentes. Ainsi la ligne :
0&&(I : 5rite'n+,*ene) # moi, les petits enfants6,3 ;
peut devenir :
0&&(0- ((&&(I : 5rite'n+,*ene) # moi, les petits enfants6,3 ;
ou encore :
0&&C- (0- ((&&(I : 5rite'n+,*ene) # moi, les petits enfants6,3 ;
ou mme :
0&&(I- H&&(0 : 5rite'n+,*ene) # moi, les petits enfants6,3 ;
{ cette dernire ligne est stupide mais correcte ! }
CHAPITRE VI : Structures rptitives

1. For ... ' ( ... %o ... Do ...
2. For ... ' ( ... Do)n%o ... Do ...
3. *epeat ... +ntil ...
4. ,hile ... Do ...
5. -rr.ts de boucle.

!" &or """ : - """ To """ #o """
Cette instruction permet d'incrmenter une variable partir d'une valeur infrieur
jusqu' une valeur suprieur et d'excuter une ou des instructions entre chaque
incrmentation. Les valeurs extrmum doivent tre des entiers (integer) ou des
caractres de la table ASCII (char). De manire plus gnrale, les bornes doivent
tre de type intervalle (voir chap ype) c'est--dire qu'ils doivent tres de type entier
ou compatibles avec un type entier. La boucle n'excute les instructions de son bloc
interne que si la valeur infrieur est effectivement infrieur ou gale celle de la
borne suprieur. Le pas de variation est l'unit et ne peut pas tre chang.
Syntaxe
For variable :8 borne infrieur To borne suprieur %o instruction ;
Autre Syntaxe
For variable :8 borne infrieur To borne suprieur %o
!egin
...
commandes
...
End ;
Program exemple5 ;
ar i : integer ;
!E"#$
For i :8 (0 To HE %o 5rite'n +,*aleur de i : ,- i 3 ;
E$%&

$" &or """ : - """ #o.nTo """ #o """
Cette instruction permet de dcrmenter une variable partir d'une valeur suprieur
jusqu' une valeur infrieur et d'excuter une ou des instructions entre chaque
dcrmentation. S'appliquent ici les mmes remarques que prcdement.
Syntaxe
For variable :8 borne suprieur %o5nTo borne infrieur %o instruction ;
Autre Syntaxe
For variable :8 borne suprieur %o5nTo borne infrieur %o
!egin
...
commandes
...
End ;
Program exemple6 ;
ar i : integer ;
!E"#$
For i :8 (00 %o5nTo 0 %o
!egin
*rite)n +,*aleur de i : ,- i 3 ;
End ;
E$%&

%" /epeat """ 0ntil """
Cette boucle effectue les instructions places entre deux bornes (repeat et unti')
et value chaque rptition une condition de type boulenne avant de continuer la
boucle pour dcider l'arrt ou la continuit de la rptition. Il y a donc au moins une
fois excution des instructions. Il est ncessaire qu'au moins une variable
intervenant lors de l'valuation de fin de boucle soit sujette modification
l'intrieur de la structure excutive interne la boucle.
Syntaxe
/epeat
...
commandes
...
Unti' variable condition valeur ;
Program exemple7 ;
Uses crt ;
ar i : integer ;
!E"#$
/epeat
#nc + i - ( 3 ;
*rite'n +,9oucle itre ,- i- , fois.,3 ;
Unti' i ? 20 ;
E$%&
Ce programme e"emple2 permet de rpter l'incrmentation de la variable i jusqu'
que i soit suprieure 20.
Note : la commande #nc permet d'incrmenter une variable d'une certaine valeur.
La commande %ec permet au contraire de dcrmenter une variable d'une certaine
valeur. Ces commandes permettent d'viter la syntaxe : variable :8 variable + ( et
variable :8 variable : (.
Syntaxe
#nc + variable - nombre 3 ;
%ec + variable - nombre 3 ;

'" 1hile """ #o """
Ce type de boucle, contrairement la prcdente, value une condition avant
d'excuter des instructions (et nom pas l'inverse), c'est--dire qu'on peut ne pas
entrer dans la structure de rptition si les conditions ne sont pas favorables. De
plus, au moins une variable de l'expression d'valuation doit tre sujette
modification au sein de la structure de rptition pour qu'on puisse en sortir.
Syntaxe
*hi'e variable condition valeur %o instruction ;
Autre Syntaxe
*hi'e variable condition valeur %o
!egin
...
commandes
...
End ;
Program exemple8 ;
ar code : boo'ean ;
essai : string ;
Const levraicode 8 ,pass:ord, ;
!E"#$
code:8.a'se ; { facultatif, la valeur .a'se est donne par dfault }
*hi'e code 8 .a'se %o
!egin
*rite +,(ntre) le code secret : ,3 ;
/ead'n +essai3 ;
#. essai 8 levraicode then code:8true ;
End ;
E$%&

)" Arr2ts de 3oucle"
Il est possible de terminer une boucle For, *hi'e ou /epeat en cours grce la
commande !reaK lorsque celle-ci est place au sein de la boucle en question.
Pour reprendre une boucle stoppe par !reaK, il faut utiliser la commande Continue.
Program arrets1 ;
ar i- 1 : #nteger ;
!E"#$
1 :8 0 ;
/epeat
#nc+i3 ;
!reaK ;
1 :8 H0 ;
Continue ;
Unti' i?(0 ;
*rite)n+13 ;
E$%&
Ce programme arrets$ stoppe systmatiquement une boucle /epeat avant que la
variable x puisse tre incrment de 50 et la reprend aprs la ligne
d'incrmentation. Ce qui a pour rsultats que la variable x soit nulle la fin du
programme.
Program arrets2 ;
ar i- 1 : #nteger ;
!E"#$
1 :8 0 ;
For i :8 ( to (0 %o
!egin
!reaK ;
1 :8 H0 ;
Continue ;
End ;
*rite)n+13 ;
E$%&
Ce programme arrets% fait la mme chose que le programme prcdent mais dans
une boucle For.
Program arrets3 ;
ar i- 1 : #nteger ;
!E"#$
1 :8 0 ;
*hi'e i>(0 %o
!egin
!reaK ;
1 :8 H0 ;
Continue ;
End ;
*rite)n+13 ;
E$%&
Ce programme arrets/ fait la mme chose que les programmes prcdents mais
dans une boucle *hi'e.
Et pour quitter un bloc sous-programme (structure !egin &&& End ;) ou mme le
programme principal (structure !egin &&& End&) , utilisez la commande E1it.
Program arrets4 ;
ar i : #nteger ;
!E"#$
*hi'e i >? (E %o
!egin
*rite +,(ntre) un nombre : ,3 ;
/ead'n +i3 ;
*rite'n +i3 ;
#. i 8 0 Then E1it ;
End ;
*rite'n +,9oucle termine.,3 ;
E$%&
CHAPITRE VII : Procdures

Les procdures et fonctions sont des sortes de sous-programmes crits avant le
programme principal mais appels depuis ce programme principal, d'une autre
procdure ou mme d'une autre fonction. Le nom d'une procdure ou d'une fonction
(ou comme celui d'un tableau, d'une variable ou d'une constante) de doit pas
excder 127 caractres et ne pas contenir d'accent. Ce nom doit, en outre, tre
diffrent de celui d'une instruction en Pascal. L'appel d'une procdure peut dpendre
d'une structure de boucle, de condition, etc.
1. Procdure siple
2. Variables locales et sous/procdures
3. Procdure paratre
4. 01nta2e ar

!" Procdure simple
Une procdure peut voir ses variables dfinies par le programme principal, c'est--
dire que ces variables sont valables pour tout le programme et accessible partout
dans le programme principal mais aussi dans les procdures et fonctions qui auront
t dclares aprs. La dclaration des variables se fait alors avant la dclaration de
la procdure pour qu'elle puisse les utiliser. Car une procdure dclare avant les
variables ne peut pas connatre leur existance et ne peut donc pas les utiliser.
Syntaxe
Program nom de programme ;
ar variable : type ;
Procedure nom de procdure ;
!egin
...
commandes
...
End ;
!E"#$
nom de procdure ;
E$%&
Program exemple9a ;
Uses crt ;
ar a- b- c : rea' ;
Procedure maths ;
!egin
a :8 a + (0 ;
b :8 s9rt+a3 ;
c :8 sin+b3 ;
End ;
!E"#$
C'rscr ;
*rite+,(ntre) un nombre :,3 ;
/ead'n+a3 ;
/epeat
maths ;
*rite'n +c3 ;
Unti' Keypressed ;
E$%&
Ce programme e"emple<a appelle une procdure appele maths qui effectue des
calculs successifs. Cette procdure est appele depuis une boucle qui ne se stoppe
que lorsqu'une touche du clavier est presse (instruction Keypressed). Durant cette
procdure, on additionne 10 la valeur de a entre par l'utilisateur, puis on effectue
le carr (s9rt) du nombre ainsi obtenu, et enfin, on cherche le sinus (sin) de ce
dernier nombre.

$" 4aria3les locales et sous5procdures
Une procdure peut avoir ses propres variables locales qui seront rinitialises
chaque appel. Ces variables n'existent alors que dans la procdure. Ainsi, une
procdure peut utiliser les variables globales du programme (dclares en tout
dbut) mais aussi ses propres variables locales qui lui sont rserves. Une procdure
ne peut pas appeler une variable locale appartenant une autre procdure. Les
variables locales doivent porter des noms diffrents de celles globales si ces
dernires ont t dclare avant la procdure. Enfin, on peut utiliser dans une
procdure, un nom pour une variable locale dj utilis pour une autre variable
locale dans une autre procdure.
Une procdure, tant un sous-programme complet, peut contenir ses propres
procdures et fonctions qui n'xistent alors que lorsque la procdure principale est
en cours. Un sous-procdure ne peut appeler d'autres procdures ou fonctions que si
ces dernires font parti du programme principal ou de la procdure qui contient la
sous-procdure.
Syntaxe
Procedure nom de procdure ;
ar variable : type ;
Procedure nom de sous.procdure ;
ar variable : type ;
!egin
...
End ;
!egin
...
commandes
...
End ;

%" Procdure paramtre
On peut aussi crer des procdures paramtres (dont les variables n'existent que
dans la procdure). Ces procdures l ont l'intrt de pouvoir, contrairement aux
procdures simples, tre dclare avant les variables globales du programme
principal ; elles n'utiliseront que les variables passes en paramtres ! Le
programme principal (ou une autre procdure qui aurait t dclare aprs) affecte
alors des valeurs de variables la procdure en passant des variables en
paramtres. Et ces valeurs s'incorporent dans les variables propres la procdure
(dont les identificateurs peuvent ou non tres identiques, a n'a aucune espce
d'importance). La dclaration des variables se fait alors en mme temps que la
dclaration de la procdure, ces variables sont des paramtres formels car existant
uniquement dans la procdure. Losque que le programme appelle la procdure et lui
envoie des valeurs de type simple (car celles de type complexe ne sont pas
acceptes, voir chapitre 2! sur les types), celles-ci sont appelles paramtres rels car
les variables sont dfinies dans le programme principal et ne sont pas valables dans
la procdure.
A noter qu'on peut passer en paramtre directement des valeurs (nombre, chanes
de caractres...) aussi bien que des variables.
Syntaxe
Program nom de programme ;
Procedure nom de procdure+ noms de variables : types 3 ;
!egin
...
commandes
...
End ;
!E"#$
nom de procdure + noms d'autres variables ou leurs valeurs 3 ;
E$%&
Note on peut passer en paramtre une procdure des types simples et
structurs. Attention nanmoins dclarer des types spcifiques de tableau l'aide
de la syntaxe Type (voir Chapitre 2! sur les "!ypes simples et structurs") car le
passage d'un tableau en tant que type 0rray une procdure est impossible.
Program exemple9b ;
Uses Crt ;
Procedure maths + param : /ea' 3 ;
!egin
*rite)n+,=rocdure de calcul. *euille) patienter.,3 ;
param :8 6in+69rt+param+(033 ;
*rite)n+param3 ;
End ;
ar nombre : /ea' ;
!E"#$
C'r6cr ;
*rite+,(ntre) un nombre :,3 ;
/ead)n+nombre3 ;
maths +nombre3 ;
/ead)n ;
E$%&
Ce programme e"emple<b appelle une procdure paramtre appele maths qui
effectue les mmes calculs que le programme e"emple<a. Mais ici, la variable est
dclare aprs la procdure paramtre. Donc, la procdure ne connat pas
l'existance de la variable nombre, ainsi, pour qu'elle puisse l'utiliser, il faut le lui
passer en paramtre !

'" 6ynta7e Var 8procdures et ,onctions9
Il est quelquefois ncessaire d'appeller une procdure paramtre sans pour autant
avoir de valeur lui affecter mais on souhaiterait que ce soit elle qui nous renvoit
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 variable au sein de la procdure paramtre, la syntaxe ar
(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 ar n'est pas
l, les paramtres formels doivent imprativement avoir une valeur lors de l'appel
de la procdure.
Pour expliquer autrement, si ar n'est pas l, la variable qu'on envoie en paramtre
la procdure doit absoluement dj avoir une valeur (valeur nulle accepte). De
plus, sans ar, 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
absoluement pas affecter en quoi que ce soit la valeur intiale 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 est finie, et
ce, sans retour d'information vers le programme principal. La procdure paramtre
sans ar volue sans aucune interaction avec le programme principal (mme si elle
est capable d'appeler elle-mme d'autres procdures et fonctions).
Par contre, si ar 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, une fois la
procdure termine, 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 ar. 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 ar.
Program Exemple9c ;
Uses Crt ;
Procedure >aisie + var nom : 6tring 3 ;
!egin
*rite+,(ntre) votre nom : ,3 ;
/ead)n+nom3 ;
End ;
Procedure ?ffichage + info : 6tring 3 ;
!egin
*rite)n+,*oici votre nom : ,- info3 ;
End ;
ar chaine : 6tring ;
!E"#$
C'r6cr ;
>aisie+chaine3 ;
?ffichage+chaine3 ;
E$%&
Ce programme e"emple<c illustre l'utilisation de la syntaxe ar. En effet, le
programme principal appelle pour commencer une procdure paramtre >aisie et
lui affecte la valeur de la variable chaine (c'est--dire rien du tout puisque qu'avant
on n'a rien mis dedans, mme pas une chaine vide). Au sein de la procdure
paramtre, cette variable porte un autre nom : nom, et comme au dbut du
programme cette variable n'a aucune valeur, on offre la procdure la possibilit de
modifier le contenu de la variable qu'on lui envoit, c'est--dire ici d'y mettre le nom
de l'utilisateur. Pour cela, on utilise la syntaxe ar. Lorsque cette procdure >aisie
est termine, la variable chaine du programme principal prend la valeur de la
variable nom de la procdure. Ensuite, on envoit la procdure ?ffichage la valeur
de la variable chaine (c'est--dire ce que contenait la variable nom, variable qui fut
dtruite lorsque la procdure >aisie se termina). Comme cette dernire procdure
n'a pas pour objet de modifier la valeur de cette variable, on n'utilise pas le mot cl
ar, ainsi, la valeur de la variable chaine ne pourra pas tre modifie par la
procdure. Par contre, mme sans ar, la valeur de la variable info pourrait varier
au sein de la procdure si on le voulait mais cela n'aurait aucune influence sur la
variable globale chaine. Comme cette variable info n'est dfinie que dans la
procdure, elle n'existera plus quand la procdure sera termine.
Il faut savoir qu'une procdure paramtre peut accepter, si on le dsire, plusieurs
variables d'un mme type et aussi plusieurs variables de types diffrents. Ainsi,
certaines pouront tres associes au ar, et d'autres pas. Si l'on dclare, dans une
procdure paramtre, plusieurs variables de mme type dont les valeurs de
certaines devront remplacer celles initiales, mais d'autres non ; il faudra dclarer
sparment (sparation par une virgule ;) les variables dclare avec ar et les
autres sans ar. Si on dclare plusieurs variables de types diffrents et qu'on veut
que leurs changements de valeur affecte les variables globales, alors on devra placer
devant chaque dclaration de types diffrents un ar.
Syntaxes
Procedure identifiant+ar var$- var% : type$ ; var/ : type$3 ;
!egin
...
End ;
Procedure identifiant+ar var$ : type$ ; ar var% : type%3 ;
!egin
...
End ;
CHAPITRE VIII : Fonctions

Quant aux fonctions, elle sont appeles partir du programme principal, d'une
procdure ou d'une autre fonction. Le programme affecte des valeurs leur
variables (comme pour les procdures paramtres, il faudra faire attention l'ordre
d'affectation des variables). Ces fonctions, aprs lancement, sont affectes elles-
mmes d'une valeur intrinsque issue de leur fonctionnement interne. Il faut
dclarer une fonction en lui donnant tout d'abord un identidiant (c'est--dire un nom
d'appel), en dclarant les variables locales dont elle aura besoin et enfin, il faudra
prciser le type correspondant la valeur que prendra en elle-mme la fonction
(string, rea', etc.). Attention, on ne peut pas affecter un type complexe (array,
record) une fontion : seuls les types simples sont accepts (voir chapitre 2! sur les
types simples et complexes). De plus, comme le montre les syntaxes suivantes, on
peut fabriquer une fonction sans paramtre (ex: random). Il ne faut surtout pas
oublier, en fin (ou cours) de fonction, de donner une valeur la fonction c'est--dire
d'affecter le contenu d'une variable ou le rsultat d'une opration (ou autre...)
l'identifiant de la fonction (son nom) comme le montrent les syntaxes suivantes.
Syntaxes
Function nom de fonction +variable : type 3 : type ;
ar dclaration de variables locales ;
!egin
...
commandes
...
nom de fonction :8 une valeur ;
End ;
Function nom de fonction : type ;
ar dclaration de variables locales ;
!egin
...
commandes
...
nom de fonction :8 une valeur ;
End ; ?
Program exemple10 ;
Uses crt ;
Function e"posant + i - A : integer 3 : integer ;
ar i2 - a : integer ;
!egin
i2 :8 ( ;
For a :8 ( To A %o i2 :8 i2 4 i ;
e"posant :8 i2 ;
End ;
ar resultat, ", n : integer ;
!E"#$
*rite +,(ntre) un nombre : ,3 ;
/ead'n +13 ;
*rite+,(ntre) un e"posant : ,3 ;
/ead'n +n3 ;
resultat :8 e"posant + 1 - n 3 ;
*rite'n + resultat 3 ;
/ead'n ;
E$%&
CHAPITRE IX : Audio

1. 0ound ... Dela1 ... 3osound
2. Chr 4 5 6

!" 6ound """ #elay """ :osound
Pour faire du son, il faut indiquer la frquence (f) en Hz et le dlay (t) en ms.
Syntaxe
6ound + . 3 ;
%e'ay + t 3 ;
$osound ;
Program exemple11 ;
Uses crt ;
ar i- . : integer ;
!E"#$
For i :8 ( to 20 do
!egin
For . :8 H00 to (000 do sound + . 3 ;
%e'ay +(03 ;
End ;
$osound ;
E$%&

$" Chr 8 ; 9
La fonction Chr permet d'obtenir le caractre de la table ASCII correspondant au
numro. Il se trouve que les 31 premiers caractres correspondent des fonctions :
beep, delete, insert, return, esc... Le caractre 7 correspond au beep.
Syntaxes
*rite + chr + I 3 3 ;
*rite + LI 3 ;
CHAPITRE X : Manipulation de fichiers

1. Dclaration
2. 7ecture8 criture
3. Fonctions supplentaires

!" #claration
Pour utiliser un ou des fichiers tout au long d'un programme, il faudra l'identifier par
une variable dont le type est fonction de l'utilisation que l'on veut faire du fichier. Il
existe trois types de fichiers :
Les fichiers textes (Te1t),
qui sont crits au format texte (chanes de cractres, nombres) dans lesquels
ont peut crire et lire ligne par ligne ou la file avec les procdures
*rite()n) et /ead()n). Chaque fin de ligne du fichier se termine par les
caractres 10 et 13 de la table ASCII qui signifient respectivement retour
chariot et passage # la ligne. Ces deux derniers caractres sont transparent
au programmeur. On pourra donc y crire ou y lire indifframent des chanes
ou des nombres, cela dpend du type que l'on affecte la variable passe en
paramtre aux procdures d'entre/sorties (voir plus bas).
Note S'il y a lieu de faire une convertion nombre/chane, le compilateur le
fait tout seul, par contre si le type de la variable ne correspond pas avec la
donne lue dans le fichier et qu'aucune convertion n'est possible (exemple :
*rite)n+.- 1:/ea'3; alors que le fichier ne contient que des lettres), alors
cela produit une erreur.
Syntaxe
ar f : Te1t ;
Les fichiers ty,'s (Fi'e =.),
qui sont des fichiers crits sur disque telles que les donnes se prsentent en
mmoire. C'est--dire que la taille du fichier rsultera directement et
exactement de la taille en mmoire qu'occupe telle ou telle variable. Cela
accrue la vitesse d'accs aux donnes du fichiers. Mais le plus grand
avantage c'est que l'on obtient ainsi des fichiers parfaitement formats, c'est-
-dire qu'on peut y lire et crire directement des variables de type structur
qui contiennent plusieurs champs de donnes ( voir chap ype) sans avoir
se soucier des divers champs qu'elles contiennent. Il va sans dire que ce type
de fichier est prfrable tous les autres.
Syntaxe
ar f : Fi'e =. type ;
.xem,le
ar f : Fi'e =. #nteger ;
Les fichiers tout court ! (Fi'e),
qui sont des fichiers dont on ne connait pas le contenu. N'ayant aucune
information sur la structure des donnes, n'ayant aucune convertion faire,
la lecture et son criture en sont plus rapide. Mais sont utilit est bien maigre
: part faire une simple copie d'un fichier dans un autre...
Syntaxe
ar f : Fi'e ;

$" <ecture= criture
Avant de travailler sur un fichier, il faut le dclarer en lui affectant une variable qui
servira dsigner le fichier tout au long du programme. 0ssign s'applique tous les
types de fichiers (Te1t, Fi'e =. et Fi'e).
Syntaxe
0ssign + variable d'appel - nom du fichier 3 ;
Ensuite, il faut renvoyer le pointeur au dbut du fichier pour pouvoir lire (Te1t, Fi'e
=. et Fi'e) ou crire (Fi'e =. et Fi'e) partir du dbut du fichier. Attention, on ne
peut pas crire sur un Te1t avec /eset !
Syntaxe
/eset + variable d'appel 3 ;
Il est possible pour le type Fi'e uniquement, de spcifier la taille de chaque bloc de
donne lu ou crit sur le fichier, en rajoutant en argument /eset une variable (ou
un nombre directement) de type *ord (entier) spcifiant cette taille en octet. Cela
ncessite de connatre la taille mmoire de chaque type de variables (voir chap "V
"Diffrents types de variables"). Par exemple cette taille vaudra 6 si on veut lire des
nombres rels (/ea') ou bien 256 pour des chanes de caractres (6tring). Le fait
que la variable taille soit de type *ord implique que sa valeur doit tre comprise
entre 0 et 65535. Par dfaut, taille=128 octets.
Syntaxe
/eset + variable d'appel- taille 3 ;
Pour crer un fichier qui n'existe pas ou bien pour en effacer sont contenu, on
emploi /e*rite qui pemret d'effectuer des lectures (Fi'e =. et Fi'e) et critures
(Te1t, Fi'e =. et Fi'e). Attention, on ne peut pas lire sur un Te1t avec /e*rite !
Syntaxe
/e5rite + variable d'appel 3 ;
Tout comme /eset, /e*rite permet de spcifier une taille aux changes de donnes
sur un Fi'e seulement (aussi bien en criture qu'en lecture). Avec /e*rite c'est le
cas ou le fichier n'existe pas encore alors qu'avec /eset c'est le cas ou il existe dj.
Syntaxe
/e5rite + variable d'appel- taille3 ;
+ableau des corres,ondances entre ,roc'dures et ty,es de fichiers
Syntaxe
+y,es de fichiers associ's
Lecture Ecriture
/eset+f3
- Te1t
- Fi'e =.
- Fi'e
- Fi'e =.
- Fi'e
/e*rite+f3
- Fi'e =.
- Fi'e
- Te1t
- Fi'e =.
- Fi'e
/eset+f- taille3 Fi'e Fi'e
/e*rite+f- taille3 Fi'e Fi'e
Pour lire le contenu d'une ligne d'un fichier Te1t ouvert, on utilise la mme
instruction qui permet de lire la valeur d'une variable au clavier savoir /ead)n.
Sera alors lue, la ou les variable(s) correspondant au contenu de la ligne courante
(celle pointe par le pointeur). Si la ou les variable(s) n'tai(en)t pas de taille
suffisament grande pour contenir toutes les donnes de la ligne, alors l'exdent
serait perdu.
Syntaxes
/ead)n + variable d'appel- variable 3 ;
/ead)n + variable d'appel- var$- var%- ... var3 ;
Pour crire sur un fichier Te1t, il suffit d'employer la commande *rite)n.
Syntaxes
*rite)n + variable d'appel- variable 3 ;
*rite)n + variable d'appel- var$- var%- ... var3 ;
Les procdures /ead et *rite s'utilisent respectivement de la mme manire que
/ead)n et *rite)n mais s'appliquent aux Fi'e =. aussi bien qu'aux Te1t.
Pour lire et crire sur un Fi'e, il faut utiliser les procdures !'ocK/ead et
!'ocK*rite.
Syntaxes
!'ocK/ead + f- variable- nbr 3 ;
!'ocK/ead + f- variable- nbr- result 3 ;
!'ocK*rite + f- variable- nbr 3 ;
!'ocK*rite + f- variable- nbr- result 3 ;
!'ocK/ead lit sur le fichier f de type Fi'e une variable qui contiendra un nombre de
bloc mmoire (dont la taille est dfinie par /eset ou /e*rite) gale nbr. La
variable facultative result prend pour valeur le nombre de bloc effectivement lu (car
il peut y en avoir moins que prvu initialement).
!'ocK*rite crit sur le fichier f de type Fi'e une variable sur un nombre de bloc
mmoire gale nbr. La variable facultative result prend pour valeur le nombre de
bloc effectivement crit (car il peut y en avoir plus crire que ne le permet
l'initialisation par /eset ou /e*rite). Dans le cas ou cette variable result est
ommise et qu'il est impossible d'crire autant de blocs que voulu, il est gnr une
erreur !
Note Les variables nbr et result doivent tre de type *ord.
+ableau des corres,ondances entre ,roc'dures et ty,es de fichiers
Syntaxe +y,es de fichiers associ's
*rite)n Te1t
/ead)n Te1t
*rite
- Te1t
- Fi'e =.
/ead
- Te1t
- Fi'e =.
!'ocK*rite Fi'e
!'ocK/ead Fi'e
Il est impratif de fermer les fichiers ouverts pendant un programme Turbo Pascal
avant de terminer le programme sous peine de voir les donnes inscrites en son sein
perdues.
Syntaxe
C'ose + variable d'appel 3 ;
Il est possible de rappeler un fichier Te1t en cours de programme mme s'il a dj
t referm grce sa variable d'appel. Et alors la position courante du curseur sera
la fin du fichier. Ne fonctionne qu'en criture et qu'avec un Te1t.
Syntaxe
0ppend + variable d'appel 3 ;
La syntaxe 0ppend est quivalente au bloc suivant :
!egin
/eset+variable d'appel3 ;
6eeK+variable d'appel- Fi'e6ize+variable d'appel33 ;
End ;
Program exemple12 ;
Uses crt- dos ;
ar . : te1t ;
nom : string ;
choi1 : char ;
Procedure lecture ;
!egin
0ppend +.3 ;
/eset +.3 ;
/ead'n +.- nom3 ;
*rite'n +nom3 ;
End ;
!E"#$
C'rscr ;
0ssign +.- ,init.t"t,3 ;
/e5rite +.3 ;
*rite +,(ntre) un nom d''utilisateur : ,3 ;
/ead'n +nom3 ;
nom :8 ,Dernier utilisateur : , + nom ;
*rite'n +.- nom3 ;
C'ose +.3 ;
*rite +,*oule).vous lire le fichier init.t"t 7 @+AB ,3 ;
/ead'n +choi13 ;
#. +choi18,=,3 or +choi18,o,3 then lecture ;
E$%&
Ce programme e"emple$% illustre les principales commandes qui permettent de
travailler sur des fichiers de type texte. Ici, le programme rinitialise chaque
lancement le fichier init.t"t et y inscrit une valeur entre par l'utilisateur (son nom,
en l'occurrence). Il permet galement l'utilisateur de lire le contenu du fichier (qui
ne contient qu'une seule ligne de texte).

%" &onctions supplmentaires
Il est possible de dplacer volont le curseur en spcifiant la procdure suivante
le fichier de type Fi'e =. ou Fi'e ainsi que le numro de l'octet (le premier pour
numro :"0", le second : "1", le troisime : "2", etc...) o l'on veut mettre le
curseur. Cela s'appelle l'accs direct un fichier contrairement l'accs squentiel
qui conciste parcourir toutes les informations prcdant celle qu'on cherche. Cette
dernire mthode squentielle est toutefois la plus utilise. De plus, 6eeK n'est pas
utilisable avec des Te1t.
Syntaxe
6eeK + variable d'appel- position 3 ;
Program exemple13 ;
Uses crt- dos ;
ar . : te1t ;
s : string ;
!E"#$
0ssign +.- ,c:Cautoe"ec.bat,3 ;
/eset +.3 ;
*rite'n +,?ffichage du contenu du fichier ?U!+(D(C.9?! : ,3 ;
/epeat
/ead'n +.- s3 ;
*rite'n +s3 ;
Unti' eo. +.3 ;
E$%&
Ce programme e"emple$/ permet de lire un fichier texte en son entier et d'afficher
son contenu l'cran. La fonction eo. permet de vrifier si le pointeur arrive en fin
de fichier (elle aura alors la valeur true).
Il est possible de connatre la taille d'un fichier en octets lorsque celui-ci est dclar
en .i'e et non plus en te1t.
Syntaxe
Fi'e6ize + variable d'appel 3 ;
Il est possible de connatre la position du pointeur dans fichier en octets lorsque
celui-ci est dclar en .i'e o. byte. La fonction suivante prend pour valeur un type
'ongint.
Syntaxe
Fi'ePos + variable d'appel 3 ;
Program exemple14 ;
ar . : .i'e o. byte ;
tai''e : 'ongint;
!E"#$
0ssign +.- ,c:Cautoe"ec.bat,3 ;
/eset +.3 ;
tai''e :8 .i'esize +.3 ;
*rite'n +,!aille du fichier en octets :,- tai''e 3 ;
*rite'n +,Dplacement du curseur...,3 ;
6eeK +.- tai''e div 23;
*rite'n +,&e pointeur se trouve # l''octet : ,- .i'epos +.3 3 ;
C'ose +.3 ;
E$%&
Le programme e"emple$8 dclare le fichier autoe"ec.bat comme .i'e o. byte et
nom plus comme te1t, puisqu'on ne dsire plus crire du texte dedans mais
seulement connatre sa taille et accessoirement faire mumuse avec le pointeur.
Il est possible de savoir si lors de la lecture d'un fichier, on se trouve ou non en find
de ligne ou de fichier grce aux fonctions suivantes qui renvoient une valeur de type
boo'ean.
Syntaxe
ar . : Te1t ;
Eo. + . 3 ; M =ointeur en fin de fichier. N
6eeKEo)n + . 3 ; M =ointeur en fin de ligne. N
Autre syntaxe
ar . : Fi'e ;
Eo)n + . 3 ; M =ointeur en fin de ligne. N
6eeKEo. + . 3 ; M =ointeur en fin de fichier. N
Program exemple15 ;
ar . : te1t ;
i- A : string ;
!E"#$
0ssign +.- ,c:Cautoe"ec.bat,3 ;
/eset +.3 ;
*hi'e not seeKeo. +.3 do
!egin
#. seeKeo'n +.3 then read'n ;
/ead +.- A3 ;
*rite'n +A3 ;
End ;
E$%&
On peut galement effacer un fichier pralablement ferm.
Syntaxe
Erase +.3 ;
On peut aussi renomer un fichier.
Syntaxe
/ename +.- nouveau nom 3 ;
Il est possible de tronquer un fichier, c'est--dire de supprimer tout ce qui se trouve
aprs la position courante du pointeur.
Syntaxe
Truncate +.3 ;
Il est possible d'appeler un fichier excutable externe partir d'un programme crit
en Pascal, et de lui assigner des paramtres grce la commande E1ec. Cette
commande ncessite un commentaire de compilation : M O< OF000-0-0 N.
Syntaxe
65apectors ;
E1ec + nomEchemin- param-tres 3 ;
65apectors ;
Pour tlcharger un programme utilisant la commande E1ec pour utiliser le
compacteur ARJ grce une interface ulta-simplifie : A.PAS.
CHAPITRE XI : Graphismes

Les instructions qui vont suivre ncessitent l'unit graph. Pour crer des graphismes,
il faut tout d'abord initialiser le mode graphique de la manire suivante pour un
cran VGA 640x480x16 :
Uses "raph ;
ar "0- "0Gi : integer ;
!E"#$
#nit"raph +"0- "0Gi- ,c:CbpCbgi,3 ;
E$%&
A!!.-!$O- / le chemin du rpertoire BGI peut changer d'une machine l'autre. Par
exemple, la Doua, c'est : c:\turbo7\bgi.
Ici, la valeur VGA correspond au pilote graphique, VGAHi au mode graphique, on
obtient en gnrale une rsolution de 640x480 pour 16 couleurs. Il est
thoriquement ncessaire d'crire la commande suivante : c'osegraph ; en fin de
programme afin de retourner en mode texte, mais on peut s'en passer.
Pour une autodtection du mode graphique maximal admisible par le systme si
celui-ci est infrieur : 640x480x16 qui est la rsolution maximale de l'unit Graph
de Turbo Pascal 7.0 (autodtection ncessaire pour les trs vieux ordinateurs et aux
examens...), initialisez de la manire suivante :
Uses "raph ;
ar Pi'ote- <ode : integer ;
!E"#$
Pi'ote :8 %etect ;
#nit"raph+Pi'ote- <ode- ,c:Cturbo2Cbgi,3 ;
&&&
C'ose"raph ;
E$%&
)ilote gra,hi(ue
Nom !aleur
CGA 1
EGA 9
VGA 3
0ode gra,hi(ue
#'solution !aleur
640x200 0
640x320 1
640x480 2
A0e1 tou2ours en t3te 4ue la r5solution %e l65cran grap'i4ue7 en
!urbo +ascal7 est au ma&imum %e 89:&9;: pi&els et %e )8 couleurs
<sans tri(ouillage=.
A noter que l'origine de l'cran graphique se trouve en haut gauche de l'cran,
CHAPITRE XII : Affichage l'cran

En rgle gnrale, les programmes dialoguent avec l'utilisateur : entres et sorties
de donnes respectivement avec les commandes read et 5rite. La ncessit
pratique ou la volont de prsenter une interface plus conviviale imposent
l'utilisation d'instructions spcifiques : effacer une ligne seulement d'cran, changer
la couleur des lettres. Ce chapitre numre la quasi-totalit des instructions en
Pascal vous permettant de faire des oprations graphiques l'cran tout en restant
en mode texte sous MS-DOS.
C'r6cr ;
Pour effacer tout l'cran et placer le curseur en haut gauche de l'cran, trs utilis
au dmarrage de chaque programme.
%e')ine ;
Efface la ligne courante c'est--dire celle qui contient le curseur.
#ns)ine ;
Insre une ligne vide la position courante du curseur.
C'rEo' ;
Pour effacer une ligne l'cran partir de la position courante du curseur. Note : la
position du curseur n'est pas modifie.
A0e1 tou2ours en t3te 4ue la r5solution %e l65cran te&te7 en !urbo
+ascal7 est %e ;: colonnes par >" lignes et %e )8 couleurs.
Te1t!acKground + 1 3 ;
Choix d'une couleur de fond pour le texte qui sera tap par la suite. x est le numro
(entre 0 et 15) de la couleur, il est tout fait possible d'y mettre une variable de
type integer a la place de x. Pour la liste des couleur, voir le chapitre #raphismes.
Te1tCo'or + 1 3 ;
Choix d'une couleur pour le texte qui sera affich par la suite.
Te1tCo'or + 1 + b'inK 3 ;
Choix d'une couleur pour le texte qui sera affich en mode clignotant.
*indo5 + 1(- y(- 12- y2 3 ;
Pour crer une fentre l'cran. x1, y1 sont les coordonnes du caractre en haut
gauche et x2, y2 sont les positions du caractre en bas droite. La rsolution de
l'cran en mode texte est de 80 colonnes par 25 lignes.
"oto@B + 1- y 3 ;
Pour positionner le curseur la position voulue dans l'cran ou dans une fentre
Window. x et y sont respectivement le numro de colonne et le numro de ligne
(axes des abscisses et des ordonnes).
*here@ ;
*hereB ;
Pour connatre la position courante du curseur. Ce sont des fonctions et donc
renvoient de manire intrinsque la valeur. C'est--dire que *here@ prend la valeur
du numro de colonne.
Gightideo ;
Pour slectionner le mode haute densit des caractres. C'est--dire que la couleur
slectionne pour l'affichage du texte est modifie en son homologue plus vive dans
la liste des couleurs (liste de 15 couleurs).
)o5ideo ;
Au contraire, pour slectionner le mode faible densit de la couleur des caractres.
C'est--dire que la couleur slectionne pour l'affichage du texte est modifie en son
homologue moins vive dans la liste des couleurs.
$ormideo ;
Pour revenir au mode normal de couleur de texte, c'est--dire pour pouvoir utiliser
indiffremment les couleurs vives et ternes.
Te1t<ode + 1 3 ;
Pour slectionner un mode spcifique d'affichage du texte. x est la valeur-code du
mode dsir.
CHAPITRE XIII : Caractres et chanes de caractres

1. Cha9nes de caract:res (type 6tring)
2. Caract:res seuls (type Char)

!" Cha>nes de caract?res
Le type 6tring dfini des variables "chanes de caractres" ayant au maximum 255
signes, ces derniers appartenant la table ASCII. Une chane peut en contenir moins
si cela est spcifi lors de la dclaration o le nombre de signes (compris entre 1 et
255) sera mis en crochet la suite du type 6tring. Le premier cractre de la chane
a pour indice 1, le dernier a pour indice 255 (ou moins si spcifi lors de la
dclaration).
Syntaxe
ar chaine : 6tring ;
telephone : 6tringP(0Q ;
Lorsqu'une valeur est affecte une variable chane de caratres, on procde
comme pour un nombre mais cette valeur doit tre entre quotes. Si cette valeur
contient une apostrophe, celle-ci doit tre double dans votre code.
Syntaxe
variable :8 valeur ;
animal :8 ,l''abeille, ;
Note tr1s im,ortante le type 6tring est en fait un tableau de caractres une
dimension dont l'lment d'indice zro contient une variable de type Char et dont le
rang dans la table ASCII correspond la longueur de la chane. Il est donc possible,
une chane de caractre tant un tableau de modifier un seul caractre de la chane
grace la syntaxe suivante :
chainePinde"Q:8lettre;
Program Chaine;
ar nom:6tring;
!E"#$
nom:8,(tivant,;
nomP2Q:8,Z,;
nomP0Q:8Chr+F3;
*rite)n+nom3;
nomP0Q:8Chr+2D3;
*rite+nom-,.tagada,3;
E$%&
L'exemple Chaine remplace la deuxime lettre de la variable nom en un "Z"
majuscule, puis spcifie que la variable ne contient plus que 4 caractres. Ainsi la
valeur de la variable nom est devenue : (Zi. Mais aprs, on dit que la variable nom
a une longueur de 28 caractres et on s'apperoit l'cran que les caractres de
rang suprieur 4 ont t conservs et des espaces ont t insrs pour aller
jusqu' 28 ! Ce qui veut dire que la chane affiche n'est pas toujours la valeur totale
de la chane relle en mmoire.
Attention cependant aux chanes dclares de longueur spcifie (voir Chapitre 2;
sur !ypes simples et structurs exemple: Type nom:6tringP20Q;) dont la longueur
ne doit pas dpasser celle dclare en dbut de programme.
Concat + s(- s2- sE- &&&- sn3 ;
Cette fonction concatne les chanes de caractres spcifies s(, s2, etc. en une
seule et mme chane. On peut se passer de cette fonction grce l'oprateur + :
s( + s2 + sE + &&& + sn. Rappelons que les chanes de caractres sont
gnralement dfinies en string.
Syntaxes
s :8 Concat + s(- s2 3 ;
s :8 s( + s2 ;
Copy + s- i- A 3 ;
Fonction qui retourne de la chane de caractre s, un nombre A de caractres
partir de la position i (dans le sens de la lecture). Rappelons que i et A sont des
entiers (integer).
%e'ete + s- i- A 3 ;
Procdure qui supprime dans la chane nomme s, un nombre A de caractres
partir de la position i.
#nsert + s(- s2- i 3 ;
Procdure qui insert la chane s( dans la chane s2 la position i.
Pos + s(- s2 3 ;
Fonction qui renvoit sous forme de variable byte la position de la chane s( dans la
chane-mre s2. Si la chane s( en est absente, alors cette fonction renvoie 0
comme valeur.
6tr + 1- s 3 ;
Procdure qui convertit le nombre (#nteger ou /ea') 1 en chane de caractre de
nom s.
a' + 1- s- error 3 ;
Procdure qui convertit la chane de caractre de nom s en un nombre (#nteger ou
/ea') 1 et renvoie un code erreur error (de type integer) qui est gale 0 si la
conversion est possible.
Fi''Char + s- n- i 3 ;
Procdure qui introduit n fois dans la chane s la valeur i (de type !yte ou Char).

$" Caract?res seuls
Un caractre est une variable de type Char qui prend 1 octet (= 8 bits) en mmoire.
La table ASCII est un tableau de 256 caractres numrots de 0 255 o les 23
premiers sont associs des fonction de base de MS-DOS (Suppr, End, Inser, Enter,
Esc, Tab, Shift...) et tous les autres sont directement affichables (lettres,
ponctuations, symboles, caractres graphiques). Dans un programme en Pascal, on
peut travailler sur un caractre partir de son numro dans la table ASCII (avec la
fonction Chr+n3 ou Ln) ou directement avec sa valeur affichage entre quote ,,.
.xem,les
espace :8, ,;
lettre :8LF1;
carac :8Chr+$1%3;
+able "S233
Le type Char dfini des variables "caractre seul" ou "lettre" ayant 1 seul signe, ce
dernier appartenant la table ASCII.
Syntaxe
ar lettre : Char ;
Lorsqu'on donne une valeur une variable Char, celle-ci doit tre entre quotes. On
peut aussi utiliser les fonctions Chr et =rd ou mme une variable 6tring dont on
prend un caractre une position dtermine.
Syntaxe
lettre :8 chainePpositionQ ;
6trUpper + s 3 ;
Convertit une chane de caractres minuscules en MAJUSCULES. S'applique aux
tableaux de caractres.
Syntaxe de d'claration
ar s : 0rrayP(&&1Q o. Char
avec 1 la longueur ma"imale de la chaGne.
6tr)o5er + s 3 ;
Convertit une chane de caractres MAJUSCULES en minuscules. S'applique aux
tableaux de caractres.
Syntaxe de d'claration
ar s : 0rrayP(&&1Q o. Char
avec 1 la longueur ma"imale de la chaGne.
UpCase + K 3 ;
Cette fonction ne s'applique qu'aux caractres seuls (de type Char) pris dans une
chane s. Convertit un caractre minuscule en MAJUSCULE.
Syntaxe
For i :8 ( To )enght+s3 %o sPiQ :8 UpCase+sPiQ3 ;
Chr + 1 3 ;
Cette fontion renvoit un caractre Char correspondant au caractre d'indice 1 dans
la table ASCII.
.xem,le
K :8 Chr+H83 ;
=rd + y 3 ;
Cette fontion renvoit l'indice (en byte) correspondant au caractre y dans la table
ASCII. C'est la fonction rciproque de Chr.
.xem,le
i :8 =rd+,I,3 ;
CHAPITRE XIV : Crer ses propres units

Lorsque vous tapez un programme en Turbo Pascal, vous utilisez ncessairement un
certain nombre d'instructions (procdures ou fonctions) qui sont dfinies dans des
units extrieures au programme et qui stockent (souvent en langage assembleur)
la marche suivre pour l'excution d'une certaine instruction. Mme lorsque vous ne
spcifiez aucune unit par la commande Uses, l'unit 6ystem est automatiquement
associe au programme (inscrite dans l'excutable compil). Quant aux autres
units fournies avec Turbo Pascal : Crt, %os, "raph, Printer, elles contiennent des
instructions spcifiques qui ne pourront tres appeles depuis le programme que si
les units correspondantes sont dclares par la commande Uses. Le but de ce
chapitre est d'apprendre fabriquer de ses propres mains une unit qui pourra tre
appele depuis un programme crit en Turbo Pascal. Prcisons qu'une unit s'crit
dans un fichier au format +AS depuis le logiciel de programmation Turbo Pascal.
Mais une fois crite, l'unit doit imprativement tre compiles (au format !+U) pour
tre utilisable plus tard par un programme.
Un programme en Pascal dbute par la dclaration (certes facultative) du nom de
programme comme suit :
Program nomJduJprogramme ;
De manire analogue, une unit doit tre (imprativement) dclare comme telle :
Unit nomJdeJl'unit ;
Ensuite, vient une partie dclarative trs spciale qui catalogue le contenu de l'unit,
cette partie est trs similaire celle d'un programme puisqu'on y dclare les
constantes, les variables, les procdures, fonctions... et mme d'autres units. Tout
comme pour un sous-programme (procdure, fonction), les identificateurs d'une
unit n'existent que dans cette dernire (les variables sont dynamiques), ils peuvent
donc tre les mmes que ceux utiliss dans d'autres units, sous-programmes ou
mme dans le programme principal. Cette partie dclarative obligatoire s'crit selon
la syntaxe suivante :
#$TE/F0CE
Uses &&&;
Const &&&;
ar &&&;
Procedure &&&;
Function &&&;
Dsormais, passons aux choses srieuses, il faut passer la partie la plus technique,
c'est--dire crire le code fonctionnel : les procdures et/ou fonctions qui seront
appeles par le programme principal.
Syntaxe
#<P)E<E$T0T#=$
Function Tan + a : /ea' 3 : /ea' ;
!egin
Tan :8 6in+a3;Cos+a3 ;
End ;
Et la touche finale : un bloc !egin ... End& Qui peut trs bien ne rien contenir.
Syntaxe
!E"#$
E$%&
Vous pouvez tlcharger l'unit !A-?!.+AS et le programme !A-.+AS
A noter que ses quatres parties doivent toutes imprativement apparatre dans le
code.
CHAPITRE XV : Boolens et tables de vrit

Les boolens ont t invents par Monsieur Boole dans le but de crer des fonctions
de base qui, associes les unes aux autres, pourraient donner d'autres fonctions
beaucoup plus complexes.
Les boolens (boo'ean en anglais et en Pascal) ne peuvent prendre que deux
valeurs possibles : vrai (true) ou faux (.a'se) et sont cods en 0 ou 1. Ces valeurs
sont analogues aux tats possibles d'un interrupteur : ouvert ou ferm, d'une
lampe : allume ou teinte, d'un composant lectronique du type transistor :
conducteur ou isolant.
En bref, les boolens ne sont utiles que pour connatre un tat : vrai ou faux et en
gnral pour caractriser si une condition est vraie ou fausse. Vous les utilisez dj
sans toujours le savoir dans les blocs IF : si telle condition est vraie, alors...
Boole inventa une algbre qui porte son nom : l'alg-bre de 9oole. C'est cette
dernire qui nous permet de faire des oprations sur les boolens grce des
oprateurs (voir chapitre 2 sur les oprateurs) : NOT (non), OR (ou), AND (et), XOR
(ou exclusif), NAND (inverse de et), NOR (inverse de ou). En Turbo Pascal 7.0
n'existent que les oprateurs $=T, =/, 0$% et @=/. Qui suffisent (en les combinant)
retrouver les autres. Ainsi, NAND=NOT(AND) et NOR=NOT(OR). Les tables de vrit de
oprateurs logiques disponibles sur Turbo Pascal 7.0 sont en bas de page.
Comme toute variable, il faut dclarer une variable boolenne dans la partie
dclarative en en-tte du programme.
Syntaxe
ar nomdevariable : boo'ean ;
Pour donner une valeur une variable boolenne, on procde comme pour tout
autre type de variable, l'aide du commutateur :8 .
Syntaxes
nomdevariable :8 true ;
nomdevariable :8 .a'se ;
Note par dfaut, une variable boolenne est FALSE (tout comme une variable
INTEGER est gale zro lors du lancement du programme).
On peut bien videmment utiliser une structure IF.
Syntaxe
#. condition then nomdevariableboolenne :8 true ;
Il existe une autre faon de donner la valeur true (ou false) une telle variable, bien
plus simple qu'une structure IF.
Syntaxe
nomdevariable :8 condition ;
.xem,le
test :8 +1?(003 and +u8,coucou,3 ;
Dans une structure conditionnelle (#., Unti', *hi'e), on peut avantageusement
utiliser des boolens sans spcifier sa valeur qui sera alors prise par dfaut gale
true. C'est--dire que si on ne prcise pas la valeur d'une variable boolenne dans
une structure IF, par exemple, le compilateur Turbo Pascal se dira
systmatiquement : si variable est true, alors faire. Il devient donc inutile de
spcifier la valeur de la variable dans ce cas l.
Syntaxes
#. nomdevariableboolenne then instruction ;
/epeat
instructions
Unti' nomdevariable ;
*hi'e nomdevariable do instruction end ;
Nous avons vu plus haut que les oprateurs spcifiques aux boolens (NOT, OR,
AND, XOR) pouvaient se composer pour donner des expressions plus complexes. Il
est bien entendu possible d'introduire dans ces expressions le oprateurs
relationnels (=, <, >, <=, >=, <>) et plus gnralement tous les autres oprateurs
disponibles en Turbo Pascal. Pour pouvez mme utiliser directement des expressions
qu'elles soient mathmatiques ou non.
.xem,les
test :8 +'enght+u3>8 203 or ++sin+a34pi3 > 13 ;
Ici, la variable boolenne test devient vraie si la longueur de la chane u n'excde
pas 20 caractres ou si le sinus de l'angle a multipli par la valeur de pi est
strictement infrieur la valeur de x.
#. +a803 or ++b803 and +c8033 then 5rite'n+,&a lampe est
allume,3 ;
Ici, criture l'cran d'un message si a est nul ou si b et c sont simultanment nuls.
Note si vous faites afficher l'cran la valeur d'une variable boolenne, il
s'affichera FALSE ou TRUE (selon sa valeur effective) en caractres majuscules.

Ta3les de vrit des oprateurs logiues :
N4+
5 N4+ 5
.a'se true
true .a'se
"N-
5 6 5 "N- 6
.a'se .a'se .a'se
.a'se true .a'se
true .a'se .a'se
true true true
4#
5 6 5 4# 6
.a'se .a'se .a'se
.a'se true true
true .a'se true
true true true
54#
5 6 5 54# 6
.a'se .a'se .a'se
.a'se true true
true .a'se true
true true .a'se
CHAPITRE XVI : Gestion des dates et heures

Le systme de l'ordinateur travaille avec l'horlogue quartz qui donne le tempo de
calcul. Cette horloge possde sa propre date et heure qu'il est possible d'afficher ou
de modifier. A partir du prompt MS-DOS, il suffit d'utiliser les commandes %ate ou
time, mais en Turbo Pascal, c'est un peut plus dlicat. En effet, en pascal, il est
ncessaire de dclarer un grand nombre de variables qu'il faut formater avant
l'affichage.
Note toutes les instructions qui suivent ncessites l'unit dos.
"et%ate +an- mois- 4our- 4oursem3 ;
Pour obtenir la date courante du systme, avec an qui est le numro de l'anne
(compris entre 1980 et 2099), mois : le numro du mois (1 12), 7our : le numro
du jour dans le mois (1 31) et 7oursem : le numro du jour dans la semaine (0
6, le zro correspondant au samedi). Ces variables sont dclares en 5ord qui est un
ensemble d'entier suprieur au type integer puisqu'il contient les entiers positifs de
0 65535.
6et%ate +an- mois- 4our3;
Pour changer la date du systme. Ici, les variables obissent aux mmes conditions
dcrites prcdemment. Si une date entre est invalide, alors elle ne sera pas prise
en compte et la date restera inchange.
"etTime +heure- minute- seconde- cent3;
Pour obtenir l'heure courante avec heure qui est le numro de l'heure (comprise
entre 0 et 23), minute : numro de la minute (0 59), seconde : numro de la
seconde (0 59) et cent : les centimes de seconde (0 99).
6etTime +heure- minute- seconde- cent3;
Pour changer l'heure systme. Les variables obissant aux mmes conditions
dcrites plus haut. Si une heure entre est invalide, alors elle ne sera pas prise en
compte et l'heure courante n'en sera aucunement affecte.
Vous pouvez tlcharger le programme annot et explicatif DA!..+AS
"etFTime +.- heure3;
Pour obtenir la date de dernire modification de fichier (qui est affiche dans
l'Explorateur de Windows 95). Ici, f est une variable d'appel de fichier (.i'e, .i'e
o. &&& ou te1t) et heure est une variable de type 'ongint(qui est un ensemble de
nombres entiers relatifs compris entre -2147483648 et 2147483647).
6etFTime +.- heure3;
Vous l'aurez devin, c'est la rciproque de l'instruction "etFTime.
UnpacKTime +heure- dt3;
Une information obtenue avec l'instruction "etFTime est illisible sans avoir t
dcode avec cette l'instruction o heure est la mme variable que prcdemment
et dt est une variable de type datetime. Ensuite pour pouvoir utiliser les
informations contenues dans dt, il faut les sortir une par une : dt8hour (spars par
un point, comme pour les types) reprsente l'heure, dt8min : les minutes, et dt8sec
: les secondes.
PacKTime +dt- heure3;
Cette instruction est l'inverse de la prcdente.
Vous pouvez tlcharger le programme annot FDA!..+AS
CHAPITRE XVII : Commandes systmes

Tous comme sous Dos ou Windows, il est quelquefois ncessaire pour certains types
de programmes (cryptage, installation, setup, etc.) de crer des rpertoires, de
dpacer des fichiers... Turbo Pascal 7.0 propose un certains nombre de commandes
permettant ces manipulations. Certaines d'entre elles seront discutes au cours de
ce chapitre. Les instructions suivantes ncessitent l'unit %os
1. *pertoires et lecteurs
2. Environneent <0/D!0
3. Fichiers
4. <oire vive

!" /pertoires et lecteurs
<K%ir + s 3 ;
Procdure qui cre le sous-rpertoire s qui est une variable de type string dans le
lecteur et repertoire courant.
/m%ir + s 3 ;
Procdure qui supprime le sous-rpertoire s qui est une variable de type string
dans le lecteur et repertoire courant.
Ch%ir + s 3 ;
Procdure qui change de rpertoire courant pour aller dans le rpertoire s avec s
une variable string.
"et%ir + b- s 3 ;
Procdure qui renvoit le rpertoire courant dans la variable s de type string du
lecteur lui-mme spcifi en byte.
2ode des lecteurs
!aleur 9ecteur
0 courant
1 A:
2 B:
3 C:
Program exemple16 ;
Uses dos ;
ar s-r-t:6tring ;
i:integer ;
!E"#$
"et%ir+0-s3 ;
*rite'n+,&ecteur et rpertoire courant: ,-s3 ;
MO#:N
*rite+,?ller dans Kuel rpertoire 7 :? ,3 ;
/ead)n+r3 ;
For i :8 ( To )ength+r3 %o rPiQ :8 UpCase+rPiQ3 ;
Ch%ir+r3 ;
#. #=/esu't >? 0 Then
!egin
*rite+r-, n''e"iste pas, voule).vous le crer @oAnB 7
:? ,3 ;
/ead'n+s3 ;
#. +s8,o,3 =r +s8,=,3 Then
!egin
<K%ir+r3 ;
*rite)n+,Cration de ,-r3 ;
End ;
End
E'se *rite'n+,+L : ,-r-, e"iste 5,3 ;
/ead)n ;
Ch%ir+s3 ;
E$%&
Ce programme e"emple$H affiche le rpertoire courant du disque courant et propose
l'utlisateur de changer de rpertoire. Si le rpertoire choisi n'existe pas, il le cre.
%isKFree + b 3 ;
Fonction qui retourne dans une variable de type 'ongint la taille libre en octets du
disque se trouvant dans le lecteur b spcifi avec b une variable de type byte.
%isK6ize + b 3 ;
Fonction qui retourne dans une variable de type 'ongint la capacit totale exprime
en octets du disque spcifi b, avec b de type byte.
Program exemple17 ;
Uses dos ;
!E"#$
*rite'n+%isK6ize+03- , octets,3 ;
*rite'n+%isK6ize+03 div (02F- , Lilo octets,3 ;
*rite'n+%isK6ize+03 div (0FDHIJ- , mga octets,3 ;
*rite'n+%isK6ize+03 div (0IEIF(D2F- , giga octets,3 ;
E$%&
Ce programme e"emple$2 affiche l'cran la capacit totale du disque dur sous
diffrents formats, en utilisant la proprit binaire du mode de stockage.

$" (nvironnement M65#O6
%osersion ;
Fonction qui retourne le numro de version du systme d'exploitation MS-DOS
prsent dans le systme sous la forme d'une variable de type 5ord.
Program exemple18 ;
Uses dos ;
ar version : 5ord ;
!E"#$
version :8 %osersion ;
*rite)n+,I>.D+> version : ,- )o+version3- ,&,- Gi+version33 ;
E$%&
Ce programme e"emple$F affiche le numro de la version rsidante de MS-DOS
correctement formate avec les fonctions )o et Gi qui renvoient respectivement le
byte infrieur et supprieur de l'information contenue dans la variable version.
%osE1itCode ;
Fonction qui renvoit le code sortie d'un sous-processus sous la forme d'une variable
de type 5ord.
!aleurs de -os.xit2ode
!aleur -escri,tion
0 Normal
1 Ctrl+C
2 Device error
3 Procdure Keep (TSR)
EnvCount ;
Fonction qui renvoit sous la forme d'une variable de type integer le nombre de
chanes de caractres contenues dans l'environnement MS-DOS.
Env6tr + i 3 ;
Fonction qui renvoit sous la forme d'une variable de type string la chanes de
caractres contenue dans l'environnement MS-DOS la position dans l'index
spcifie par la variable i de type integer.
Program exemple19 ;
Uses dos ;
ar i : integer ;
!E"#$
For i :8 ( To EnvCount %o *rite)n+Env6tr+i33 ;
E$%&
Ce programme e"emple$< affiche l'intgralit des chanes d'environnement MS-DOS
l'aide d'une boucle.
"etC!reaK + breaK 3 ;
Procdure qui permet de connatre la valeur (vrai ou fausse) de la variable breaK de
MS-DOS. Avec breaK de type boo'ean.
6etC!reaK + breaK 3 ;
Procdure qui permet de donner la valeur vrai ou fausse la variable breaK de MS-
DOS. Avec breaK de type boo'ean.

%" &ichiers
6etF0ttr + .- attr 3 ;
Procdure qui attribut au fichier . de type .i'e la variable attr de type 5ord.
"etF0ttr + .- attr 3 ;
Procdure qui renvoit dans la variable attr de type 5ord, la valeur de l'attribut du
fichier . dclar en .i'e.
2ode des attributs de fichiers
!aleur Nom -escri,tion
$01 ReadOnly Lecture seule
$02 Hidden Cach
$04 SysFile Systme
$08 VolumeID VolumeID
$10 Directory Rpertoire
$20 Archive Archive
$3F AnyFile tous
2ode des -os.rror
!aleur -escri,tion
2 Fichier non trouv
3 Rpertoire non trouv
5 Accs refus
6 Procdure non valable
8 Pas assez de mmoire
10 Environnement non valable
11 Format non valable
18 Plus de fichiers
FE1pand + .ichier 3 ;
Fonction qui rajoute le chemin d'accs du fichier spcifi dans le nom de ce fichier.
La variable .ichier doit tre de type Path6tr mais vous pouvez entrer directement
une chane de caractre.
F6p'it + .ichier- dir- name- e1t 3 ;
Procdure qui spare un nom de fichier (.ichier) de type Path6tren ses trois
composantes : chemin (dir) de type %ir6tr, nom (name) de type $ame6tr, son
extention (e1t)de type E1t6tr.
Program exemple20 ;
Uses dos ;
ar P : Path6tr ;
% : %ir6tr ;
$ : $ame6tr ;
E : E1t6tr ;
!E"#$
*rite+,(ntre) un nom de fichier : ,3 ;
/ead'n+P3 ;
F6p'it+P- %- $- E3 ;
*rite'n+,>on chemin : R,-%-,R- son nom : R,-$- ,R et son
e"tention : R,-E-,R&,3 ;
E$%&
Ce programme e"emple%1 demande l'utilisateur d'entrer un nom de ficher avec
son chemin, et il affiche sparment toutes les informations : le chemin, le nom et
l'extention.
Fi'e6ize + . 3 ;
Fonction qui renvoit sous la forme d'une variable 'ongint la taille du fichier .
dclar en .i'e.
Il est possible de rechercher des fichiers selon certains critres de nom, d'attribut,
d'extention avec les commandes FindFirst et Find$e1t. Regrouper ces commandes
permet de simuler aisment la commande D$R de MS-DOS ou l'option M(CN(MCN(M
de Windows.
Syntaxe
Program exemple21 ;
Uses dos ;
ar .ichier : 6earch/ec ;
!E"#$
FindFirst+,4&P06,- 0rchive- .ichier3 ;
*hi'e %osError 8 0 %o
!egin
*rite)n+.ichier&$ame3 ;
Find$e1t+.ichier3 ;
End ;
E$%&
Ce programme e"emple%$ permet de rechercher et d'afficher le nom de tous les
fichiers correspondants aux critres de recherche, c'est--dire les fichiers d'extention
+AS et d'attribut archive.
Voir chapitre 1! pour l'utilisation des fichiers externes, voir aussi chapitre 16 pour la
gestion des dates et heures.

'" Mmoire vive
<em0vai' ;
Cette fonction retourne la mmoire totale libre en octets.
<a10vai' ;
Cette fonction retourne la longueur en octets du bloc contigu le plus grand de la
mmoire vive. Trs utile pour connatre la taille allouable un pointeur en cours
d'excution.
CHAPITRE XVIII : Pseudo-hasard

Il est quelquefois ncessaire d'avoir recours l'utilisation de valeurs de
variables (scalaire ou chane) qui soient le fruit du hasard. Mais l'ordinateur
n'est pas capable de crer du vrai hasard. Il peut cependant fournir des
donnes dites alatoires, c'est--dire issues de calculs qui utilisent un grand
nombre de paramtres eux-mmes issus de l'horloge interne. On appelle cela
un pseudo-hasard car il est trs difficile de dceler de l'ordre et des cycles
dans la gnration de valeurs alatoires. Ainsi, on admettra que Turbo Pascal
7.0 offre la possibilit de gnrer des nombres alatoires.
Avant l'utilisation des fonctions qui vont suivre, il faut initialiser le gnraleur
alatoire (tout comme il faut initialiser la carte graphique pour faire des
dessins) avec la procdure /andomize. Cette initialisation est indispensable
pour tre sr d'obtenir un relativement "bon hasard" bien que ce ne soit pas
obligatoire.
Syntaxe
/andomize ;
On peut gnrer un nombre rel alatoire compris entre 0 et 1 grace la
fonction /andom.
Syntaxe
@ :8 /andom ;
On peut gnrer un nombre entier alatoire compris entre 0 et Y-1 grace la
fonction /andom+B3.
Syntaxe
@ :8 /andom+B3 ;
Program exemple22;
Uses crt ;
Const ma1 8 (00 ;
ar test : !oo'ean ;
1- y : #nteger ;
!E"#$
C'r6cr ;
/andomize ;
y :8 /andom+ma13 ;
/epeat
*rite+,(ntre) un nombre : ,3 ;
/ead)n+13 ;
test :8 +18y3 ;
#. test Then *rite)n+,+L, en plein dans le mille.,3
E'se #. 1?y Then *rite)n+,!rop grand.,3
E'se 5rite'n+,!rop petit.,3 ;
Unti' test ;
/ead)n ;
E$%&
Dans ce programme e"emple%% (programme Chance typique des
calculettes), on a gnration d'un nombre alatoire compris entre 0 et une
borne ma1 dfinie comme constante dans la partie dlarative du programme,
ici, on prendra la valeur 100. Le programme saisie un nombre entr par
l'utilisateur, effectue un test et donne la valeur true une variable boo'ean
nomme test si le nombre du joueur est correct, sinon, affiche les messages
d'erreurs correspondants. Le programme fonctionne l'aide d'une boucle
conditionnelle /epeat&&&Unti'.
CHAPITRE XIX : Paramtres et TSR

Lorsqu'on distribue un programme cr sur Turbo Pascal 7.0, il est de bon
augure de pouvoir passer des paramtres en ligne de commande lors du
lancement sous MS-DOS, de pouvoir rendre rsident en mmoire le dit
programme (Terminate Stay Resident).
7eep + error 3 ;
Procdure qui rend rsident en mmoir le programme (TSR). Et renvoit sous
la forme d'une variable error de type 5ord le code erreur de sortie.
Ncessite l'unit %os.
Syntaxe
7eep+03 ;
ParamCount
Fonction qui renvoit le nombre de paramtres passs en ligne de comande
lors du lancement du programme sous une valeur de type 5ord. Prsent dans
l'unit 6ystem (inutile spcifier).
Syntaxe
i :8 ParamCount ;
Param6tr+i3
Fonction qui renvoit la chane passe en commande selon sa place i (5ord)
dans l'index. Prsent dans l'unit 6ystem.
Syntaxe
s :8 Param6tr+i3 ;
Program exemple23 ;
Uses dos ;
ar i : 5ord ;
. : te1t ;
s : string ;
Procedure acces ;
!egin
*rite)n+,+L,3 ;
&&&
End ;
!E"#$
0ssign+.-,pass:ord.dat,3 ;
/eset+.3 ;
/ead)n+.-s3 ;
#. Param6tr+(3 8 s Then acces
E'se *rite)n+,?cces denied.,3 ;
E$%&
Ce programme e"emple%/ est protg d'accs. C'est--dire que seul un code
pass en ligne de commande (et contenu dans un fichier) permet
l'utilisateur de faire tourner le programme. On aurait put crer des
procdures paramtres dont les paramtres soient ceux passs en ligne de
commande, comme pour un compacteur en mode MS-DOS, par exemple.
CHAPITRE XX : Types

Il est possible de crer de nouveaux types de variables sur Turbo Pascal 7.0.
Il y a encore quelques dcennies, un "bon" programmeur tait celui qui savait
optimiser la place en mmoire que prenait son programme, et donc la
"lourdeur" des types de variables qu'il utilisait. Par consquent, il cherchait
toujours n'utiliser que les types les moins gourmands en mmoire. Par
exemple, au lieu d'utiliser un integer pour un champs de base de donne
destin l'ge, il utilisait un byte (1 octet contre 2). Voir chapitre 4 sur les
types de variables. Il est donc intressant de pouvoir manipuler, par
exemple, des chanes de caractres de seulement 20 signes : stringP20Q
(au lieu de 255 pour string, a tient moins de place). Les variables de types
simples comme celles de type complexe peuvent tre passes en paramtre
une procdure ou fonction que ce soit par l'identificateur principal ou par
ses champs.
1. %1pe siple
2. %1pe structurs 4enre=istreent6
3. %1pe intervalle
4. %1pe nur
5. Enre=istreent conditionnel

!" Type simple
On dclare les nouveaux types simple de variable dans la partie dclarative
du programme et avant la dclaration des variables utilisant ce nouveau
type.
Syntaxe
Type nomJduJtype 8 nouveauJtype ;
.xem,les
Type nom 8 stringP20Q ;
Type entier 8 integer ;
Type tableau 8 array P(&&(00Q o. byte ;
Program exemple24 ;
Type chaine 8 stringP20Q ;
ar nom : chaine ;
age : byte ;
!E"#$
*rite+,(ntre) votre nom : ,3 ;
/ead)n+nom3 ;
*rite+,(ntre) votre 3ge : ,3 ;
/ead)n+age3 ;
*rite)n+,*otre nom est : ,-nom-, et votre 3ge : ,-age3 ;
E$%&
Ce programme e"emple %8 utilise un nouveau type appel chaine qui sert
dclarer la variable nom.

$" Type structur 8encore appel enregistrement9
On peut tre amen utiliser des types structurs car dans une seule
variable on peut russir caser des sous-variables nommes cham,s.
Comme nous l'avons vu dans le chapitre 16 avec le type datetime.
Syntaxe
Type nomJduJtype 8 /ecord
sousJtype$ : nouveauJtype$ ;
1. 7iite virtuelle de la oire.
2. Passa=e d>un para:tre ? un sous/pro=rae.

!" <imite virtuelle de la mmoire"
Une fois compil (commande Run, Compile ou Make), un programme gre la
mmoire trs rigoureusement. Le tableau ci-dessous vous montre que les
variables principales, les variables locales des sous-programmes et les
pointeurs ne sont pas stocks dans les mmes parties de la mmoire. En
effet, les variables principales de font la part belle, la mmoire alloue aux
pointeurs (trs gourmands en mmoire) est variable et celle destine aux
variables locales est assez restreinte.

)ile (>tacL)
16 ko par
dfaut
Destin aux variables locales des
sous-programmes (procdures,
fonctions) ainsi qu'aux valeurs
passes par valeur aux sous-
programmes.

+as (Neap)
de 0 640
ko
Rserv aux pointeurs.

Segment
de
donn'es
64 ko
Destin aux variables du programme
principal.
Explications : les sous-programmes tant destins des calculs
intermdiaires, ils n'ont gure besoins d'bnormment de ressource
mmoire. Quand aux pointeurs que l'on verra dans les chapitres suivant, ils
sont destins la manipulation d'une grande quantit de donnes.
Mais il est toutefois possible de modifier manuellement une telle organisation
de la mmoire afin, par exemple, de privilgier la )ile grce au commentaire
de compilation suivant : MO< n$- n%- n/N. Ce type de commentaire est
destin au compilateur Borland Pascal qui inscrira les informations spcifies
dans le programme compil. Un commentaire de compilation se prsente
entre accolades comme n'importe quel autre commentaire, mais un signe
dollar "O" signifie qu'il est destin au compilateur. Quand au "<" il dit au
compilateur qu'on souhaite rorganiser la disposition de la mmoire l'aide
des valeurs n$, n% et n/ qui spcifient respectivement la taille en kilo octets
de la )ile (doit tre infrieur 64 ko), la taille minimale et la taille maximale
(infrieur 640 ko) du +as.
Mais pourquoi s'enquiquiner avec a ? Tout simplement parce qu'il pourra
vous arriver d'avoir insuffisament de mmoire cause d'un tableau trop long
par exemple. Si vous dclarer une telle variable dans une proddure :
ar tableau : 0rrayP(&&H0- (&&(00Q =. /ea' ;
vous obtiendrez le message d'erreur n@>> / Structure too large qui veut dire
que votre variable tient trop de place pour tre stocke dans la mmoire
alloue. Car en effet, ce tableau tient : 50 * 100 * 6 octets = 29 ko ( 1 ko =
2^10 = 1024 octets) 29 ko > 16 ko donc le compilateur renvoit une erreur.
Et le seul moyen qui vous reste est de modifier les valeurs correspondantes
aux grandeurs alloues la )ile par un commentaire de compilation ou en
allant dans le menu Option/Memor0 Si1e. D'o l'intrt du Chapitre 4
("Diffrents types de variables") qui vous indique la taille de chaque type de
variable.
$" Passage d'un param?tre @ un sous5programme"
Dans le Chapitre $ ("=rocdures et sous.programmes") vous avez appris qu'on
pouvait passer un paramtre par valeur ou bien par adresse une procdure
paramtre. Vous avez galement compris l'intrt de la syntaxe ar dans la
dclaration d'une proddure. Quand un sous-programme est appel, le
programme compil ralise en mmoire (dans la )ile) une copie de chaque
argument pass au sous-programme. Ces copies ne sont que temporaires
puisque destines au fonctionnement de sous-programmes qui
n'interviennent que temporairement dans le programme. Ainsi un
changement de valeur au sein de la procdure d'un paramtre pass par
adresse sans la syntaxe ar n'est pas rpercut dans le programme
principale. Alors que dans le cas de la prsence de la syntaxe ar, le
programme ne duplique pas la valeur ainsi passe la procdure dans la
)ile, mais le paramtre du sous-programme et la variable principale (passe
comme argument la procdure) sont joints vers la zone de la mmoire de
la variable principale (dans la partie Segment de donn'es). Ainsi toute
variation interne la procdure est rpercut directement sur l'argument (la
variable du programme principal pass en parmtre).
CHAPITRE XXIV : Pointeurs

Un pointeur est une variable qui contient l'adresse mmoire d'une autre
variable stocke en mmoire. Soit P le pointeur et PS la variable "pointe"
par le pointeur. La dclaration d'une variable pointeur rserve 4 octets
ncessaires au codage de l'adresse mmoire mais ne rserve aucune
mmoire pour la variable pointe.
Jusqu'alors nous avions vu que la dclaration d'une variable provoque
automatiquement la rservation d'un espace mmoire qui est fonction du
type utilis. Voir Chapitre 4 ("Diffrents types de variables") pour la taille en
mmoire de chacun des types de variables utiliss ci-aprs.
auparavant la procdure $e5 qui alloue l'adresse mmoire au pointeur.
Program exemple29c ;
Const Ia" 8 (0 ;
Type !ab%D 8 0rrayP(&&Ia"-(&&Ia"Q =. #nteger ;
=Iatrice 8 S!ab%D ;
ar OogoOadget?u!ableau : =Iatrice ;
i- 4- " : #nteger ;
!E"#$
$e5+OogoOadget?u!ableau3;
For i:8( to Ia" %o
!egin
For 4:8( to Ia" %o OogoOadget?u!ableauSPi-4Q :8 i+4 ;
End;
" :8 OogoOadget?u!ableauSPIa"-Ia"Q 4 69r+Ia"3 ;
*rite)n+Cos+OogoOadget?u!ableauSPIa"-Ia"Q33 ;
%ispose+OogoOadget?u!ableau3;
E$%&
Ce court e"emple%<c montre qu'on utilise une variable pointe par un
pointeur comme n'importe quelle autre variable.
Note un pointeur peut pointer vers n'importe quel type de variable sauf de
type fichier (Fi'e =., Te1t).
Program exemple29d ;
Type =oint 8 /ecord
"- y : #nteger ;
couleur : !yte ;
End ;
==oint 8 S=oint ;
ar =i"el$- =i"el% : ==oint ;
!E"#$
/andomize ;
$e5+=i"el$3;
$e5+=i"el%3;
*ith =i"el$S %o
!egin
" :8 H0 ;
y :8 (00 ;
couleur :8 /andom+(F3+( ;
End ;
=i"el%S :8 =i"el$S ;
=i"el%S&couleur :8 0 ;
%ispose+=i"el$3;
%ispose+=i"el%3;
E$%&
Dans ce programme e"emple%<d, on dclare deux variables pointant chacune
vers une variable de type =oint ce dernier tant un type structur (appel
aussi enregistrement). La ligne d'instruction : =i"el%S :8 =i"el$S ; signifie
qu'on galise champ champ les variables =i"el$ et =i"el%.
Si les symboles S avaient t ommis, cela n'aurait pas provoquer d'erreur
mais cela aurait eut une tout autre signification : =i"el% :8 =i"el$ ; signifie
que le pointeur =i"el% prend la valeur du pointeur =i"el$, c'est--dire que
=i"el% pointera vers la mme adresse mmoire que =i"el$. Ainsi les deux
pointeurs pointent vers le mme bloc mmoire et donc vers la mme
variable. Donc =i"el$S et =i"el%S deviennent alors une seule et mme
variable. Si l'on change la valeur d'un champ de l'une de ces deux variables,
cela change automatiquement le mme champ de l'autre variable !
Note On ne peut galiser deux pointeurs que s'ils ont le mme type de
base (comme pour les tableaux). Et dans ce cas, les deux pointeurs pointent
xactement vers la mme variable. Toute modification de cette variable par
l'intermdiaire de l'un des deux pointeurs se rpercute sur l'autre.
"utre note Je rappelle qu'il est impossible de travailler sur la valeur
pointe par le pointeur sans avoir utilis auparavant la procdure $e5 qui
alloue l'adresse mmoire au pointeur. Si vous compilez votre programme
sans avoir utilis $e5, un erreur fatale vous ramnera l'ordre !
Program exemple29e ;
Const Ia" 8 (0 ;
Type =ersonne 8 /ecord
nom- prenom : 6tring ;
matricule : #nteger ;
End ;
!ableau 8 0rrayP(&&Ia"Q =. =ersonne ;
=!ableau 8 S!ableau ;
ar !ab : =!ableau ;
i : #nteger ;
!E"#$
$e5+!ab3;
*ith !abSP(Q %o
!egin
nom :8 ,Cyber, ;
prenom :8 ,Zode, ;
matricule :8 (2HJ ;
End ;
For i:8( To Ia" %o *rite)n+!abSPiQ&nom3 ;
%ispose+!ab3;
E$%&
Il est possible de combiner les enregistrements, les tableaux et les pointeurs.
Cela donne un vaste panel de combinaisons. Essayons-en quelques unes.
Type !ab= 8 0rrayP(&&(00Q =. S#nteger ;
ar !ab : !ab= ;
Tableau de pointeurs pointant vers des entiers. !abPiQ est un
pointeur et !abPiQS est un entier.
Type !ab 8 0rrayP(&&(00Q =. #nteger ;
=!ab 8 S!ab ;
ar !ab : =!ab ;
Pointeur pointant vers un tableau d'entiers. !abSPiQ est un entier et
!ab est un pointeur.
Const Ia" 8 20 ;
Type >tation 8 /ecord
nom : 6tring ;
liaisons : 0rrayP(&&(0Q =. >tation ;
End ;
!ab>tation 8 0rrayP(&&Ia"Q =. >tation ;
=!ab>tation 8 S!ab>tation ;
ar France : =!ab>tation ;
France est un pointeur pointant vers un tableau d'enregistrement dont
l'un des champs est un tableau et l'autre un enregistrement (rcursif).
Pour allger le code, on aurait pu faire plus court :
Const Ia" 8 20 ;
Type >tation 8 /ecord
nom : 6tring ;
liaisons : 0rrayP(&&(0Q =. >tation ;
End ;
!ab>tation 8 0rrayP(&&Ia"Q =. >tation ;
ar France : S!ab>tation ;
Il existe des fonctions similaires au couple $e5 et %ispose :
Syntaxes
"et<em+=ointeur-Imoire3 ;
Cette fonction rserve un nombre d'octets en mmoire gale Imoire au
pointeur =ointeur. Imoire correspond la taille de la variable pointe par le
pointeur =ointeur.
Free<em+=ointeur-Imoire3 ;
Cette fonction supprime de la mmoire le pointeur =ointeur dont la variable
pointe occupait Imoire octets.
Note Si vous utilisez $e5 pour le pointeur =, il faudra lui associer %ispose
et non pas Free<em. De mme, si vous utilisez "et<em pour le pointeur =, il
faudra utiliser Free<em et non pas %ispose.
Program exemple29f ;
Const Ia" 8 (0 ;
Type =ersonne 8 /ecord
nom- prenom : 6tring ;
matricule : #nteger ;
End ;
!ableau 8 0rrayP(&&Ia"Q =. =ersonne ;
=!ableau 8 S!ableau ;
ar !ab : =!ableau ;
i : #nteger ;
!E"#$
"et<em+!ab-Ia"46ize=.+=ersonne33;
For i:8( To Ia" %o /ead)n+!abSPiQ&nom3 ;
Free<em+!ab-Ia"46ize=.+=ersonne33;
E$%&
Vous aurez remarquez que ce programme e"emple%<f est exactement le
mme que le e"emple%<e mis part qu'il utilise le couple "et<em et Free<em
au lieu des traditionnels $e5 et %ispose. C'est un peu moins sr utiliser
puisqu'il faut savoir exactement quelle place en mmoire occupe la variable
pointe par le pointeur spcifi. Mais a peut tre trs pratique si <a1=90000
(trs grand) et si dcidez de faire entrer au clavier la borne suprieur du
tableau. Voir le programme suivant :
Program exemple29g ;
Const Ia" 8 C0000 ;
Type =ersonne 8 /ecord
nom- prenom : 6tring ;
matricule : #nteger ;
End ;
!ableau 8 0rrayP(&&Ia"Q =. =ersonne ;
=!ableau 8 S!ableau ;
ar !ab : =!ableau ;
i : #nteger ;
: )ongint ;
!E"#$
*rite)n+,Combien de personnes 7,3;
/ead)n+3;
"et<em+!ab-46ize=.+=ersonne33;
For i:8( To %o /ead)n+!abSPiQ&nom3 ;
Free<em+!ab-46ize=.+=ersonne33;
E$%&
CHAPITRE XXV : Ensembles

Les ensembles en pascal sont les mmes que ceux que vous connaissez en maths.
Ils sont donc rgis par les mmes lois et ncessitent les mmes oprateurs
d'inclusion...
#emar(ue L'utilisation des ensembles n'a d'intrt que pour la programmation des
automatismes. Il est fortement probable que la plupart des internautes qui visitent
cette page n'aient jamais en s'en servir !
1. Dclarations
2. -$$ectations et oprations
3. Coparaisons

!" #clarations
Un ensemble est une variable qui contient un nombre fini d'lments de mme type.
Ce type doit tre de type ordinal c'est--dire qu'il ne doit tre ni de type rel, ni de
type chane de caractres, ni de type enregistrement, ni de type pointeur. Ce type
doit tre numr (voir ype numr) et ne doit pas excder 256 combinaisons
possibles. La dclaration d'une telle variable se fait par l'utilisation de la syntaxe 6et
=..
Syntaxes
ar identificateur : 6et =. type.de.l'ensemble ;
ar id$, id%, id/ : 6et =. type.de.l'ensemble ;
.xem,les
ar hasard : 6et =. !yte ;
Ici, la variable hasard est un ensemble de nombres entiers et dont les valeurs
possibles sont dans l'intervalle 0..255.
ar binaire : 6et =. 1&&$ ;
Ici, la variable binaire est un ensemble de 0 et de 1.
Note Comme pour tout autre type de variable, on peut dclarer en un seul bloc
plusieurs variables "ensemble" du mme type.
En gnral, on cherchera utiliser des ensembles dont le type sera dfini par le
programmeur lui-mme, c'est--dire diffrent des types de base du Pascal. Ce sont
des types numrs.
Syntaxe
Type type 8 +lment$- lment%- lment/...3 ;
ar ensemble : 6et =. type ;
Ou forme plus compacte :
ar ensemble : 6et =. +lment$- lment%- lment/...3 ;
Le type se rsume une liste d'lments spars par des virgules l'intrieur d'une
parenthse comme le montre la syntaxe ci-haut.
.xem,le
Type prenom 8 +9oris- Nugo- ?urore3 ;
ar club : 6et =. prenom ;
Ou bien :
ar club : 6et =. +9oris- Nugo- ?urore3 ;
Dans cet exemple, la variable club est un ensemble de type prenom, c'est--dire que
cet ensemble nomm club ne peut contenir que les lments dclars dans le type
prenom. Donc la variable club pourra contenir une combinaison de ces trois
lments.
Ainsi dclar, le type apparat comme une constante dont ont peut peut connatre
l'index des lments avec la fonction =rd+3. Ici, =rd+9oris3=0, =rd+Nugo3=1 et
=rd+?urore3=2. Le type fonctionne un peu comme la table ASCII... l'index du
premier lment tant zro.
Les ensembles de sont pas ordonns. Donc il n'existe pas d'ordre d'apparition des
lments dans une variable ensemble. On peut tout juste tre capable de comparer
le contenu de deux ensembles de mme type, et de dterminer si un lment est
inclu ou non dans un ensemble. De plus, un mme lment n'apparat qu'une seule
fois dans un ensemble. Et il n'existe pas de fonction qui renvoit le nombre
d'lments d'un ensemble.

$" A,,ectations et oprations
Aprs avoir vu l'aspect dclaratif des ensembles, on va apprendre utiliser dans un
programme des variables "ensemble". L'ensemble, quelque soit son type peut tre
un ensemble nul. Pour donner une valeur un ensemble, c'est--dire, spcifier le ou
les lment(s) que devra contenir l'ensemble, on utilise l'oprateur habituel
d'affectation :8. Ce qu'il y a de nouveau, c'est que le ou les lment(s) doivent tre
spars par des virgules - (comme dans la dclaration du type) et tre entre
crochets P Q (contrairement la dclaration).
Syntaxes
ensemble :8 P Q ; { ensemble nul }
ensemble :8 P lment Q ; { ensemble constitu de l'lment lment }
ensemble :8 P lment0- lment$ Q ; { ensemble constitu des
lments lment0 et lment$ }
#a,,el L'ordre des lments dans une affection ou une comparaison n'a aucune
espce d'importance puisque les ensembles ne sont pas ordonns.
Note Une affection un ensemble en supprime les lments qu'il contenait avant
l'affectation.
Si en cours de programme, on souhaite ajouter ou supprimer un ou des lment(s)
l'ensemble, on doit utiliser les oprateurs additif + et soustractif : traditionnels.
Syntaxes
ensemble :8 ensemble + P Q ; { inutile car ne joute rien ! }
ensemble :8 ensemble + P lment8 Q ;
{ rajoute l'lment lment8 l'ensemble }
ensemble :8 ensemble + P lment/- lment% Q ;
{ rajoute les lments lment/ et lment%}
ensemble :8 ensemble + P lment$ Q : P lment2- lment/ Q ;
{ rajoute l'lment lment$ et supprime les lments lment2 et lment/
}
Pour tre exact, les lments entre crochets reprsentent des ensembles part
entire. Ces ensembles sont de mme type que la variable ensemble auquel on
ajoute ou supprime des sous-ensembles. Cela s'explique par le fait que l'on ne peut
additionner que des variables de mme type : on ne peut pas additionner lments
et ensemble, mais par contre on peut additionner entre eux des ensembles. Ainsi un
lment entre crochet est un ensemble et plusieurs lments spars par des
virgules et entre crochets est aussi un ensemble.
Pour employer le vocabulaire mathmatique appropri, + est l'oprateur d'union, :
est l'oprateur de complment et on peut en rajouter un troisime : 4 est l'oprateur
d'intersection.

%" Comparaisons
Le seul moyen de connatre le contenu d'un ensemble est de le comparer d'autres
du mme type. Ainsi les tests boolens par l'intermdiaire des oprateurs
relationnels (voir chapitre %prateurs), permettent de savoir si tel ou tel lment se
trouve dans un ensemble, ou bien si tel ensemble est un inclu dans un autre.
Note Les oprateurs relationnels stricts sont incompatibles avec les ensembles,
ainsi seuls ceux du tableau ci-dessous sont utiliser avec les ensembles.
9es o,'rateurs relationnels
a,,licables aux ensembles
Symbole -esci,tion
8
gale
>?
diffrent
>8
inclu
?8
contenant
L'oprateur #n permet de connatre la prsence ou non d'un lment dans un
ensemble sans avoir passer par l'utilisation des crochets.
Syntaxes
#. Plment%Q >8 ensemble Then ...
{ si l'ensemble constitu de l'lment lment% est inclu dans l'ensemble
ensemble alors... }
#. lment% #n ensemble Then ...
{ si l'lment lment% appartient l'ensemble ensemble alors... }
#. ensemble 8 P Q Then ...
{ si l'ensemble ensemble est nul, alors... }
test :8 $ot+Plment2- lment8Q >8 ensemble3 ;
{ le boulen test prend la valeur True si l'ensemble constitu des lments
lment2 et lment8 n'est pas inclu dans l'ensemble ensemble et Fa'se
dans l'autre cas}
#. +ensemble$ 4 ensemble%3 8 P Q Then ...
{ si l'intersection des ensembles ensemble$ et ensemble% est nulle, alors...
c'est qu'ils n'ont aucun lment en commun marlgr qu'ils soient de mme
type }
#. +ensemble$ : ensemble%3 8 P Q Then ...
{ si le complment des ensembles ensemble$ et ensemble% est nul, alors...
c'est que ensemble$ est contenu dans ensemble%}
Note Il est impossible d'utiliser les procdures *rite()n) et /ead()n) avec les
variables de type ensemble.
CHAPITRE XXVI : Constantes

Dans un programme, est est souvent ncessaire sinon utile d'avoir des valeurs de
rfrence ou des conditions initiales. Ainsi, au lieu d'affectations en dbut de
programme qui peuvent s'avres fastidieuses si elles doivent tres rexcutes en
cours de programme. Alors, pour allger le code et pour facilit la lisibilit et surtout
la comprhension gnrale du programme, il est prfrable d'avoir recours des
constantes.
Une constante, pour tre connue de tous les sous-programmes, doit tre dclare
avant ces derniers. Si une constante est dclare aprs une fonction, pour que cette
fonction puisse l'utiliser, la constante doit tre passe en paramtre la fonction.
Une constante dclare avant tous les sous-programme n'a pas besoin d'tre passe
en paramtre ses derniers pour y tre utilise (c'est le mme principe que pour les
variables, fonctions, procdures paramtres et types).
Comme son nom l'indique, une constante ne change pas de valeur au cours du
programme, une valeur de dpart (qui peut tre nulle) lui est affecte ds sa
dclaration avant le code excutable. C'est l'oprateur gale 8 qui affecte une valeur
une constante aprs que cette dernire se soit vue affecte un identificateur par
l'utilisation du mot rserv Const.
Syntaxe
Const identificateur.de.la.constante 8 valeur ;
.xem,les
Const nom 8 ,CyberZode, ;
Const !*? 8 %1.H ;
Const (sc 8 L%2 ;
Le compilateur dcide automatiquement d'affecter la constante le type de base
compatible le plus conomique. Ceci est totalement transparent au programmeur.
Par exemple, lorsqu'il trouve un nombre virgule affecte une constante, il lui
spcifie le type /ea'. Ou encore si vous affectez un caractre une constante, celle-
ci sera de type Char et non de type 6tring. Mais il vous reste possible de forcer le
type de la constante par les deux points : que vous connaissez dj pour les
variables. De plus, cette dclaration de type une constante en plus de sa valeur est
dans certains cas indispensable, si vous souhaitez leur donn une valeur qui n'est
pas d'un type de base du compilateur (par exemple un ensemble ou un type que
vous avez vous-mme dfini avant la constante).
Syntaxe
Const identificateur : type.de.la.constante 8 valeur ;
.xem,les
Const ma" : )ongint 8 H1111 ;
Const Defaut : 6tring 8 ,P, ;
Note Les constantes peuvent tre de tout type sauf de type fichier.
On peut tout aussi bien affecter aux constantes des expressions dont le rsultat sera
valu la compilation.
Syntaxe
Const identificateur 8 e"pression ;
.xem,les
Const (sc 8 Chr+%23 ;
Const tau" 8 +e1p+$13:+/PPi33;$11 ;
Const nom 8 ,Cyber,+,Zode, ;
Const softi : #nteger 8 =rd+'ength+nom33 ;
La dclaration des constantes se fait dans la partie dclarative du programme, avant
le code excutable (tout comme pour la dclarations des fonctions, procdures,
variables). Pour tres utilisables par tous les sous-programmes (procdures
paramtres...), les constantes doivent ncessairement tres dclare avant ces
premiers.
Program exemple40 ;
Const nom8,9ill,;
Procedure saisielibre+ar toi:6tring3;
!egin
*rite)n+,(ntre) votre nom :,3;
/ead)n+toi3;
#. toi8,, Then toi:8nom;
End;
Procedure saisiecontrainte+ar toi:6tring3;
!egin
/epeat
*rite)n+,(ntre) votre nom :,3;
/ead)n+toi3;
Unti' toi>?,,;
End;
ar toi:6tring;
!E"#$
saisielibre+toi3;
saisiecontrainte+toi3;
E$%&
Cet e"emple81 montre quelle peut tre l'utilisation d'une constante. Ici la procdure
saisielibre permet l'utilisateur de ne pas dvoiler son nom, la variable toi prenant
une valeur par dfaut qui est celle de la constante nom. Quant la procedure
saisiecontrainte elle ne laisse qure le choix l'utilisateur : il doit absoluement
entrer un nom pour poursuivre le programme.
TEST I : Test d'valuation n1

Ce test d'valuation (n)/") pose quelques questions piges afin de voir si
vous avez assimil les bases de la programmation en Turbo Pascal 7.0.
Correction automatique on line : il vous suffit de cliquer sur le bouton de
validation en bas de ce formulaire (aprs avoir rpondu toutes les
questions) pour voir apparatre une correction personnalise.

1. Quel menu pour excuter un fichier +AS ?
Run/Run
Compile/Make
Debug/Output
2. Laquelle des instructions suivantes est juste ?
/ead)n + , votre nom : , - nom 3 ;
*rite)n + , &'abeille est morte. , 3 ;
/ead)n + a- b- c 3 ;
3. Laquelle des instructions suivantes est fausse ?
/eadKey ;
/epeat Unti' 7eyPressed ;
/ead)n ;
. Quel est le rsultat de ! true XOR false ?
empty
true
.a'se
". #omment afficher un nombre rel a avec " dcimales ?
*rite)n + a- H 3 ;
*rite)n + a:H 3 ;
*rite)n + a:0:H 3 ;
$. %armi les fonctions mathmatiques suivantes& une seule est
correcte& laquelle ?
y:8a
2
;
y:8aS2 ;
y:8e1p+a3 ;
'. ( quelle condition la boucle suivante s)arr*te+t+elle ?
/epeat
&&&
Unti' +K?8a3 =r $ot+K803 ;
K suprieur ou gale a et diffrent de zro
K suprieur a et gale zro
K suprieur ou gale a ou diffrent de zro
,. %armi les affirmations suivantes& laquelle est juste ?
L'ordre des paramtres rels d'une procdure n'a pas d'importance.
Une procdure paramtre utilisant des constantes doit tre dclare
avant les constantes.
Une procdure paramtre ne peut pas appeler une autre procdure.
Une procdure peut avoir des variables locales.
-. Quelle instruction permet de tracer un carr plein le plus
rapidement ?
!ar
)ine
/ectang'e
1.. Laquelle de ces affirmations est correcte ?
Une fonction doit tre dclare dans une unit et non pas dans le
programme principal.
Une unit peut ne pas avoir d'instruction dans son bloc !E"#$ E$%&.
Une unit doit tre crite dans un fichier au format !+U.
11. /ous l)afficha0e 1/+23/& comment slectionner la couleur du
texte ?
Te1tCo'or+a3 ;
6etCo'or+a3 ;
Gightideo ;
12. /ous l)afficha0e 1/+23/& avec quoi peut+on conna4tre les
coordonnes du curseur ?
"oto@B
=utTe1t@B
*here@ et *hereB
"et<a1@ et "et<a1B
13. #omment faire pour concater deux cha4nes s1 et s2 en une
seule s ?
s :8 s( 0nd s2 ;
s :8 Concat+ s(- s2 3 ;
Concat+s- s2- s2 3 ;
1. Les fonctions tri0onomtriques acceptent les an0les en quel5s6
format5s6 ?
degr
radian
les deux formats sont accepts
1". %eut+on afficher des ima0es en 2"$ couleurs ?
Non, c'est absolument impossible : 16 couleurs, c'est le maximum.
Oui, avec l'initialisation graphique automatique si la carte graphique
supporte autant de couleurs.
Oui, grace une unit spcifique.
1$. #omment 0n7re+t+on un nombre entier 8 au hasard ?
/andom+@3 ;
@:8/andom+B3 ;
@:8/andom ;
1'. Que dire de juste 9 propos d)un tableau ?
Sa longueur peut varier au cours du droulement du programme.
Son nombre de dimension de doit pas excder trois.
On ne peut pas y introduire de type complexe.
Tous ses lments doivent appartenir au mme type de variable.
1,. %eut+on crer ces propres types de variable ?
Oui, partir de types dj existants.
Oui, mais seulement en crant une unit en language assembleur.
Non, on doit se contenter de ceux intgrs Turbo Pascal 7.0.
1-. ( quel5s6 type5s6 de variable s)applique la fonction UpCase qui
transforme les minuscules en majuscules ?
6tring
Char
Te1t
D'une manire gnrale tous les types de chane ou de caractre.
2.. Quelle est l)affirmation juste concernant la structure Case Of
parmi les suivantes ?
Cette instruction permet de tester la valeur d'une variable
comparativement d'autres variables.
Elle permet de tester diffrentes valeurs possibles d'une variable.
Elle permet de donner successivement diffrentes valeur une
variable.
TEST II : Test d'valuation n2

Ce test d'valuation (n>/") pose quelques questions piges afin de voir si
vous avez assimil les bases de la programmation en Turbo Pascal 7.0.
Correction automatique on line : il vous suffit de cliquer sur le bouton de
validation en bas de ce formulaire (aprs avoir rpondu toutes les
questions) pour voir apparatre une correction personnalise.

1. #omment une procdure sans param7tre devrait+elle *tre
dclare ?
avant les variables globales
parmis les variables globales
aprs les variables globales
2. #omment sont les variables locales d)un sous+pro0ramme ?
temporaires
globales
protges en criture
3. 2e quel5s6 type5s6 sont les param7tres passs 9 une fonction ?
de type simple ou complexe
de type simple
de type complexe
. Quelles sont les coordonnes maximales d)un point en
rsolution 0raphique $.x,.x1$ ?
( 640, 480, 16 )
( 640, 480 )
( 639, 479 )
". Que si0nifie la syntaxe Var dans la dclaration des param7tres
d)une procdure ?
les variables globales passes en paramtres peuvent changer de
valeurs
les variables globales passes en paramtres sont forcment nulles
les variables locales devront tre dtruites la fin de la procdure
$. Quelle affirmation concernant les fonctions est juste ?
il faut toujours donner une valeur l'identificateur
il faut toujours passer au moins un paramtre
elles acceptent tous les types de variable
'. 2e quoi dpend le chemin 9 spcifier dans InitGraph() ?
de la machine du compilateur
de la machine de l'utilisateur
du systme d'exploitation
,. Laquelle des dclarations suivantes est fausse ?
ar tab : 0rray P (&&(0 Q =. 0rrayP(&&(0Q =. #nteger ;
ar tab : 0rray P (&&(0- (&&(0 Q =. #nteger ;
Const tab 8 0rray P (&&(0 Q =. #nteger ;
Type tab : 0rray P (&&(0 Q =. #nteger ;
-. Quelle est l)affirmation juste ?
Une chaine de caractres contient 256 signes.
Il existe 255 caractres diffrents en ASCII.
Le type Char est un type simple.
1.. #herche: l)intrus !
<oveTo + (00- (0 3 ; =utTe1t + ,9on4our, 3 ;
)ine/e' + (00- (0 3 ; =utTe1t + ,9on4our, 3 ;
=utTe1t@B + (00- (0- ,9on4our, 3 ;
11. Que fait la procdure Reset() ?
Elle supprime un fichier.
Elle remet zro le contenu d'un fichier.
Elle remet le pointeur au dbut du fichier.
12. Quelle procdure pour conna4tre l)heure ?
"etFTime+3
UnPacKTime+3
"etTime+3
13. Laquelle des instructions suivantes est fausse ?
*rite)n + a- b- c 3 ;
/ead)n + a- b- c 3 ;
/ead7ey + a- b- c 3 ;
1. Lequel de ces oprateurs renvoit le quotient de la division de 8
par ; ?
%iv
<od
;
1". Laquelle de ces fonctions n)existe pas en %ascal ?
E1p+3
Tan+3
0rcTan+3
1$. Quelle structure de boucle est obli0e d)effectuer au moins une
fois les instructions de son bloc propre ?
*hi'e
/epeat
For
1'. 2ans quel cas peut+on utiliser simplement la couleur en
afficha0e texte 51/+23/6 ?
En selectionnant un mode d'affichage spcifique avec la procdure
Te1t<ode+3.
C'est impossible, seul le mode graphique affiche les couleurs.
En fabriquant soi-mme une unit spcifique en assembleur.
En utilisant les procdures Te1tCo'or+3 et Te1t!acK"round+3.
1,. Que dire de juste 9 propos des units ?