Vous êtes sur la page 1sur 249

Caractéristiques principales du langage Pascal

I CARACTERISTIQUES PRINCIPALES DU LANGAGE PASCAL


I.1 LE LANGAGE PASCAL
PASCAL est un langage de programmation de haut niveau développé à l'origine par le
Professeur Niklaus WIRTH à ZURICH dans les années 1970.

PASCAL est un langage universel.

Il dérive du langage de programmation ALGOL

Son champ d'application est complet : problèmes scientifiques, problèmes de gestion,


problèmes de traitement de textes etc...

PASCAL est un langage structuré.

Le professeur WIRTH a conçu le langage PASCAL comme une aide à l'enseignement d'une
approche systématique de la programmation des ordinateurs. Cette approche est connue sous le
terme de programmation structurée.

PASCAL est reconnu aujourd'hui comme l'un des langages les plus performants que ce soit en
programmation professionnelle, éducative ou personnelle.

I.2 LE TURBO PASCAL


TURBO PASCAL suit de près la définition du PASCAL STANDARD telle qu'elle a été
publiée par JENSEN et WIRTH dans Pascal User Manual and Report.

Dans les mains d'un programmeur expérimenté, il devient un outil de développement très
efficace en procurant des temps d'exécution et de compilation très courts.

Avertissement : les renseignements contenus dans ce document se rapportent au TURBO


PASCAL Version 7.0 (BORLAND International Inc).

DMSI/PROGRAMMATION -1-
Elements de base du langage

II ELEMENTS DE BASE DU LANGAGE


II.1 LES SYMBOLES DE BASE
Le vocabulaire de base du TURBO PASCAL est composé de lettres, de chiffres, et de
symboles spéciaux:

II.1.1 LETTRES
A..Z, a..z Aucune lettre accentuée sauf dans les commentaires

II.1.2 CHIFFRES
0..9
0..9 et les lettres A..F ou a..f pour les chiffres hexadécimaux

II.1.3 SYMBOLES SPECIAUX


+-*/=^<>()[]{}.:;'#$@
Aucune distinction n'est faite entre les minuscules et les majuscules. Certains opérateurs et
délimiteurs sont construits avec deux symboles spéciaux.
Opérateur d'affectation :=
Opérateur relationnel = <> < <= >= >
Délimiteur de sous-ensemble ..
Parenthèses et crochets (. .) ou [ ]
Commentaires (* *) ou { }

II.1.4 MOTS RESERVES


Les mots réservés font partie intégrante de TURBO PASCAL. Ils ne peuvent pas être définis à
nouveau et ne peuvent donc pas être utilisés comme des identificateurs définis par l'utilisateur.

and end nil shr


array file not string
asm for object then
begin function of to
case goto or type
const if packed unit
constructor implementation procedure until
destructor in program uses
div inline record var
do interface repeat while
downto label set with
else mod shl xor

Les mots suivants constituent des directives de compilation. Ils peuvent donc être
redéfinis par l'utilisateur, bien que cela ne soit pas conseillé.

DMSI/PROGRAMMATION -2-
Elements de base du langage

absolute far near


assembler forward private
external interrupt virtual

Les identificateurs prédéfinis tels que les identificateurs de constantes (Ex : PI), de type
(Ex : INTEGER), de variables (Ex : MEM), de procédures (Ex : RESET) ou de
fonctions (Ex : SIN) standard peuvent également être redéfinis par l'utilisateur.

II.2 LES DELIMITEURS


Les éléments du langage doivent être séparés par au moins un des délimiteurs suivants :
un espace, une fin de ligne, ou un commentaire en observant les restrictions suivantes:
Il ne peut pas y avoir de séparateurs à l'intérieur d'un identificateur, d'un nombre, ou
d'un symbole.
Il doit y avoir au moins un séparateur entre deux identificateurs, deux nombres ou deux
mots réservés consécutifs.

II.3 LES LIGNES DE PROGRAMME


La longueur maximum d'une ligne de programme est 126 caractères. Tout caractère au-
delà du 126ème sera ignoré du compilateur bien que l'éditeur autorise 249 (voire 1024)
caractères par ligne.

DMSI/PROGRAMMATION -3-
Les types de données

III LES TYPES DE DONNEES


Un type de données définit l'ensemble des valeurs qu'une variable peut prendre. Chaque
variable dans un programme doit être associée à un et un seul type de données. Bien
que les types de données puissent être très complexes, ils sont tous construits à partir de
types simples (non structurés).
Les huit types fondamentaux se regroupent en trois classes:
 La classe des types simples comprend les types scalaires (entiers, booléen,
caractère, énuméré, intervalle) et les types réels (réel, simple, double, étendu,
composite).
 La classe des types structurés comprend le type chaîne de caractères, le type
tableau, le type enregistrement, le type ensemble et les types fichiers.
 La classe du type pointeur.

III.1 LES TYPES SIMPLES


Un type simple peut être défini par le programmeur (type scalaire déclaré), l'un des
types scalaires standard : integer (entier), boolean (booléen), char (caractère) ou byte
(octet), un type réel.

TYPE SIMPLE TYPE SCALAIRE

TYPE REEL

III.1.1 LES TYPES SCALAIRES


Ces types sont caractérisés par quatre propriétés :
 Les valeurs possibles d'un type scalaire forment un ensemble ordonné; à
chaque valeur est associé un rang (0 pour la première valeur sauf pour les entiers).
 La fonction standard ORD, qui retourne le rang de la valeur peut être utilisée.
 La fonction standard PRED, qui retourne la valeur précédant la valeur
spécifiée peut être utilisée. PRED indique une erreur si elle est appelée avec la
première valeur du type.
 La fonction standard SUCC, qui retourne la valeur succédant la valeur
spécifiée peut être utilisée. SUCC indique une erreur si elle est appelée avec la
dernière valeur du type.
La syntaxe d'un type scalaire est la suivante :

TYPE SCALAIRE TYPE INTERVALLE

TYPE ENUMERE
IDENTIFICATEUR DE TYPE SCALAIRE

DMSI/PROGRAMMATION -4-
Les types de données

DMSI/PROGRAMMATION -5-
Les types de données

III.1.1.1 TYPES ENTIERS

Type Portée Format


entier court SHORTINT -128..127 8 bits signé
entier INTEGER -32768..32767 16 bits signé
entier long LONGINT -2147483648..2147483647 32 bits signé
octet BYTE 0..255 8 bits non signé
mot WORD 0..65535 16 bits non signé

Remarque : Les dépassements de capacité dans les opérations arithmétiques ne sont pas
détectés. En particulier, les résultats partiels dans les expressions entières doivent être
compris dans l'échelle du type considéré.

III.1.1.2 TYPE BOOLEEN


Une valeur booléenne peut avoir l'une des deux valeurs logiques vrai ou faux (True ou
False). Elle sera définie telle que False < True.
Une variable BOOLEAN occupe un octet en mémoire.

FALSE < TRUE


ORD ( FALSE ) =0
ORD ( TRUE ) =1
SUCC (FALSE ) = TRUE
PRED ( TRUE ) = FALSE
PRED ( FALSE ) renvoie une erreur

III.1.1.3 TYPE CARACTERE


Une valeur de type caractère est un élément de l'ensemble des caractères du code ASCII
(voir annexe C). Les valeurs ordinales des caractères ASCII vont de 0 à 255. Une
variable CHAR occupe un octet en mémoire.

III.1.1.4 TYPE ENUMERE


Les types énumérés permettent de définir des ensembles ordonnés de valeurs en
énumérant les identificateurs qui représentent ces valeurs.

TYPE ENUMERE ( LISTE D’IDENTIFICATEURS )

LISTE D’IDENTIFICATEURS IDENTIFICATEUR

DMSI/PROGRAMMATION -6-
Les types de données

DMSI/PROGRAMMATION -7-
Les types de données

III.1.1.5 TYPE INTERVALLE


Le type intervalle est une portion de l'intervalle de valeurs d'un type scalaire, qui est
appelé le type hôte. La définition du type intervalle consiste en la spécification des
deux bornes (min et max) de l'intervalle.
TYPE INTERVALLE CONSTANTE .. CONSTANTE

Les deux constantes doivent être du même type scalaire et telles que min < max. Une
variable de type intervalle hérite de toutes les propriétés du type hôte, mais lors de
l'exécution, sa valeur doit rester dans l'intervalle défini.
Nota : Le type SCALAIRE ENUMERE et le type INTERVALLE seront étudiés plus
en détail dans le chapitre VIII.

III.1.2 LES TYPES REELS


Il existe cinq variantes du type réel : réel (REAL), simple(SINGLE), double
(DOUBLE), étendu (EXTENDED) et compatible (COMP).
Turbo Pascal accepte deux modèles de génération de code à virgule flottante :
 Calculs flottants par logiciel {$N-}
 Calculs flottants par matériel 80x87 {$N+}
La directive $N permet de passer d’un mode à l’autre.
Voir également la directive $E qui active ou inhibe la liaison du code avec les routines
de la librairie d'émulation pour le calcul des flottants (émulateur de 80x87).

Type Portée Précision Taille


Réel REAL 2.9 * 10-39 .. 1.7 * 1038 11-12 6 octets
Simple SINGLE 1.5 * 10-45 .. 3.4 * 1038 7-8 4 octets
Double DOUBLE 5.0 * 10-324 .. 1.7 * 10308 15-16 8 octets
Etendu EXTENDED 1.9 * 10-4951 .. 1.1 * 104932 19-20 10 octets
Compatible COMP -9.2*1018.. 9.2*1018 19-20 8 octets

Remarque : le type COMP ne peut recevoir que des valeurs entières (de –263 à 263-1).
Le dépassement de capacité pendant une opération arithmétique impliquant des réels
provoque l'arrêt du programme et l'affichage d'un message d'erreur.
Différences entre les réels et les autres types simples :
Les fonctions PRED, SUCC et ORD ne peuvent pas avoir d'arguments réels. Les réels
ne peuvent pas être utilisés pour l'indexation des tableaux, pour définir le type de base
d'un ensemble, dans les instructions For et Case. Les intervalles de type réel ne sont pas
autorisés.
III.1.3 AUTRES TYPES
Le type Chaîne de caractères, les types structurés et le type Pointeur feront l'objet des
chapitres IX, X, XI, XII, XIV et XVIII.

DMSI/PROGRAMMATION -8-
Les types de données
III.2 IDENTITE ET COMPATIBILITE DE TYPES
III.2.1 IDENTITE DE TYPE
L'identité de type n'est requise qu'entre les paramètres effectifs et formels des
procédures et fonctions (cf Chapitre VII).
Deux types T1 et T2 sont identiques si
• T1 et T2 représentent le même identificateur de type ou
• T1 est déclaré équivalent à un type identique à T2.
Deux variables déclarées dans la même déclaration sont de type identique.

EXEMPLES :

T1 = Integer ;
T2 = T1 ;
T1 et T2 sont de type identique

T3 = Set Of Char ;
T4 = Set Of Char;
T3 et T4 ne sont pas deux types identiques car Set Of Char n'est pas un
identificateur de type.

V1, V2 : Set Of Char ;


V1 et V2 sont de type identique.

III.2.2 COMPATIBILITE DE TYPES


La compatibilité entre deux types est parfois nécessaire dans les expressions et
opérations relationnelles.
Il y a compatibilité de types lorsque au moins une des conditions suivantes est vérifiée :
• Les deux types sont identiques
• Les deux types sont du type réel
• Les deux types sont du type entier
• Un des types est un sous-intervalle de l'autre
• Les deux types sont des sous-intervalles du même type hôte
• Les deux types sont des types ensemble avec des types de base compatibles
• Les deux types sont des types chaîne de caractères compactée ayant le même
nombre de composants
• Un des types est une chaîne de caractères et l'autre une chaîne de caractères,
une chaîne de caractères compactée ou un caractère
• Les deux types sont de type pointeur
• Les deux types sont du type sous-programme avec un même type pour la
valeur renvoyée, le même nombre de paramètres et le type de chacun de ceux-ci est
identique un à un.

DMSI/PROGRAMMATION -9-
Les types de données

III.2.3 COMPATIBILITE AU NIVEAU DES AFFECTATIONS


La compatibilité au niveau des affectations est nécessaire lors d'une affectation ou d'un
passage de paramètres par valeur.

Un type T2 est compatible au niveau des affectations avec un type T1 (c'est-à-dire


T1 := T2 est autorisée) si l'une des assertions suivantes est vraie :
• T1 et T2 sont de type identique (sauf type fichier ou type structuré ayant un
type fichier comme composant)
• T1 et T2 sont des type scalaires compatibles et les valeurs de T2 sont
contenues dans l'intervalle des valeurs autorisées de T1
• T1 et T2 sont des types réels et les valeurs de T2 sont contenues dans
l'intervalle des valeurs autorisées de T1
• T1 est un type réel et T2 est un type entier
• T1 et T2 sont des types chaînes de caractères
• T1 est un type chaîne de caractères et T2 est un type caractère
• T1 est un type chaîne et T2 est un type chaîne compactée de caractères
• T1 et T2 sont des type compatibles chaînes compactées de caractères
• T1 et T2 sont des types ensembles compatibles, tous les membres de T2 étant
compris dans l'intervalle des valeurs autorisées de T1
• T1 et T2 sont des types pointeurs compatibles
• T1 et T2 sont des types sous-programme compatibles
• T1 est un type sous-programme et T2 un sous-programme ayant le même type
de résultat, le même nombre de paramètres et le type de chacun de ceux-ci est
identique un à un.

DMSI/PROGRAMMATION - 10 -
Elements du langage définis par l’utilisateur

IV ELEMENTS DU LANGAGE DEFINIS PAR L'UTILISATEUR


IV.1 IDENTIFICATEURS
Les identificateurs sont des noms utilisés pour marquer:
• des étiquettes
• des constantes
• des types de données
• des variables
• des procédures ou des fonctions
Ils sont formés de lettres et de chiffres, mais doivent commencer obligatoirement par une lettre
ou le caractère Underscore (souligné). Leur longueur est limitée par la longueur de la ligne
(126 caractères). En fait, seuls les 63 premiers caractères seront pris en compte par le
compilateur. Il n'y a pas de distinction entre majuscules et minuscules.

La syntaxe est la suivante :

IDENTIFICATEUR LETTRE
LETTRE
SOULIGNE

CHIFFRE

SOULIGNE

IV.2 NOMBRES
Les nombres sont des constantes de type entier ou de type réel. Les constantes entières sont
des nombres entiers exprimés soit en décimal soit en hexadécimal. Les constantes hexa-
décimales sont précédées par le signe $ et l'intervalle est de $0000 à $FFFF. La syntaxe est la
suivante :

NOMBRE ENTIER SANS SIGNE CHIFFRE

IV.3 CHAINES
Une constante chaîne est une suite de caractères inclus entre deux apostrophes '
Une apostrophe peut être comprise dans une chaîne en écrivant deux apostrophes successives.
Les chaînes contenant un seul caractère sont du type char. Une chaîne étant assimilable à un
type tableau, les caractères sont accessibles comme les éléments d'un tableau.

DMSI/PROGRAMMATION - 11 -
Elements du langage définis par l’utilisateur

IV.4 CARACTERES DE CONTROLE


TURBO PASCAL permet d'inclure des caractères de contrôle dans les chaînes.
Deux notations sont possibles :
 Le signe # suivi d'une constante entière dans l'intervalle 0..255, dénote un caractère
ayant la valeur ASCII correspondante.
 Le symbole ^ suivi d'un caractère, dénote le caractère de contrôle correspondant.

Exemples :

#10 ASCII 10 Line Feed


#$1B ASCII 1B hex Escape
^G Control-G Bell

Les séquences de caractères de contrôle peuvent être concaténées en chaînes, en les écrivant
sans séparateur.

IV.5 COMMENTAIRES
Un commentaire peut être inséré n'importe où dans un programme où un délimiteur est
autorisé.
Les délimiteurs de commentaire sont:

(* et *)
ou
{ et }

Les accolades ne peuvent pas être imbriquées à l'intérieur d'autres accolades (de même pour
les séquences (* *) ). Cependant, les accolades peuvent être imbriquées à l'intérieur des
parenthèses et vice-versa.

IV.6 OPTIONS ET DIRECTIVES DE COMPILATION


Certaines caractéristiques du compilateur de TURBO PASCAL sont contrôlées par des
directives de compilation qui seront spécifiées comme les commentaires avec une syntaxe
spéciale.

Une directive de compilation est constituée de la séquence { ou (* suivie immédiatement du


signe $, suivi immédiatement par une directive de compilation et se termine par } ou *)

Les options et les directives de compilation seront présentées en annexe A.

DMSI/PROGRAMMATION - 12 -
Structure de base d’un programme Pascal

V STRUCTURE DE BASE D'UN PROGRAMME PASCAL


Un programme PASCAL a la structure suivante :

EN TETE BLOC .

CLAUSE USES

Le bloc est divisé en une partie DECLARATION dans laquelle sont définis tous les objets
locaux au programme et une partie INSTRUCTIONS qui spécifie les actions à exécuter sur ces
objets.

V.1 EN-TETE de PROGRAMME


Dans TURBO-PASCAL, l'en-tête est facultative. Sa syntaxe est la suivante:

PROGRAM IDENTIFICATEUR ;

( IDENTIFICATEUR )

EXEMPLES :

Program circles;
Program accountant(Input,Output);

V.2 CLAUSE USES


La clause USES permet d'indiquer le nom de toutes les unités que le programme utilise (voir
Chapitre XVI pour la description des unités standards). La syntaxe est la suivante :

USES IDENTIFICATEUR ;

L'unité SYSTEM est toujours référencée de manière implicite par le compilateur.

DMSI/PROGRAMMATION - 13 -
Structure de base d’un programme Pascal

V.3 STRUCTURE D'UN BLOC


La syntaxe d'un bloc est la suivante:

IDENTIFICATEUR
BLOC
NOMBRE ENTIER
LABEL SANS SIGNE

CONST IDENTIFICATEUR = CONSTANTE

TYPE IDENTIFICATEUR = TYPE

VAR IDENTIFICATEUR : TYPE

LISTE DES
PROCEDURE IDENTIFICATEUR PARAMETRES

LISTE DES : IDENTIFICATEUR


FUNCTION IDENTIFICATEUR PARAMETRES DE TYPE

; BLOC ;

BEGIN INSTRUCTION END

DMSI/PROGRAMMATION - 14 -
Structure de base d’un programme Pascal
V.4 PARTIE DECLARATION
La partie DECLARATION est divisée en cinq sections différentes:
 Déclaration des étiquettes
 Définition des constantes
 Définition des types
 Déclaration des variables
 Déclaration des procédures et des fonctions

Remarque : le TURBO PASCAL permet à chacune de ces sections d'apparaître plusieurs fois
et dans n'importe quel ordre alors que le PASCAL STANDARD spécifie que chaque section
ne doit apparaître que zéro ou une fois dans l'ordre ci-dessus.

V.4.1 REGLE D'ORDONNANCEMENT


Toutes les déclarations créent de nouveaux objets à partir d'objets pré-définis ou d'objets déjà
créés, dans tous les cas, un identificateur d'objet doit être déclaré avant son utilisation.

V.4.2 DECLARATION DES ETIQUETTES


Toute instruction dans un programme peut être précédée par une étiquette permettant ainsi un
branchement direct par l'instruction GOTO. Une étiquette est constituée par un nom d'étiquette
suivi par le signe :. Le mot réservé LABEL commence cette déclaration.

EXEMPLE :
label 10, error, 999;

Remarques :
 En PASCAL STANDARD, les étiquettes sont limitées à des nombres de 1 à 4
chiffres.
 L'emploi de l'instruction GOTO est contraire à l'esprit de la programmation
structurée. Aussi, en règle générale, on évite son utilisation.

DMSI/PROGRAMMATION - 15 -
Structure de base d’un programme Pascal

V.4.3 DEFINITION DES CONSTANTES


Dans la partie Déclaration des Constantes, on introduit des identificateurs comme synonymes
pour des valeurs constantes. Le mot réservé CONST commence cette déclaration. La syntaxe
des constantes est la suivante :

+ IDENTIFICATEUR
DE CONSTANTE

CONSTANTE

NOMBRE
-
SANS SIGNE

CHAINE

Remarque : les constantes suivantes sont pré-définies en TURBO PASCAL

NOM TYPE VALEUR


False Boolean False
True Boolean True
MaxInt Integer 32767

V.4.4 DEFINITION DES TYPES


Un type de données peut être décrit directement dans la partie Déclaration des Variables ou
référencé par un identificateur de type. Le mot réservé TYPE commence la définition des
types et il est suivi par une ou plusieurs affectations séparées par des ;. Chaque affectation de
type est constituée d'un identificateur de type suivi du signe = et d'un type.

La syntaxe des types est la suivante:

TYPE SIMPLE IDENTIFICATEUR DE TYPE

( IDENTIFICATEUR )

CONSTANTE .. CONSTANTE

DMSI/PROGRAMMATION - 16 -
Structure de base d’un programme Pascal

TYPE SIMPLE
T

^ IDENTIFICATEUR DE TYPE

PACKED

ARRAY [ TYPE SIMPLE ] OF TYPE

FILE OF TYPE

SET OF TYPE SIMPLE

RECORD LISTE DES CHAMPS END

STRING [ ENTIER NON SIGNE ]

FILE
F
I
L
TEXT E

EXEMPLES :
Type
Number = Integer;
Day = (mon,tue,wed,thu,fri,sat,sun);
List = Array[1..20] of real;

DMSI/PROGRAMMATION - 17 -
Structure de base d’un programme Pascal

V.4.5 DECLARATION DES VARIABLES


Chaque variable survenant dans un programme doit être déclarée avant son emploi. La
déclaration doit strictement précéder tout emploi de cette variable de façon que le compilateur
reconnaisse celle-ci.
Une déclaration de variable commence par le mot réservé VAR suivi d'un ou plusieurs
identificateurs séparés par des virgules, suivi du signe : et d'un type.

Remarque : la portée de cet identificateur est le bloc dans lequel elle est définie, et tout bloc à
l'intérieur de celui-ci. La syntaxe des variables est la suivante :

VARIABLE IDENTIFICATEUR : TYPE ;

CLAUSE ABSOLUTE
,

Une variable peut être déclarée de manière à résider à une adresse mémoire spécifique, elle est
alors désignée variable absolue

Remarque : la liste de déclaration d'une variable absolute ne peut concerner plus d'un
identificateur.

CLAUSE ABSOLUTE

ENTIER ENTIER
ABSOLUTE NON SIGNE : NON SIGNE

IDENTIFICATEUR DE VARIABLE

EXEMPLES :
VAR
Resultat, Calcul, Moyenne : Real;
I, J, K, L : Integer;
Buffer : Array[0..127] of Byte;
ModeEcran : Byte Absolute $0040:$0049;
Chaine : String[15];
Longueur : Byte Absolute chaine;
{ = longueur dynamique de la chaîne }

DMSI/PROGRAMMATION - 18 -
Structure de base d’un programme Pascal

V.4.6 DECLARATION DES PROCEDURES ET DES FONCTIONS


Une déclaration de procédure permet de définir une procédure à l'intérieur d'une autre
procédure ou d'un programme. Une procédure est activée par un appel de procédure, et à la fin
de son exécution le programme continue avec l'instruction suivant immédiatement l'appel de la
procédure.
Une déclaration de fonction permet de définir une partie du programme calculant et retournant
une valeur. Une fonction est activée lorsque son identificateur est rencontré dans une
expression.

EXEMPLES :
Déclarations

Procedure essai1;
Begin
...
...
End;

Function essai2:integer;
Begin
...
...
End;

Activations

Program essai;
Var
resultat : integer;
Begin
...
...
essai1;
...
...
resultat := essai2;
...
End.
Remarques : La partie concernant les procédures et les fonctions sera détaillée au cours du
chapitre XIV.
V.5 PARTIE INSTRUCTION
La partie INSTRUCTION est la dernière partie d'un Bloc, elle spécifie les actions à exécuter
par le programme. La partie instruction prend la forme d'une séquence d'instructions suivie
d'un point ou d'un point virgule.
Une séquence d'instructions est constituée du mot réservé Begin, suivi par une liste
d'instructions séparées par des points virgules et se termine par le mot réservé End.

DMSI/PROGRAMMATION - 19 -
Les expressions

VI LES EXPRESSIONS
Les expressions sont des constructions algorithmiques spécifiant les règles pour le calcul de
valeurs. Elles sont constituées d'opérandes: variables, constantes, et identificateurs de
fonctions, combinés par le moyen d'opérateurs. La syntaxe des expressions est la suivante :

EXPR
ESSIO EXPRESSION
SIMPLE
N EXPRESSION
<
SIMPLE

<=

>=

>

<>

IN

EXPRESSION SIMPLE

TERME

-
+ - OR XOR

TERME

TERME

FACTEUR

* / DIV MOD AND SHL SHR

FACTEUR

DMSI/PROGRAMMATION - 20 -
Les expressions

DMSI/PROGRAMMATION - 21 -
Les expressions

FACTEUR REFERENCE DE VARIABLE

@ IDENTIFICATEUR DE PROCEDURE

IDENTIFICATEUR DE FONCTION

CONSTANTE SANS SIGNE

VARIABLE

IDENTIFICATEUR DE FONCTION ( EXPRESSION )

( EXPRESSION )

NOT FACTEUR

[ ]

EXPRESSION .. EXPRESSION

,
,
TRANSTYPAGE DE VALEUR

DMSI/PROGRAMMATION - 22 -
Les expressions

Les opérateurs sont divisés en 5 catégories, dénotées par leur ordre de préséance :
 Le moins unaire (- avec un seul opérateur)
 Opérateur NOT
 Opérateurs multiplicatifs : *, /, DIV, MOD, AND, SHL, SHR
 Opérateurs additifs : +, -, OR, XOR
 Opérateurs relationnels : =, <>, <, >, <=, >=, IN

Les séquences d'opérateurs ayant la même préséance sont évaluées de gauche à droite. Les
expressions entre parenthèses sont évaluées en premier et indépendamment des opérateurs
précédents et suivants.

DMSI/PROGRAMMATION - 23 -
Les expressions

VI.1 MOINS UNAIRE


Le moins unaire indique la négation de son opérande qui peut être du type réel ou entier.

VI.2 OPERATEUR NOT


L'opérateur NOT inverse la valeur logique de son opérande booléen

NOT True = False


NOT false = True
TURBO PASCAL permet d'utiliser l'opérateur NOT avec un opérande entier. Dans ce cas, la
négation se fait bit à bit.

NOT 0 = -1
NOT -15 = 14
NOT $2345 = $DCBA

VI.3 OPERATEURS MULTIPLICATIFS

Opérateur Opération Type des opérandes Type du résultat


Réel et Réel Réel
* Multiplication Entier et Entier Entier
Réel et Entier Réel
Réel et Réel Réel
/ Division Entier et Entier Réel
Réel et Entier Réel
DIV Division entière Entier et Entier Entier
MOD Reste Entier et Entier Entier
AND Arithmétique Entier et Entier Entier
Logique Booléen et Booléen Booléen
SHL Décalage à gauche Entier et Entier Entier
SHR Décalage à droite Entier et Entier Entier

EXEMPLES :
12 * 34 = 408
123 / 4 = 30.75
123 DIV 4 = 30
12 MOD 5 =2
True AND False = False
12 AND 22 =4
2 SHL 7 = 256
256 SHR 7 =2

DMSI/PROGRAMMATION - 24 -
Les expressions

VI.4 OPERATEURS ADDITIFS


Opérateur Opération Type des opérandes Type du résultat
+ Addition Réel et Réel Réel
Entier et Entier Entier
Réel et Entier Réel
- Soustraction Réel et Réel Réel
Entier et Entier Entier
Réel et Entier Réel
OR Arithmétique Entier et Entier Entier
Logique Booléen et Booléen Booléen
XOR Arithmétique Entier et Entier Entier
Logique Booléen et Booléen Booléen

EXEMPLES :
123 + 456 = 579
456 - 123.0 = 333.0
True or False = True
12 or 22 = 30
True xor False = True
12 xor 22 = 26

VI.5 OPERATEURS RELATIONNELS


Tous les opérateurs relationnels fonctionnent avec tous les types simples (Type scalaire et
Type réel).
Les opérateurs = et <> sont applicables aux opérandes de type pointeur.
Les opérateurs =, <= et >= sont applicables aux opérandes de type ensemble.
L'opérateur IN renvoie TRUE si la valeur de l'opérande de type scalaire est un membre de
l'opérande de type ensemble.
Le résultat est toujours du type Booléen.

VI.6 IDENTIFICATEURS DE FONCTION


Un identificateur de fonction est un identificateur suivi éventuellement par une liste de
paramètres, consistant en une ou plusieurs variables ou expressions séparées par des virgules,
le tout entre parenthèses.
Si la fonction n'est pas l'une des fonctions standards pré-définies, elle doit avoir été déclarée
auparavant.

VI.7 OPERATEURS D'ADRESSE


TURBO PASCAL comporte deux opérateurs d'adresse : @ adresse de, ^ indirection
L'opérateur @ fournit l'adresse de la variable spécifiée.
Si PointCar est un pointeur sur un objet de type caractère, PointCar^ désigne de manière
indirecte la variable caractère sur laquelle pointe PointCar.

DMSI/PROGRAMMATION - 25 -
Les instructions fondamentales

VII LES INSTRUCTIONS FONDAMENTALES


La partie Instruction commence par le mot réservé Begin et se termine par le mot End. Les
instructions peuvent être simples ou structurées. La syntaxe des instructions est donnée à la
page suivante :

VII.1 INSTRUCTIONS SIMPLES


Les instructions simples sont des instructions ne contenant pas d'autres instructions. Ce sont
l'instruction d'affectation, l'appel de procédure, l'instruction GOTO et l'instruction vide.

VII.1.1 INSTRUCTION D'AFFECTATION


Elle est utilisée pour indiquer qu'une certaine valeur doit être affectée à une certaine variable.
Une affectation est constituée de l'identificateur de variable suivi de := suivi d'une expression.

Les affectations à des variables de tout type sont autorisées à condition que la variable ou la
fonction et l'expression soient de même type. Il existe une exception : si la variable est du type
Réel, le type de l'expression peut être Entier.

EXEMPLES :
Angle := Angle * Pi ;
Acces := False ;
Entry := Answer = Password ;
SurfSphere := 4 * Pi * R * R ;

DMSI/PROGRAMMATION - 26 -
Les instructions fondamentales
INSTRUCTION
ETIQUETTE :

VARIABLE := EXPRESSION

IDENTIFICATEUR DE FONCTION

IDENTIFICATEUR DE FONCTION LISTE DES PARAMETRES EFFECTIFS

BEGIN INSTRUCTION END

IF EXPRESSION THEN INSTRUCTION ELSE INSTRUCTION

WHILE EXPRESSION DO INSTRUCTION

REPEAT INSTRUCTION UNTIL EXPRESSION

CASE EXPRESSION OF

CONSTANTE .. CONSTANTE : INSTRUCTION

,
;

ELSE INSTRUCTION END


; TO
D
O
IDENTIFICATEUR :=
FOR
DE VARIABLE
EXPRESSION W
DOWNTO
N
T
, EXPRESSION DO O
INSTRUCTION

WITH VARIABLE DO INSTRUCTION

GOTO ETIQUETTE

DMSI/PROGRAMMATION - 27 -
Les instructions fondamentales

VII.1.2 L'APPEL DE PROCEDURE


L'appel de procédure permet d'activer une procédure préalablement définie par l'utilisateur, ou
une procédure Standard pré-définie. Cette instruction est constituée de l'identificateur de
procédure suivi éventuellement par une liste de paramètres. Lorsque l'appel de procédure est
rencontré en cours d'exécution d'un programme, le contrôle est transféré à la procédure et la
valeur ou l'adresse des paramètres éventuels sont transférés à cette procédure. Lorsque celle-ci
se termine, l'exécution du programme reprend avec l'instruction suivant l'appel de la
procédure.

EXEMPLES :
Find(Name,Address);
Sort(Address);

VII.1.3 INSTRUCTION GOTO


L'instruction GOTO est constituée du mot réservé GOTO suivi par un identificateur
d'étiquette. Elle permet de continuer l'exécution des instructions au point du programme
marqué par l'étiquette.
Avant tout emploi, les étiquettes doivent être déclarées.
La portée d'une étiquette est le bloc dans lequel elle est déclarée. Il n'est donc pas possible de
sauter à l'intérieur ou à l'extérieur de procédures ou de fonctions.

VII.1.4 INSTRUCTION VIDE


Une instruction vide est une instruction ne contenant aucun symbole et qui n'a donc aucun
effet. Elle peut prendre place chaque fois que la syntaxe de PASCAL nécessite une instruction
et qu'il n'y a aucune action à exécuter.

EXEMPLES :
Begin End.
While Answer <> '' do ;
Repeat Until Keypressed ; { attendre qu'une touche soit frappée }

DMSI/PROGRAMMATION - 28 -
Les instructions fondamentales

VII.2 INSTRUCTIONS STRUCTUREES


Les instructions structurées sont des instructions composées d'autres instructions devant être
exécutées en séquences (séquences d'instructions), ou sous certaines conditions (instructions
conditionnelles), ou répétées plusieurs fois (instructions répétitives).

VII.2.1 SEQUENCES D'INSTRUCTIONS


Une séquence d'instructions est utilisée si plus d'une instruction doit être exécutée dans une
situation où la syntaxe de PASCAL n'autorise qu'une instruction. Elle est constituée par tout
nombre d'instructions séparées par des points virgules et comprises entre les mots réservés
Begin et End

EXEMPLE :
If Small > Big
then
Begin
Tamp := Small;
Small := Big;
Big := Tamp;
End;
Remarque : le point virgule précédent le mot End est facultatif car le End est considéré comme
un séparateur. Il est toutefois recommandé de l'utiliser afin de ne pas l'oublier en cas de rajout
d'instructions.

VII.2.2 INSTRUCTIONS CONDITIONNELLES


Une instruction conditionnelle n'exécute que l'une de ses instructions.

VII.2.2.1 L'INSTRUCTION IF
L'instruction IF indique qu'une instruction ne doit être exécutée que si une condition est vraie
(expression booléenne). Si elle est fausse aucune instruction n'est exécutée ou l'instruction
suivant le mot réservé Else est exécutée.
Remarques :
• il ne doit pas y avoir de point virgule avant le mot Else
• le Else est facultatif.
• Dans le cas de : IF condition1 THEN IF condition2 THEN Inst1 ELSE Inst2, le Else
est rattaché au IF le plus proche.

EXEMPLE:
If A <> B then
If A > B
then Writeln('A est plus grand que B')
else Writeln('A est plus petit que B');

DMSI/PROGRAMMATION - 29 -
Les instructions fondamentales

VII.2.2.2 L'INSTRUCTION CASE


L'instruction CASE est constituée d'une expression et d'une liste d'instructions, chacune étant
précédée par une étiquette de cas de même type que le sélecteur. L'instruction exécutée est
celle dont l'étiquette de cas correspond à la valeur courante de la sélection. S'il n'y en a pas,
aucune instruction n'est exécutée ou éventuellement les instructions suivant le mot réservé Else
sont exécutées.

Remarque : la clause Else est une extension du PASCAL STANDARD.

Une étiquette de cas est constituée de tout nombre de constantes ou d'intervalles séparés par
des virgules et terminés par le signe :. Un intervalle est écrit par deux constantes séparées par
le délimiteur d'intervalle .. . L'instruction suivant l'étiquette de cas est exécutée si la valeur du
sélecteur est égale à une des constantes ou tombe dans l'un de ces intervalles.

Les types légaux pour le sélecteur sont les types scalaires.

EXEMPLES :
Case Operator of
'+': Result := Answer + Result ;
'-': Result := Answer - Result ;
'*': Result := Answer * Result ;
End;

Case Year of
Min .. 1939 : Begin
Time := PreWorldWar2;
Writeln('The World at peace');
End;
1946 .. Max : Begin
Time := PostWorldWar2;
Writeln('Building a new world');
End
Else Begin
Time := WorldWar2;
Writeln('We are at war');
End;
End;

DMSI/PROGRAMMATION - 30 -
Les instructions fondamentales

VII.2.3 INSTRUCTIONS REPETITIVES


Les instructions répétitives indiquent que certaines instructions doivent être exécutées
plusieurs fois. Si le nombre de répétitions est connu à l'avance, l'instruction FOR est
l'instruction appropriée sinon on utilisera les instructions WHILE ou REPEAT

VII.2.3.1 INSTRUCTION FOR


L'instruction FOR indique que le corps de l'instruction doit être exécuté plusieurs fois, tandis
que la variable de contrôle suit une progression qui peut être ascendante TO ou descendante
DOWNTO, vers la valeur finale.
La variable de contrôle, la valeur initiale et la valeur finale doivent être de même type (de type
scalaire).
La valeur finale est déterminée une seule fois lors de l'entrée dans la construction for.
Si la valeur initiale est plus grande que la valeur finale en utilisant TO, ou si la valeur initiale
est plus petite que la valeur finale en utilisant DOWNTO, l'instruction n'est pas exécutée.
EXEMPLES :
For I := 1 To 10 Do If T[I] > Max Then Max := T[I];

For J := 1 to 50 Do
Begin
Readln(Nombre);
If Nombre < Max
Then
Petit := Petit + 1
Else
Grand := Grand + 1;
End;
Remarque : à la fin d'une instruction For, la valeur de la variable de contrôle est indéfinie, sauf
si la boucle a été interrompue par un GOTO.

VII.2.3.2 INSTRUCTION WHILE


L'expression contrôlant la répétition doit être du type Booléen. L'instruction est exécutée tant
que l'expression est vraie. Si sa valeur est fausse au départ, l'instruction n'est pas exécutée.

EXEMPLES :
While Nom <> 'fin' Do Readln(nom);

While T[i] < Max Do


Begin
Writeln(T[i],' est plus petit que ',max) ;
i := i + 1 ;
End;

DMSI/PROGRAMMATION - 31 -
Les instructions fondamentales

VII.2.3.3 INSTRUCTION REPEAT


L'expression contrôlant la répétition doit être du type Booléen. La séquence d'instructions
entre les mots réservés REPEAT et UNTIL est exécutée, jusqu'à ce que l'expression devienne
vraie. Contrairement à l'instruction while, l'instruction Repeat est toujours exécutée au moins
une fois, car l'évaluation de la condition a lieu à la fin de la boucle.

EXEMPLE :
Repeat
Write('Voulez-vous effacer ce texte O/N ');
Rep := ReadKey;
Until UpCase(Rep) in ['O','N'];

VII.2.3.4 LES INSTRUCTIONS BREAK ET CONTINUE


L’instruction Break provoque la sortie immédiate de la boucle for, while ou repeat englobante
de plus haut niveau d'imbrication.
Break est analogue à une instruction goto vers une étiquette située juste après la fin de la
structure itérative englobante de plus haut niveau d'imbrication.
Le compilateur renvoie une erreur si Break n'a pas été appelée dans une instruction for, while
ou repeat.

L’instruction Continue provoque le passage direct à l'itération suivante dans une boucle for,
while ou repeat englobante de plus haut niveau d'imbrication.
Si Continue est appelée en dehors de toute boucle for, while ou repeat, le compilateur signale
une erreur.
Exemples :
For I :=1 To MAX DO Begin
If Tablo[I]=0
Then Break ; { Sortie de la boucle si le contenu du tablo = 0 }
Writeln(Tablo[I]) ;
End ;

For I :=1 To MAX DO Begin


If Tablo[I]=0
Then Continue ; { On ajoute 1 au contenu du Tablo }
Tablo[I] := Tablo[I] + 1 ; { sauf si le Tablo contient 0 }
End ; { Le tablo est parcouru en entier }

DMSI/PROGRAMMATION - 32 -
Types scalaires énumérés et intervalles

VIII TYPES SCALAIRES ENUMERES ET INTERVALLES

Les types de données de base du PASCAL sont les types scalaires. Un type scalaire est
constitué d'un ensemble fini et ordonné de valeurs.

VIII.1 TYPE SCALAIRE ENUMERE


En plus des types scalaires standards (vus au chapitre III), PASCAL supporte les types
scalaires définis par l'utilisateur, également appelés Types scalaires énumérés. La définition
d'un type énuméré comprend dans l'ordre toutes ses valeurs possibles. Les valeurs de ce
nouveau type sont représentées par des identificateurs qui doivent être des constantes du
nouveau type.

EXEMPLES :

Type
Operateur = (plus, moins, multiplie, divise);
JourSemaine = (lun, mar, mer, jeu, ven);

Les variables du type JourSemaine peuvent prendre une des cinq valeurs définies ci-dessus.

Les opérateurs relationnels peuvent s'appliquer à tous les types scalaires tant que les deux
opérandes sont du même type (réels et entiers peuvent être mélangés). La comparaison se fait
sur l'ordre dans lequel les valeurs ont été introduites dans la définition du type. Dans l'exemple
JourSemaine, la condition suivante est vraie :

lun < mar < mer < jeu < ven

Les fonctions standard suivantes peuvent être utilisées avec des arguments de type scalaire
énuméré :

Succ(lun) le successeur de lun : mar


Pred(mer) le prédécesseur de mer : mar
Ord(jeu) la valeur ordinale de jeu :3

La valeur ordinale du premier élément est 0.


Le type du résultat de Succ et Pred est du même type que l'argument.
Le type du résultat de Ord est un entier.

DMSI/PROGRAMMATION - 33 -
Types scalaires énumérés et intervalles

VIII.2 TYPE INTERVALLE


Un type de données peut être défini comme un intervalle d'un autre type scalaire déjà défini.
Ces types sont appelés Intervalle. La définition d'un intervalle donne simplement la plus petite
et la plus grande valeur de l'intervalle.

EXEMPLES :
Type
HemiSphere = (Nord, Sud, Est, Ouest);
Monde = Est..Ouest;
Majuscules = 'A'..'Z';
Minuscules = 'a'..'z';

Le type Monde est un intervalle de type scalaire Hemisphere appelé Type scalaire associé
Le type scalaire associé de Majuscules et de Minuscules est Char
Un type intervalle conserve toutes les propriétés du type scalaire associé et n'est restreint que
dans l'échelle de ses valeurs.

AVANTAGES DE L'EMPLOI DES TYPES


Améliorer la lisibilité des programmes
Vérifications possibles de compatibilité entre les valeurs affectées à des variables scalaires
définies ou à des variables intervalles
Economie de place mémoire. TURBO PASCAL alloue un seul octet de mémoire pour des
variables d'un type défini ou un intervalle ayant un nombre d'éléments inférieur à 256. De
même, les intervalles de type Entier dont les bornes inférieure et supérieure sont comprises
entre 0 et 255, n'occupent qu'un octet en mémoire

VIII.3 CONVERSION DE TYPE


La fonction Ord peut être utilisée pour convertir des types scalaires en valeur entières. Le
PASCAL STANDARD ne permet pas l'opération inverse c'est-à-dire, de convertir un Entier
en une valeur scalaire.
En TURBO PASCAL, une valeur de type scalaire peut être convertie en une valeur d'un autre
type scalaire ayant la même valeur ordinale, par la possibilité Retype. Le changement de type
se fait en utilisant l'identificateur du type désiré comme un identificateur de fonction suivi par
un paramètre entre parenthèses. Le paramètre peut être une valeur de tout type scalaire.

EXEMPLES:
Avec les exemples des paragraphes précédents :
Integer(mar) =1
Hemisphere(2) = Est

DMSI/PROGRAMMATION - 34 -
Types scalaires énumérés et intervalles

VIII.4 VERIFICATION D'ECHELLE


La directive de compilation R permet de générer le code effectuant des vérifications sur les
variables scalaires et les types intervalles. La valeur par défaut est {$R-} c'est-à-dire qu'il n'y a
pas de vérification effectuée. Lorsque la directive est active, {$R+}, une vérification est
effectuée lors d'une affectation à une variable scalaire ou à un intervalle, pour s'assurer que la
valeur affectée est comprise dans l'intervalle autorisé.

EXEMPLES:

Type
Digit = 0..9;

Var
Dig1, Dig2, Dig3 : Digit;

Begin
Dig1 := 5; valide
Dig2 := Dig1 + 3; valide tant que Dig1 + 3 <=
Dig3 := 47; erreur à la compilation
CONSTANT OUT OF RANGE
Dig3 := 8 ;
{$R-} Dig3 := Dig3 + Dig3; pas d'erreur à la compilation
ni à l'exécution
{$R+} Dig3 := 8;
Dig3 := Dig3 + Dig3; pas d'erreur à la compilation
erreur à l'exécution
RANGE CHECK ERROR

End.

Remarque : la directive R est également utilisée pour vérifier la validité des index des tableaux.

DMSI/PROGRAMMATION - 35 -
Type chaine

IX TYPE CHAINE
En TURBO PASCAL, le type chaîne (String) est pré-défini pour le traitement des chaînes de
caractères, c'est-à-dire toute séquence de caractères. Les types chaînes sont des types structurés
et ressemblent beaucoup aux types tableaux (voir chapitre X).

IX.1 DEFINITION DU TYPE CHAINE (chaîne PASCAL)


Une valeur de type chaîne de caractères (String) est une séquence de caractères de taille
variable. Pour déclarer un type chaîne de caractères, on spécifie la taille (attribut constant dont
la valeur varie entre 1 et 255). Par défaut, l'attribut de taille est 255.

STRING

[ ENTIER NON SIGNE ]

EXEMPLES :
Type
NomFichier = String[14];
LigneEcran = String[80];
LigneEdit = String;
Les variables chaînes occupent en mémoire la longueur maximum définie plus un octet qui
contient la longueur courante de la chaîne.

IX.2 CHAINES AZT (à zéro terminal)


Depuis la version TP 7.0, le Turbo PASCAL accepte les chaînes dites à Zéro Terminal (AZT).
Une chaîne à zéro terminal est constituée ainsi:
 une séquence de caractères différents de 0 se terminant par un caractère NULL
(#0) .
 une limite de longueur de 65535 caractères.

Utilisation des chaînes AZT:


Une chaîne AZT est stockée comme un tableau de caractères avec un type d'indice entier à
base zéro du style suivant:
array[0..X] of Char
avec X = un entier positif différent de zéro.
Cela se nomme un tableau de caractères à base zéro.

La directive d'extension de syntaxe ($X ) doit être activée pour pouvoir utiliser l'unité Strings
dans vos programmes.

DMSI/PROGRAMMATION - 36 -
Type chaine

IX.3 LE TYPE PCHAR


Le type prédéfini PCHAR indique un pointeur sur une chaîne AZT.
Le type PCHAR est déclaré de la façon suivante :
Type
PCHAR = ^Char ; { Soit un pointeur sur un caractère }
Le type Pointeur sera étudié au cours du chapitre XVIII.

IX.4 OPERATIONS SUR LES CHAINES PASCAL


Les chaînes sont manipulées par l'emploi des expressions chaînes. Les expressions chaînes
sont constituées de constantes chaînes, de variables chaînes, de noms de fonctions et
d'opérateurs.
Le signe '+' peut être utilisé pour la concaténation des chaînes. Si la longueur dépasse 255, une
erreur survient à l'exécution.

EXEMPLES :

'TURBO ' + 'PASCAL' = 'TURBO PASCAL'


'123' + '.' + '456' = '123.456'
Les opérateurs relationnels ont une préséance inférieure à la concaténation. En comparant
deux chaînes, les caractères sont comparés un à un de la gauche vers la droite selon leur valeur
ASCII. Si les chaînes sont de longueurs différentes mais égales jusqu'au dernier caractère de la
chaîne la plus courte, celle-ci est alors considérée la plus petite. Deux chaînes sont égales si et
seulement si leur contenu et leur longueur sont égaux.

EXEMPLES :

'A' < 'B' vrai


'A' > 'b' faux

IX.4.1 AFFECTATION DE CHAINES


L'opérateur d'affectation est utilisé pour affecter la valeur d'une expression à une variable
chaîne.

EXEMPLES :
Age := 'quinze';
Ligne := 'Bon anniversaire pour vos ' + age + ' ans';

Si la longueur maximum de la variable chaîne est dépassée, les caractères en trop seront
éliminés.

DMSI/PROGRAMMATION - 37 -
Type chaine

IX.4.2 PROCEDURES SUR LES CHAINES PASCAL


Dans les définitions suivantes :
 St, Target désignent des variables chaînes
 Obj désigne une expression chaîne
 Pos et Num désignent des expressions entières dans l'intervalle 1 à 255
 Value désigne une valeur numérique

Les procédures standard suivantes sont définies en TURBO PASCAL:


Delete Procedure Delete (Var St: String; Pos, Num : Integer);
Delete supprime dans St une sous-chaîne contenant Num caractères en commençant à Pos.

St := 'ABCDEFG';
Delete (St, 2, 4); St a pour valeur 'AFG'
Delete (St, 2, 10); St a pour valeur 'A'

Insert Procedure Insert (Obj: String; Var Target: String; Pos: Integer);
Insert insère la chaîne Obj dans la chaîne Target, à la position Pos.

St := 'ABCDEFG';
Insert ('XX', St, 3); St a pour valeur 'ABXXCDEFG'

Str Procedure Str (Value [:Taille[: NbDec]]; Var St: String);


Str convertit la valeur numérique de Value en une chaîne, et range le résultat dans St. Taille et
Nbdec sont des expressions de type entier.

I := 1234;
Str (I, St); St a pour valeur '1234'
X := 2.5E4;
Str (X, St); St a pour valeur ' 2.5000000000E+04'
Str (X:10:0, St); St a pour valeur ' 25000'

DMSI/PROGRAMMATION - 38 -
Type chaine

Val Procedure Val (St: String; Var V; Var Code: Integer);


Val convertit l'expression chaîne St en une valeur entière ou réelle, (en fonction du type de
Var) et range la valeur dans V. Les espaces au début et à la fin ne sont pas autorisés. V doit
être une variable entière ou réelle et Code doit être une variable entière. Si aucune erreur n'est
détectée, Code est mis à 0, sinon Code a la valeur de la position du premier caractère en erreur
et la valeur de Var est indéfinie.

St := '234';
Val (St, I, Code); I a pour valeur 234
Code a pour valeur 0 { = Conversion OK pas d’erreur }
St := '12X';
Val (St, I, Code); I a une valeur indéfinie
Code a pour valeur 3
St := ''; { chaîne vide }
Val (St, I, Code); I a une valeur indéfinie
Code a pour valeur 1
Remarque : si le contrôle du domaine de validité est activé ({$R+}, une valeur hors domaine
provoque toujours une erreur d'exécution.

IX.4.3 FONCTIONS SUR LES CHAINES PASCAL


Les fonctions standard suivantes sont définies en TURBO PASCAL :
Copy Function Copy (St: String; Pos, Num: Integer) : String ;
Copy retourne une sous-chaîne contenant Num caractères en commençant à la position Pos.

St := 'ABCDEFG';
St1 := Copy (St, 3, 2); St1 a pour valeur 'CD'
St2 := Copy (St, 4, 10); St2 a pour valeur 'DEFG'

Concat Function Concat (St1 [, St2, ... StN] : String) : String ;


Concat retourne une chaîne qui est la concaténation de ses arguments dans l'ordre où ils sont
déclarés. La liste des arguments peut contenir tout nombre d'expressions chaînes séparées par
des virgules. Comme vu au paragraphe IX-2, l'opérateur + peut être utilisé pour obtenir le
même résultat.

St1 := 'TURBO ';


St2 := 'est le plus rapide';
St3 := Concat (St1,'PASCAL ',St2);

St3 a pour valeur 'TURBO PASCAL est le plus rapide'

DMSI/PROGRAMMATION - 39 -
Type chaine

Length Function Length (St: String) : Integer ;


Length retourne la longueur d'une expression chaîne St, c'est-à-dire le nombre de caractères
dans St.

St := 'BONJOUR';
I := Length (St); I a pour valeur 7

Pos Function Pos (Obj, Target: String) : Byte ;


Pos recherche dans Target la première occurrence de Obj. Le résultat est un entier sur un octet
donnant la position dans Target du premier caractère de Obj. Si Obj n'est pas trouvé, Pos
retourne 0.

St := 'ABCDEFG';
I := Pos ('DE', St); I a pour valeur 4
I := Pos ('H', St); I a pour valeur 0

IX.5 OPERATIONS SUR LES CHAINES AZT - L'UNITE STRINGS


Pour utiliser les fonctions de gestion des chaînes AZT, il est nécessaire d’indiquer dans la
clause USES l’unité Strings de la façon suivante :
Uses Strings ;
Cette unité Strings assure le support de la classe de chaînes de caractères dites chaînes AZT (à
zéro terminal ou encore null-terminated strings).
Grâce à l'extension de syntaxe de Turbo Pascal et à cette unité Strings, un programme peut
manipuler des chaînes dans le style du C.
C'est le format de chaîne requis par l'interface de développement API de Windows
(Application Programming Interface).

IX.5.1 FONCTIONS DE L'UNITÉ STRINGS:


Les identificateurs de ces fonctions commencent par str (comme en langage C).
StrCat Function StrCat(Dest, Source : PChar) : PChar ;
Concatène une copie d'une chaîne au bout d'une autre et renvoie un pointeur sur la chaîne
concaténée.

StrComp Function StrComp(Str1, Str2 : PChar) : Integer ;


Compare deux chaînes Str1 et Str2 et renvoie
 une valeur inférieure à 0 si Str1 < Str2
 0 si Str1 = Str2
 une valeur supérieure à 0 si Str1 > Str2

DMSI/PROGRAMMATION - 40 -
Type chaine

StrCopy Function StrCopy(Dest, Source : PChar) : PChar ;


Copie la chaîne Source dans Dest et renvoie Dest. Elle ne fait aucun test de dépassement de
longueur.

StrDispose Function StrDispose(Str : PChar) ;


Restitue au système l’espace mémoire occupé par une chaîne et réservé au préalable par
StrNew. Si Str vaut NIL, StrDispose n’a aucun effet. Ne renvoie rien.

StrECopy Function StrECopy (Dest, Source : PChar) : PChar ;


Copie la chaîne Source dans Dest puis renvoie StrEnd(Dest) (=pointeur sur la fin du résultat).

StrEnd Function StrEnd(Str : Pchar) : PChar ;


Renvoie un pointeur sur le caractère nul qui marque la fin d'une chaîne.

StrIComp Function StrIcomp(Str1, Str2 : Pchar) : Integer ;


Compare deux chaînes (sans diff MAJ/min). La valeur renvoyée est identique à celle
renvoyée par la fonction StrComp.

StrLCat Function StrLCat(Dest, Source : PChar ; lngMax : Word) :PChar ;


Ajoute une chaîne Source à la fin d’une chaîne Dest et renvoie un pointeur sur la chaîne
concaténée resultante.

StrLComp Function StrLComp(Str1, Str2 : PChar ; lngMax : Word) :PChar ;


Compare deux chaînes, sur une longueur spécifiée lngMax. La valeur renvoyée est identique à
celle renvoyée par la fonction StrComp.

StrLCopy Function StrLCopy(Dest, Source : PChar ; lngMax : Word) :PChar ;


Copie un nombre de caractères spécifié d'une chaîne Source dans une chaîne Dest.

StrLen Function StrLen(Str : PChar) : Word


Renvoie le nombre de caractères de la chaîne Str.

StrLIComp Function StrLIComp(Str1, Str2 : PChar ; lngMax : Word) :PChar ;


Compare deux chaînes, sur une longueur spécifiée lngMax sans différencier les majuscules des
minuscules. La valeur renvoyée est identique à celle renvoyée par la fonction StrComp.

DMSI/PROGRAMMATION - 41 -
Type chaine

StrLower Function StrLower(Str : PCHar) : PChar ;


Convertit une chaîne en minuscules.

StrMove Function StrMove(Dest, Source : PChar ; Cpt : Word) : PChar ;


Copie Cpt caractères d'une chaîne Source dans une chaîne Dest

StrNew Function StrNew(Str : PChar) : PChar ;


Alloue l’espace mémoire nécessaire pour une chaîne dans la zone du tas (heap). StrNew crée
une copie de Str et demande de l’espace en appelant GetMem, puis renvoie un pointeur sur la
copie. L’espace réservé a une longueur de StrLen(Str) + 1 octets.

StrPas Function StrPas(Str : PChar) : String ;


Convertit une chaîne AZT (style C) en chaîne Pascal.

StrPCopy Function StrPCopy(Dest : PChar ; Source : String) : PChar ;


Copie une chaîne Pascal Source vers une chaîne AZT Dest et renvoie Dest.

StrPos Function StrPos(Str1, Str2 : PChar) : PChar ;


Renvoie un pointeur sur la 1ère occurrence d'une sous-chaîne à l’intérieur d’une chaîne.

StrRScan Function StrRScan(Str : PChar ; Car : Char) : PChar;


Renvoie un pointeur sur la dernière occurrence du caractère Car dans la chaîne Str.
Si le caractère n’est pas trouvé, renvoie NIL.

StrScan Function StrScan(Str : PChar ; Car : Char) : PChar;


Renvoie un pointeur sur la 1ère occurrence d'un caractère dans une chaîne.
Si le caractère n’est pas trouvé, renvoie NIL.

StrUpper Function StrUpper(Str : PCHar) : PChar ;


Convertit une chaîne en majuscules.

DMSI/PROGRAMMATION - 42 -
Type chaine

IX.6 CHAINES ET CARACTERES


Les types chaînes et le type scalaire Char sont compatibles. Chaque fois qu'une valeur chaîne
est attendue une valeur caractère peut être spécifiée et vice-versa.
Lorsqu'un caractère est assigné à une chaîne, la longueur de celle-ci doit être 1 sinon il y aura
erreur à l'exécution.
Les caractères d'une variable chaîne peuvent être atteints individuellement par indexation.
Le premier caractère d'une chaîne (à la position 0) contient la longueur de la chaîne et Length
(Chaine) est identique à Ord (Chaine[0]).

DMSI/PROGRAMMATION - 43 -
Type tableau

X TYPE TABLEAU
Un tableau est un type structuré constitué d'un nombre fixe de composants qui sont tous du
même type appelé le type du composant ou le type de base. Chaque composant peut être
atteint individuellement par un index dans le tableau. Les index sont des expressions de tout
type scalaire.

X.1 DEFINITION DES TABLEAUX

EXEMPLES :
Type
Jour = (Lun, Mar, Mer, Jeu, Ven, Sam, Dim);

Var
HeuresTravail : Array[1..8] of Integer;
Semaine : Array[1..7] of Jour;

Type
Joueurs = (Joueur1, Joueur2, Joueur3, Joueur4);
Main = (Paire, DoublePaire, Brelan, Quinte, Couleur, Full, Carre, Quinte_Flush,
Poker);
Legales = 1..500;
Encheres = Array[Joueurs] of Legales;

Var
Joueur : Array[Joueurs] of Main;
Pot : Encheres;

On accède à un composant du tableau en ajoutant un index entre crochets, à l'identificateur de


la variable tableau.

Joueur[Joueur3] := Full;
Pot[Joueur3] := 100;

Une affectation étant permise entre deux variables de type identique, des tableaux entiers
peuvent être recopiés avec une seule instruction d'affectation.

DMSI/PROGRAMMATION - 44 -
Type tableau

X.2 TABLEAUX MULTIDIMENSIONNELS


Le type de composants d'un tableau peut être de tout type y compris un autre tableau. Cette
structure est appelée un tableau multidimensionnel.

EXEMPLE :

Type
Carte = (Deux,Trois,Quatre,Cinq,Six,Sept,Huit,Neuf,Dix,Valet,Dame,Roi,As);
Couleur = (Pique, Coeur, Carreau, Trefle);
Cartes = Array[Couleur] of Array[1..13] of Carte;
Var
C : Cartes;
Col : Couleur;
Begin
C[Col][5] := Valet;
...
End.
Un tableau multidimensionnel est défini plus simplement en spécifiant des index multiples.
Type
Cartes = Array[Couleur,1..13] of Carte;
Var
C : Cartes;
Col : Couleur;
Begin
C[Col,5] := Valet;
...

Une abréviation similaire peut être utilisée pour choisir le composant du tableau.

X.3 TABLEAUX DE CARACTERES


Les tableaux de caractères sont des tableaux à une dimension dont les composants sont du type
scalaire Char. Les tableaux de caractères sont identiques à des chaînes ayant une longueur
constante.

X.4 TABLEAUX PRE-DEFINIS


TURBO PASCAL a cinq tableaux pré-définis :
Mem, MemW et MemL sont utilisés pour adresser directement la mémoire. Les éléments de
Mem sont des octets, ceux de MemW sont des mots et ceux de MemL sont des entiers longs.
Port et PortW sont des tableaux unidimensionnels où chaque élément représente un port de
données du processeur 8Ox86 dont l'adresse est fournie par l'indice de type word. Les
éléments de Port sont des octets et ceux de PortW sont des mots.

DMSI/PROGRAMMATION - 45 -
Type enregistrement

XI TYPE ENREGISTREMENT
Un enregistrement ou record est une structure constituée d'un nombre fixe de composants
appelés champs. Les champs peuvent être de différents types et chaque champ a un nom qui
est l'identificateur de champ et qui est utilisé pour le sélectionner.

XI.1 DEFINITION D'UN ENREGISTREMENT


La définition d'un enregistrement est constituée du mot réservé Record suivi d'une liste de
champs et terminé par le mot réservé end. La syntaxe d'un enregistrement est la suivante :

TYPE
ENREGISTREMENT
RECORD END

LISTE DES CHAMPS

LISTE DE CHAMPS
;

IDENTIFICATEUR : TYPE

IDENTIFICATEUR
CASE IDENTIFICATEUR : DE TYPE SCALAIRE OF

CONSTANTE : ( LISTE DES CHAMPS )

DMSI/PROGRAMMATION - 46 -
Type enregistrement

EXEMPLES :
Type
JourDuMois = 1..31;
Date = Record
Jour : JourDuMois;
Mois : (Jan,Fev,Mar,Avr,Mai,Juin,Juil,Aou,Sep,Oct,Nov,Dec);
Annee : 1900..1999;
End;
Var
Anniversaire : Date;
Jour, Mois et Annee sont les identificateurs de champ. Un champ est référencé par
l'identificateur de la variable et l'identificateur de champ séparé par un point.

DMSI/PROGRAMMATION - 47 -
Type enregistrement

EXEMPLES :

Anniversaire.Mois := Juin;
Anniversaire.Annee := 1953;

Comme pour les tableaux, les affectations sont autorisées entre deux enregistrements de même
type. Les composants d'un enregistrement peuvent être de tout type. Une construction
constituée d'enregistrement d'enregistrement ([d'enregistrement ...]) est possible.

XI.2 INSTRUCTION WITH


L'emploi d'enregistrements donne quelquefois des instructions assez complexes (notamment
dans le cas d'enregistrements d'enregistrements).

La syntaxe de l'instruction WITH est la suivante :

WITH ARTICLE DO INSTRUCTION

Dans l'exemple précédent, à chaque fois que l'on souhaite accéder à un composant du
RECORD, il faut écrire Anniversaire suivi d'un point et de l'identificateur du champ.

Avec l'instruction WITH on peut écrire :

WITH Anniversaire DO
Begin
Jour := 17;
Mois := Juin;
Annee := 1953;
End;

Les enregistrements peuvent être imbriqués à l'intérieur des instructions WITH, c'est-à-dire
que des enregistrements d'enregistrements peuvent être ouverts.

DMSI/PROGRAMMATION - 48 -
Type enregistrement

EXEMPLES :
Type
Nom = RECORD
Famille : String[30];
Prenom : Array[1..3] of String[10];
END;
Temps = RECORD
HeuresNormales,HeuresSupp,
HeuresNuit,WeekEnd : Integer;
END;
Date = RECORD
Jour : JourDuMois;
Mois :(Jan,Fev,Mar,Avr,Mai,Juin, Juil,Aou,Sep,Oct,Nov,Dec);
Annee : 1900..1999;
END;
Personne = RECORD
Id : Nom;
Time : Date;
END;
Gages = RECORD
Individuel : Personne;
Cout : Temps;
END;

Var
Salaire : Gages;

Begin
..
WITH Salaire, Individuel, Id DO
Begin
Famille := 'DUPONT';
Prenom[1] := 'Jules';
End;

Ce qui est équivalent à

WITH Salaire DO
WITH Individuel DO
WITH Id DO
Begin
Famille := 'DUPONT';
Prenom[1] := 'Jules';
End;

DMSI/PROGRAMMATION - 49 -
Type enregistrement

XI.3 ENREGISTREMENTS AVEC VARIANTES


La syntaxe du type enregistrement permet également d'avoir une partie variable, c'est-à-dire
une partie dont les champs sont de types et en nombre différents, dépendant généralement de
la valeur du champ discriminant.
Une partie variable consiste en un champ discriminant d'un type préalablement défini, dont les
valeurs déterminent les variantes, suivi par des étiquettes correspondant à chaque valeur
possible du champ discriminant.
Chaque étiquette précède une liste de champs définissant le type des variantes correspondant à
l'étiquette.

EXEMPLE :
Type
Forme = (Triangle,Rectangle,Cercle);
Objet = RECORD
X,Y: Integer;
Surface : Real;
CASE Contour : Forme OF
Triangle : (Cote : Integer;
Angle1,Angle2,Angle3 : 1..180);
Rectangle : (Cote1,Cote2 : Integer);
Cercle : (Diametre : Integer)
END;
END;
Var
Figure : Objet;
L'accès aux différentes parties du champ variant se fait comme pour un champ fixe.

IF Figure.Contour = Triangle
THEN
Begin
Figure.Cote := 5;
Figure.Angle1 := 45;
...
End;
La partie fixe d'un enregistrement doit toujours précéder la partie variante.
La mise à jour du sélecteur de champ est de la responsabilité du programmeur.
EXEMPLE :
Donner une structure de données décrivant un laboratoire comprenant 100 employés selon les
informations suivantes:
− son identité (nom, prénom)
− son adresse
− sa situation familiale
− son grade
− son indice
− sa position dans le laboratoire (cadre ou non)

DMSI/PROGRAMMATION - 50 -
Type enregistrement
Program Employe;
Const
Maxmot = 15 ;
Maxsigle = 6;
Maxenfant = 12 ;
Maxindividu = 100 ;
Maxcode = 5;
Type
Mot = String [maxmot];
Sigle = String [maxsigle];
Code = String [maxcode];
Situation = (Celibataire, Marie, Divorce, Veuf);
Adresse = RECORD
Numerorue : Integer;
Codepostal : Code;
Nomrue, Ville : Mot;
END;
Identite = RECORD
Nom,Prenom : Mot;
Age : Integer;
Sexe : (Masculin, Feminin);
END;
Famil = RECORD
CASE Situ : Situation OF
Celibataire : ();
Marie : (Nbenfant : Integer;
Enfant : Array [1..Maxenfant] Of Identite;
Conjoint : Identite);
Divorce,
Veuf : (Nbenfant : Integer;
Enfant : Array [1..Maxenfant] Of Identite)
END;
END;
Individu = RECORD
Identit : Identite;
Adres : Adresse;
Grade : Sigle;
Indice : Integer;
Posit : (Cadre, PasCadre);
Famille : Famil (* champ variant donc dernier champ *)
END;
Var
Laboratoire : Array [1..MaxIndividu] of Individu;

Cette structure de données s'adapte à chaque employé suivant sa situation familiale.

DMSI/PROGRAMMATION - 51 -
Type enregistrement

Soit Laboratoire[1], un individu marié ayant 3 enfants :


-Laboratoire[1].Famille.Situ = Marie

On accède à ses différents champs :

WITH Laboratoire[1] DO
Begin
WITH Identit DO
Begin
Nom := 'DUPONT';
Prenom := 'Jules';
Age := 30;
Sexe := Masculin;
End;
WITH Adres DO
Begin
Numerorue := 34;
Nomrue := 'SIAM';
Codepostal := '29200';
Ville := 'BREST';
End;
WITH Famille DO
Begin
WITH Conjoint DO
Begin
Nom := 'DUPONT';
Prenom := 'Chantal';
Age := 28;
Sexe := Feminin;
End;
Nbenfant := 3;
WITH Enfant[1] DO
Begin
Nom := 'DUPONT';
Prenom := 'Herve';
Age := 3;
Sexe := Masculin;
End;

etc ...

DMSI/PROGRAMMATION - 52 -
Type ensemble

XII TYPE ENSEMBLE


Un ensemble est une collection d'objets de même nature. Chaque objet dans un ensemble est
appelé un membre ou un élément de l'ensemble. Deux ensembles sont égaux si et seulement si
leurs éléments sont les mêmes. Il n'y a pas de notion d'ordre et les ensembles [1,3,5], [5,3,1] et
[3,5,1] sont tous égaux. Si les membres d'un ensemble sont également les membres d'un autre
ensemble, alors le premier est dit inclus dans le second.

XII.1 DEFINITION DE TYPE ENSEMBLE


Les membres d'un ensemble doivent tous être du même type appelé le type de base et le type
de base doit être un type scalaire. Le type ensemble est défini par le mot réservé SET OF suivi
d'un type simple.
EXEMPLES:
Type
JourduMois = SET OF 0..31;
JourSemaine = (Lun,Mar,Mer,Jeu,Ven,Sam,Dim);
JourTravail = SET OF Lun..Ven;
Lettre = SET OF 'A'..'Z';
Dans TURBO PASCAL, le nombre maximum d'éléments d'un ensemble est 256 et les valeurs
ordinales de type de base doivent être comprises entre 0 et 255.

XII.2 EXPRESSIONS ENSEMBLE


Les valeurs de type ensemble peuvent être calculées à partir d'autres valeurs de type ensemble
grâce à des expressions ensemble qui sont constituées de constantes ensemble, de variables
ensemble, de constructions d'ensembles et d'opérateurs sur les ensembles.

XII.3 CONSTRUCTEURS D'ENSEMBLES


Un constructeur d'ensemble est constitué d'une ou plusieurs spécifications d'éléments séparées
par des virgules et entre crochets.
Une spécification d'éléments est une expression du même type que le type de base de
l'ensemble ou un intervalle exprimé par deux expressions séparées par deux points.

EXEMPLES :
['T','U','R','B','O']
[X,Y]
['A'..'Z','a'..'z','0'..'9']
[]
Le dernier exemple montre l'ensemble vide qui n'a pas de type de base et qui est donc
compatible avec tous les types ensemble.
L'ensemble [1..5] est équivalent à [1,2,3,4,5].
Si X > Y, alors [X..Y] dénote l'ensemble vide.

DMSI/PROGRAMMATION - 53 -
Type ensemble

XII.4 OPERATEURS SUR LES ENSEMBLES


Les opérateurs sur les ensembles sont dans l'ordre de préséance :
1- * intersection d’ensembles
2- + union d’ensembles
- différence d’ensembles
3- = test d’égalité
<> test d’inégalité
vrai si tous les éléments du second opérande sont inclus dans le premier
>=
<= vrai si tous les éléments du premier opérande sont inclus dans le second
IN test d'appartenance. Le deuxième opérande est un type d'ensemble et le premier
opérande est une expression du même type que le type de base de l'ensemble.
Le résultat est vrai si le premier opérande est un membre du second.

XII.5 AFFECTATIONS D'ENSEMBLE


Les valeurs résultant des expressions d'ensemble peuvent être affectées à des variables de type
ensemble compatible par l'opérateur :=.

EXEMPLES :

Type
Chiffres = Set of 0..9;
Var
A,B,C : Chiffres;
Begin
A := [1,3,5,7];
B := [2,3,4];
C := A + B; C vaut [1,2,3,4,5,7]
C := A * B; C vaut [3]
C := A - B; C vaut [1,5,7]

Type
ASCII = Set of 0..127;
Var
NonImprimables,Imprimables,TousCaracteres : ASCII;
Begin
TousCaracteres := [0..127];
NonImprimables := [0..31,127];
Imprimables := TousCaracteres - NonImprimables;
End.

DMSI/PROGRAMMATION - 54 -
Constantes avec type

XIII CONSTANTES AVEC TYPE


Les constantes avec type sont une spécialité de TURBO PASCAL. Une constante avec type
peut être utilisée exactement comme une variable du même type.

Les constantes avec type s'utilisent donc comme des variables initialisées, car la valeur d'une
constante typée est définie alors que la valeur d'une variable est indéfinie jusqu'à ce qu'une
affectation soit faite.

L'emploi d'une constante avec type permet d'économiser du code car la constante typée n'est
incluse dans le programme qu'une seule fois alors qu'une constante sans type est incluse
chaque fois qu'elle est utilisée.

Les constantes typées ne sont initialisées qu'une seule fois lors du démarrage du programme.

Les constantes avec type sont définies comme les constantes sans type. La définition spécifie
non seulement la valeur mais aussi le type de cette constante.

XIII.1 CONSTANTES DE TYPE SIMPLE


Une constante typée de type simple est une constante définie avec l'un des types scalaires.

Const
Nombre : Integer = 1234;
Interet : Real = 10.5;
EnTete : String[7] = 'SECTION';
Xon : Char = ^Q;

Une constante avec type peut être utilisée à la place d'une variable comme paramètre pour une
procédure ou une fonction. Une constante avec type est en fait une variable avec une valeur
constante. Elle ne peut pas être utilisée dans la définition d'autres constantes ou types.

DMSI/PROGRAMMATION - 55 -
Constantes avec type

XIII.2 CONSTANTES AVEC TYPE STRUCTUREES


Les constantes structurées sont les constantes tableaux, les constantes enregistrements et les
constantes ensembles. Leur emploi permet d'initialiser facilement des tableaux et des
ensembles.

XIII.2.1 CONSTANTES TABLEAUX


La définition d'une constante tableau est constituée de l'identificateur de la constante, suivi du
signe = et de la constante exprimée par un ensemble de constantes séparées par des virgules et
entre parenthèses. Les constantes tableaux de caractères peuvent être spécifiées soit par des
caractères soit par des chaînes. La définition :

Const
Chiffres : Array [0..9] of char = ('0','1','2','3','4','5','6','7','8','9');
peut s'écrire
Const
Chiffres : Array [0..9] of char = '0123456789';

XIII.2.2 CONSTANTES TABLEAUX MULTI-DIMENSIONNELS

Les constantes tableaux multi-dimensionnels sont définies en entourant les constantes de


chaque dimension entre parenthèses, séparées par des virgules.

EXEMPLE :

Type
Cube = Array[0..1,0..1,0..1] of Integer;
Const
GrandCube : Cube =(((0,1),(2,3)),((4,5),(6,7)));

GrandCube [0,0,0] a pour valeur 0


GrandCube [1,0,0] a pour valeur 4
GrandCube [1,1,1] a pour valeur 7

DMSI/PROGRAMMATION - 56 -
Constantes avec type

XIII.2.3 CONSTANTES ENREGISTREMENTS


Une constante enregistrement est définie par l'identificateur de constante, suivi du signe : et de
l'identificateur d'un type enregistrement préalablement défini suivi du signe = et de la valeur
constante exprimée par une liste des constantes champs, séparées par des ; et entre parenthèses.

EXEMPLES :
Type
Point = Record
X, Y, Z : Integer;
End;
OS = (CPM80, CPM86, MSDOS, UNIX);
UI = (CCP, SomethingElse, MenuMaster);
Computer = Record
OperatingSystems : Array [1..4] of OS;
UserInterface : UI;
End;

Const
Origin : Point = (X:0; Y:0; Z:0);
SuperComputer : Computer =
(OperatingSystems : (CPM80, CPM86, MSDOS,UNIX);
UserInterface : MenuMaster);
Plane1 : Array [1..3] of Point =
((X:1;Y:4;Z:5),(X:10;Y:78;Z:45),(X:100;Y:10;Z:7));

Si une constante enregistrement contient une partie variable, le programmeur doit spécifier
seulement les champs de la partie valide. Si la partie variante contient un sélecteur de champ,
sa valeur doit être spécifiée.

XIII.2.4 CONSTANTES ENSEMBLE


Une constante ensemble est constituée d'une ou plusieurs spécifications d'éléments séparées
par des virgules et entre crochets. La spécification d'un élément doit être une constante ou un
intervalle exprimé par deux constantes séparées par deux points.

EXEMPLES :

Type
Up = set of 'A'..'Z';
Low = set of 'a'..'z';
Const
UpperCase : Up = ['A'..'Z'];
Voyelles : Low = ['a','e','i','o','u','y'];

DMSI/PROGRAMMATION - 57 -
Procédures et fonctions

XIV PROCEDURES ET FONCTIONS


Un programme comprend une suite d'actions plus ou moins indépendantes. Un regroupement
de certaines actions dans des blocs permet de structurer un programme, ces blocs pouvant être
exécutés sur demande. Cette structuration offre deux avantages:
Le bloc ainsi défini correspond à une fonction bien précise qui est apparue lors de l'analyse du
problème. Il peut donc être écrit séparément, et au besoin se diviser lui-même en sous-blocs si
son analyse fait apparaître d'autres fonctions distinctes.
La fonction réalisée par un bloc peut être demandée en différents points du programme. Il est
inutile de la réécrire autant de fois que nécessaire, il suffit de demander l'exécution du bloc
correspondant.
En PASCAL, ces blocs se réalisent par des sous-programmes que l'on nomme Procédure ou
Fonction.
Une procédure est activée dans un programme par un appel de procédure.
Une fonction est semblable à une procédure mais elle calcule et retourne une valeur lorsque
son identificateur est rencontré durant l'exécution.

XIV.1 LES PARAMETRES


Des valeurs peuvent être passées à des procédures ou des fonctions par des paramètres. Les
paramètres fournissent un mécanisme de substitution permettant à la logique d'un sous-
programme d'être utilisée avec différentes valeurs initiales, donnant ainsi des résultats
différents.
Un appel de procédure ou de fonction peut contenir une liste de paramètres, appelés les
paramètres réels. Ils sont substitués aux paramètres formels spécifiés dans l'en-tête du sous-
programme.
L'ordre des paramètres passés est l'ordre d'apparition dans la liste des paramètres.
Il existe trois sortes de paramètres en PASCAL classés suivant leur mode de transmission : par
valeur, par adresse et par adresse sans type.

La syntaxe des listes de paramètres est la suivante:

VAR ,

IDENTIFICATEUR IDENTIFICATEUR
( DU PARAMETRE : )
DU TYPE

DMSI/PROGRAMMATION - 58 -
Procédures et fonctions

XIV.1.1 PARAMETRES PAR VALEUR


Lorsque les paramètres sont passés par valeur, le paramètre formel représente une variable
locale au sous-programme et tout changement du paramètre formel n'a pas d'effet sur le
paramètre réel. Les types des paramètres formels et des paramètres réels doivent correspondre.

Ces paramètres sont déclarés dans l'en-tête du sous-programme comme dans l'exemple suivant:

Procedure Exemple(Nb1,Nb2:Nombre ; Ch1,Ch2:Txt);

Nombre et Txt sont des types préalablement définis.

XIV.1.2 PARAMETRES PAR ADRESSE


Lorsqu'un paramètre est passé par adresse (on dit aussi par référence ou par variable), le
paramètre formel représente en fait le paramètre réel durant l'exécution du sous-programme.
Toute modification apportée au paramètre formel affecte donc le paramètre réel qui doit être
une variable.

Les paramètres passés par référence sont déclarés précédés du mot réservé Var.

Procedure Exemple(Var Resul1,Resul2:Integer);

Les paramètres par valeur et les paramètres variables peuvent être utilisés ensemble dans la
même procédure.

Procedure Exemple(Var Resul1:Integer;Don1,Don2:integer);

PAR VALEUR

ARGUMENTS Lecture seule ARGUMENTS

EFFECTIFS FORMELS
PAR VARIABLE

Lecture et écriture

Tous les calculs d'adresses sont faits à l'appel de la procédure. Si une variable est un
composant d'un tableau, ses expressions d'index sont calculées lorsque le sous-programme est
appelé.
Lorsque l'on veut passer une importante structure de données comme paramètre, par exemple
un tableau, l'utilisation d'un paramètre variable permet d'économiser de l'espace et du temps
car la seule information passée au sous-programme est l'adresse du paramètre réel.

DMSI/PROGRAMMATION - 59 -
Procédures et fonctions

XIV.1.3 PARAMETRES PAR ADRESSE SANS TYPE


Si le type d'un paramètre formel n'est pas défini, c'est-à-dire si l'on omet la définition du type
dans l'en-tête du sous-programme, le paramètre est dit sans type. Le paramètre réel
correspondant peut alors être de tout type.
Au sein de la procédure ou de la fonction, le paramètre est réellement sans type, donc il n'est
compatible avec aucune variable. La seule méthode pour briser son isolement est de lui
appliquer un transtypage.

Exemple :

Function Egal(Var Source,Dest ; Taille : Word) : Boolean;


TYPE
Octets = Array[0..Maxint] of Byte;
VAR
N : Integer;
Begin
N := 0;
While (N < Taille) And ( (Octets(Dest)[N]) = (Octets(Source)[N]) ) Do Inc(N);
Egal := N = Taille;
End;

Cette fonction peut être utilisée pour comparer deux variables de toute taille et de tout type.

XIV.2 LE TYPE SOUS-PROGRAMME


Turbo Pascal autorise le type sous-programme grâce auquel on peut traiter des procédures et
des fonctions comme des objets.

Type
Proc = Procedure;
Echange = Procedure(Var X, Y : Integer);
Var
P : Proc;
Q : Echange;

Ces variables sous-programmes peuvent être l'objet d'affectations en respectant la


compatibilité au niveau des affectations (même nombre de paramètres, de mêmes type). De
plus, il faut que la procédure (ou la fonction) devant être affectée soit compilée avec la
directive {$F+}, et que cette procédure (ou cette fonction) ne soit ni standard, ni imbriquée, ni
inline, ni interrupt.
Il est possible de déclarer des procédures et des fonctions utilisant des procédures et des
fonctions en tant que paramètres en respectant les mêmes règles de compatibilité que pour
l'affectation.

DMSI/PROGRAMMATION - 60 -
Procédures et fonctions

XIV.3 LES PROCEDURES


Une procédure peut être soit pré-déclarée, dite alors procédure standard, soit définie par
l'utilisateur.

DECLARATION EN TETE DE CORPS DE


DE PROCEDURE PROCEDURE ; PROCEDURE ;

EN TETE DE
PROCEDURE PROCEDURE IDENTIFICATEUR
LISTE DE
PARAMETRES
FORMELS

CORPS DE
PROCEDURE BLOC

INTERRUPT ; FORWARD

EXTERNAL
NEAR

FAR BLOC ASM

DIRECTIVE INLINE

Une déclaration de procédure est constituée d'un en-tête de procédure, suivie d'un bloc
constitué d'une partie déclaration et d'une partie instruction.

DMSI/PROGRAMMATION - 61 -
Procédures et fonctions
L'en-tête de procédure est constitué du mot réservé Procedure suivi de l'identificateur de la
procédure et des paramètres éventuels.
La directive Interrupt insérée juste avant le début du corps de procédure transforme cette
dernière en procédure d'Interruption qui doit comporter la liste de paramètres suivante:

Procedure Inter (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);

La partie déclaration d'une procédure a la même forme que celle d'un programme.
Tous les identificateurs déclarés dans la liste des paramètres formels et dans la partie
déclaration sont locaux à cette procédure et à toute procédure à l'intérieur de celle-ci.
La partie instruction indique l'action à exécuter lorsque la procédure est appelée, et elle a la
forme d'une instruction composée.

DMSI/PROGRAMMATION - 62 -
Procédures et fonctions

EXEMPLE DE PROCEDURE:

Program Parametre;
Var
A,B :Integer;

Procedure H(X:Integer;Var Y:Integer);


Begin
X := X + 1;
Y := Y + 1;
Writeln(X,Y);
End; { of procedure H }

Begin { Programme principal }


A := 0;
B := 0;
H(A,B);
Writeln(A,B);
End.

A l'exécution, on obtient : 1 1
0 1

DMSI/PROGRAMMATION - 63 -
Procédures et fonctions

XIV.4 LES FONCTIONS


Les fonctions sont comme les procédures, soit standards, soit définies par le programmeur.

DECLARATION EN TETE DE CORPS DE


DE FONCTION ; ;
FONCTION FONCTION

EN TETE DE
FUNCTION IDENTIFICATEUR
FONCTION
LISTE DE
PARAMETRES
FORMELS

: TYPE DE RESULTAT

TYPE DE RESULTAT IDENTIFICATEUR DE TYPE

STRING

CORPS DE
FONCTION BLOC

NEAR ; FORWARD

EXTERNAL
FAR

BLOC ASM

DIRECTIVE INLINE

La déclaration de fonction est constituée de l'en-tête de la fonction et d'un bloc, lui-même


constitué d'une partie déclaration suivie d'une partie instruction.
L'en-tête de fonction est constitué du mot réservé Function suivi de l'identificateur de la
fonction, suivi des paramètres éventuels, suivi du signe : et du type du résultat de la fonction.
Function KeyHit:Boolean;
Function Puiss(X:real;N:Integer):Real;
Function Compute(Var Value:Integer):Real;
Le type du résultat d'une fonction doit être un type simple (Integer, Real, Boolean, Char, Type
scalaire déclaré ou Intervalle), un type chaîne ou un type pointeur .

DMSI/PROGRAMMATION - 64 -
Procédures et fonctions

EXEMPLES DE FONCTIONS:

Program Puissance;
Var
A : Real;
N : Integer;

Function Puiss(X : Real; N : Integer) : Real;


Var
P : Real;
I : Integer;
Begin
P := 1;
If N > 0
Then
For I := 1 to N do P := P * X
Else
For I := -1 Downto N Do P := P / X;
Puiss := P;
End;

Begin
Write('Entrer un nombre : );
Readln(A);
Write('Entrer son exposant : ');
Readln(N);
Writeln(A:10:2,Puiss(A,N));
End.
Remarque : l'exemple suivant nécessite un examen approfondi pour sa bonne compréhension:
Program Test;
Var
A, Z : Integer;

Function Carre(X:Integer):Integer;
Begin
Z := Z - X;
Carre := Sqr(X);
End; { of Function Carre }

Begin { Programme Principal }


Z := 10; A := Carre(Z); Writeln(A,Z);
Z := 10; A := Carre(10) * Carre(Z); Writeln(A,Z);
Z := 10; A := Carre(Z) * Carre(10); Writeln(A,Z);
End.

Le résultat de l'exécution est sous TP6 et TP7: 100 0


10000 -10
0 0
Attention : le résultat dépend de la version de TPascal (Différences avec les versions 5
et précédentes)
XIV.5 DESCRIPTION DU PLAN DE LA MEMOIRE D'UN PROGRAMME TURBO
PASCAL
DMSI/PROGRAMMATION - 65 -
Procédures et fonctions
Limite supérieure de la mémoire gérée par le DOS

Table des fragments


FreePtr ( croît vers le bas )
Mémoire disponible

HeapPtr
Tas
HeapOrg ( croît vers le haut ) OvrHeapEnd
Tampon de recouvrement
des partiels OvrHeapOrg
Pile
SSeg:SPtr ( croît vers le bas )
Pile disponible
SSeg:0000
Variables globales

Constantes typées
DSeg:0000
Segment de code de Contenu
l’unité System
d’un
Segment de code de la
première unité
Segment de code des fichier
autres unités
Segment de code du .EXE
programme principal
Préfixe de segment de
PrefixSeg programme

Le Préfixe de Segment de Programme (PSP) est une zone de 256 octets créée par MS-DOS
lors du chargement du fichier .EXE.
Chaque module (programme principal et les unités) possède son propre segment de code. La
taille d'un segment de code ne peut dépasser 64 Ko.

DMSI/PROGRAMMATION - 66 -
Procédures et fonctions

Le segment de données (accessible par DS) contient toutes les constantes typées suivies par
toutes les variables globales. Le registre DS n'est jamais modifié pendant l'exécution du
programme. Sa taille maximale est de 64 Ko.

Les variables locales aux procédures et fonctions sont créées et stockées dans la pile
(accessible par SS). Les paramètres sont transmis aux procédures et fonctions par
l'intermédiaire de la pile. Avant l'appel, les paramètres sont placés sur la pile en suivant l'ordre
de leur déclaration. Avant de s'achever, la procédure ou la fonction supprime les paramètres de
la pile.

Les paramètres sont transmis par adresse ou par valeur. Quand un paramètre est transmis par
adresse (référence), un pointeur sur l'emplacement réel de stockage est placé sur la pile. Avec
une transmission par valeur, c'est la valeur réelle qui est placée sur la pile.

La taille du segment de pile ne peut dépasser 64 Ko, sa taille par défaut (16 Ko) est modifiable
grâce à la directive de compilation {$M}

Le Tas (Heap) stocke les variables dynamiques (voir chapitre XVIII). Il occupe tout ou partie
de la mémoire libre. La taille réelle dépend des valeurs minimale et maximale qui peuvent être
fixées par la directive de compilation {$M}.

XIV.6 PROCEDURES ET FONCTIONS STANDARD


En plus des procédures et des fonctions standards déjà décrites dans les chapitres précédents
(manipulation de chaînes ou de fichiers, allocations des variables dynamiques (Chapitre
XVIII), procédures d'entrée/sortie), les procédures suivantes sont disponibles.

XIV.6.1 PROCEDURES DE CONTROLE GENERAL


EXIT Exit;
Sortie immédiate du bloc courant (procédure ou fonction).

HALT Halt [ (CodeSortie : Word)];


Arrêt de l'exécution du programme et retour au système d'exploitation. CodeSortie est une
expression facultative qui précise le code de sortie du programme.

RUNERROR RunError [ (ErreurCode : Byte)];


Permet comme Halt de stopper l'exécution d'un programme, mais renvoie un code erreur
d'exécution (ErreurCode, 0 s'il est omis).

DMSI/PROGRAMMATION - 67 -
Procédures et fonctions
XIV.6.2 PROCEDURES ET FONCTIONS D'ALLOCATION DYNAMIQUE DE
MEMOIRE
DISPOSE Dispose(Var P : Pointer);
Libération d'une variable dynamique.

FREEMEM FreeMem(Var P : Pointer; Taille : Word);


Libération d'une variable dynamique dont la taille est spécifiée lors de l'appel.

GETMEM GetMem(Var P : Pointer; Taille : Word);


Création d'une variable dynamique de taille spécifiée et affectation d'un pointeur sur cette
variable.

MARK Mark(Var P : Pointer);


Mémorisation de l'adresse courante du pointeur de tas.

MAXAVAIL MaxAvail: LongInt


Renvoie la taille du plus grand bloc contigu de mémoire disponible dans le tas au moment de
l'appel.

MEMAVAIL MemAvail : LongInt


Renvoie le nombre d'octets disponibles dans le tas, quel que soit son état de fragmentation.

NEW New(Var P : Pointer);


Création d'une variable dynamique et affectation d'un pointeur sur celle-ci.
New(TypePointeur, Init(Liste Paramètres));
Création et Initialisation d'un objet créé dans le tas et renvoie un pointeur du type indiqué.
Dans ce cas d'utilisation, New attend le constructeur de l'objet en second paramètre.
Ptr := New (T_Ptr, Init(5)));
New(T_Ptr(Ptr),Init(5));

RELEASE Release(Var P : Pointer);


Libération de l'espace mémoire situé au-dessus de l'adresse spécifiée.

DMSI/PROGRAMMATION - 68 -
Procédures et fonctions

XIV.6.3 FONCTIONS DE TRANSFERT


CHR Chr(Num) : Char
Retourne le caractère dont la valeur ordinale est donnée par l'expression entière Num.
Exemple: Chr(65) retourne le caractère 'A'.

ORD Ord(Var) : LongInt


Retourne la valeur ordinale de la valeur Var dans l'ensemble défini par le type Var. Var peut
être de tout type scalaire sauf réel et le résultat est du type entier.

ROUND Round(Num) : LongInt


Retourne la valeur de Num arrondie à l'entier le plus proche selon les règles suivantes
Si Num >= 0 alors Round(Num) = Trunc(Num + 0.5)
sinon Round(Num) = Trunc(Num - 0.5).
Num doit être du type réel et le résultat est du type entier.

TRUNC Trunc(Num) : LongInt


Retourne le plus grand entier plus petit que ou égal à Num si Num >= 0 et le plus petit entier
plus grand que ou égal à Num dans le cas contraire. Num doit être du type réel et le résultat est
du type entier.

DMSI/PROGRAMMATION - 69 -
Procédures et fonctions

XIV.6.4 FONCTIONS ARITHMETIQUES


ABS Abs(Num) : Même type que Num
Retourne la valeur absolue de Num. L'argument Num doit être soit un réel soit un entier et le
résultat est de même type que l'argument.

ARCTAN ArcTan(Num : Real) : Real


Retourne l'angle en radians dont la tangente est Num.

COS Cos(Num : Real) : Real


Retourne le cosinus de Num. L'argument Num est exprimé en radians.

EXP Exp(Num : Real) : Real


Retourne l'exponentielle de Num.

FRAC Frac(Num : Real) : Real


Retourne la partie fractionnaire de Num, c'est-à-dire Frac(Num) = Num - Int(Num).

INT Int(Num : Real) : Real


Retourne la partie entière de Num, c'est-à-dire Num sans aucune décimale.

LN Ln(Num : Real) : Real


Retourne le logarithme népérien de Num.

PI Pi : Real
Valeur de Pi (3.1415926535897935385)

SIN Sin(Num : Real) : Real


Retourne le sinus de Num. Num est exprimé en radians.

SQR Sqr(Num) : Même type que Num


Retourne le carré de Num. Num doit être soit un réel soit un entier.

SQRT Sqrt(Num : Real) : Real


Retourne la racine carrée de Num.

DMSI/PROGRAMMATION - 70 -
Procédures et fonctions

XIV.6.5 PROCEDURES ET FONCTIONS SCALAIRES


DEC Dec(Var X [; N : LongInt]);
Décrément d'une variable scalaire
Dec(X) correspond à X := X - 1
Dec(X,N) correspond à X := X – N

INC Inc(Var X [; N : LongInt]);


Incrément d'une variable scalaire
Inc(X) correspond à X := X + 1
Inc(X,N) correspond à X := X + N

ODD Odd(Num : LongInt) : Boolean


Retourne la valeur booléenne TRUE si Num est un nombre impair et FALSE si Num est un
nombre pair.

PRED Pred(Num) : Même type que Num


Retourne le prédécesseur de Num s'il existe. Num peut être de tout type scalaire.

SUCC Succ(Num) : Même type que Num


Retourne le successeur de Num s'il existe. Num peut être de tout type scalaire.

DMSI/PROGRAMMATION - 71 -
Procédures et fonctions

XIV.6.6 FONCTIONS DE POINTEUR ET D'ADRESSE


ADDR Addr(X) : Pointer
Renvoie l'adresse en mémoire de l'objet spécifié. X peut être une variable, une fonction ou une
procédure.

CSEG Cseg : Word


Renvoie le contenu actuel du registre CS.

DSEG Dseg : Word


Renvoie du contenu actuel du registre DS.

OFS Ofs(X) : Word


Renvoie la partie déplacement (offset) de l'adresse de l'objet spécifié. X peut être une variable,
une fonction ou une procédure.

PTR Ptr(Seg, Dep : Word) : Pointer


Conversion d'une adresse spécifiée sous la forme "segment, déplacement" en une valeur de
type pointeur.

SEG Seg(X) : Word


Renvoie la partie segment de l'adresse de l'objet spécifié. X peut être une variable, une
fonction ou une procédure.

SPTR Sptr : Word


Renvoie le contenu actuel du registre SP.

SSEG SSeg : Word


Renvoie le contenu actuel du registre SS.

DMSI/PROGRAMMATION - 72 -
Procédures et fonctions

XIV.6.7 PROCEDURES ET FONCTIONS DIVERSES


FILLCHAR FillChar(Var X; Num : Word; Ch : Value);
Remplit une partie de la mémoire avec une valeur donnée. X est une variable de n'importe
quel type, Num une expression de type Word et Value un type scalaire quelconque. La
procédure FillChar écrit la valeur de Ch dans Num octets contigus en commençant au premier
octet occupé par X.

HI Hi(I) : Byte
Renvoie l'octet de poids fort de son argument. I est une expression de type entier ou mot.

LO Lo(I) : Byte
Renvoie l'octet de poids faible de son argument. I est une expression de type entier ou mot.

MOVE Move(Var Source, Dest ; Nombre : Word);


Effectue une copie directe en mémoire du nombre d'octets spécifié. Source et Dest sont des
paramètres de tout type transmis par référence. La procédure recopie un bloc de Nombre octets
en commençant au premier octet occupé par Source, à l'emplacement commençant au premier
octet occupé par Dest. La procédure Move gère automatiquement les recouvrements éventuels
durant les processus de recopie.

PARAMCOUNT ParamCount : Word


Renvoie le nombre de paramètres passés au programme dans la ligne de commande. Les
espaces et les caractères de tabulation servent comme séparateurs.

PARAMSTR ParamStr(N : Word) : String


Cette fonction chaîne retourne le Nième paramètre de la ligne de commande ou une chaîne
vide (si N est égal à 0 ou si N est supérieur à ParamCount).

RANDOM Random : Real


Retourne un nombre aléatoire plus grand que ou égal à zéro et plus petit que un.
Random(Num : Word) : Word
Retourne un nombre aléatoire plus grand que ou égal à zéro et plus petit que Num.

RANDOMIZE Randomize;
Initialise le générateur de nombre aléatoire avec une valeur aléatoire.

SIZEOF SizeOf(Name) : Word


Retourne le nombre d'octets occupé en mémoire par la variable ou le type Name.
SWAP Swap(Num) : même type que Num

DMSI/PROGRAMMATION - 73 -
Procédures et fonctions
Inversion des octets de poids fort et de poids faible de l'argument. Num est une expression de
type entier ou mot.

UPCASE UpCase(Ch : Char) : Char


Retourne la majuscule équivalente de son argument. Si Ch n'appartient pas à l'intervalle a..z,
Ch est retourné inchangé.

XIV.6.8 VARIABLES PREDECLAREES DE L'UNITE SYSTEM

Variables non initialisées :

Input Text Fichier d'entrée standard


OutPut Text Fichier de sortie standard
SaveIntxy POINTER Sauvegarde de l'interruption $xy où xy peut être 00, 02, 1B,
23, 24, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F, 75

Variables initialisées :

OvrCodeList Word = 0 Liste des segments du tampon de recouvrement


OvrHeapSize Word = 0 Taille initiale du tampon de recouvrement
OvrDebugPtr Pointer = NIL Pointeur de débogage
OvrHeapOrg Word = 0 Origine du tampon de recouvrement
OvrHeapPtr Word = 0 Pointeur de tampon de recouvrement
OvrHeapEnd Word = 0 Fin du tampon de recouvrement
OvrLoadList Word = 0 Listes des partiels chargés
OvrDosHandle Word = 0 Gestionnaire DOS du recouvrement
OvrEmsHandle Word = 0 Gestionnaire EMS du recouvrement
HeapOrg Pointer = NIL Origine du Tas
HeapPtr Pointer = NIL Pointeur du Tas
FreePtr Pointer = NIL Pointeur table des fragments
FreeMin Word = 0 Taille minimale table des fragments
HeapError Pointer = NIL Fonction d'erreur du Tas
ExitProc Pointer = NIL Procédure de sortie Exit
ExitCode Integer = 0 Code de sortie
ErrorAddr Pointer = NIL Adresse erreur d'exécution
PrefixSeg Word = 0 Préfixe de segment de programme
StackLimit Word = 0 Limite inférieure du pointeur de pile
InOutRes Integer = 0 Tampon de résultat des E/S
RandSeed LongInt = 0 Nombre aléatoire initial
FileMode Byte = 2 Mode d'ouverture fichier
Test87 Byte = 0 Résultat du test de présence 80x87

DMSI/PROGRAMMATION - 74 -
Procédures et fonctions

XIV.7 DECLARATIONS FORWARD-EXTERNAL-INLINE


FORWARD
Si un sous-programme P doit appeler un autre sous-programme Q, il est nécessaire de déclarer
le sous-programme Q avant le sous-programme P.

Si P appelle Q Déclaration de Q
-
-
Déclaration de P
Si un sous-programme P doit appeler un sous-programme Q qui doit lui-même appeler P, il est
nécessaire de préciser que le deuxième sous-programme est déclaré plus loin dans le
programme. Ceci est réalisé en spécifiant son en-tête séparément du bloc. L'en-tête du sous-
programme séparé est exactement comme une en-tête normale, sauf qu'elle se termine par le
mot réservé Forward.
Le bloc se trouve plus loin dans la même partie déclaration et commence par une copie de l'en-
tête spécifiant seulement le nom et sans paramètre ni type.

EXEMPLE:
Program Essai;
Var
I : Integer;

Procedure Q(A:Integer);Forward; {déclaration différée}


Procedure P(B:Integer);
Begin
-
Q(B);
-
End;
Procedure Q; {déclaration descriptive}
Begin
-
P(A);
-
End;
Begin { Programme Principal }
-
I := 3;
Q(I);
-
End.

DMSI/PROGRAMMATION - 75 -
Procédures et fonctions

Remarques :
La partie déclaration descriptive d'une procédure FORWARD peut être une déclaration
EXTERNAL; il ne peut, en revanche, s'agir ni d'une déclaration INLINE ni d'une autre
déclaration FORWARD. Elle ne peut pas contenir non plus la directive INTERRUPT.
Les déclarations FORWARD sont interdites dans la partie INTERFACE d'une unité.
EXTERNAL
Le mot réservé External déclare des sous-programmes comme étant externes c'est-à-dire
permettant d'interfacer les programmes avec des procédures ou fonctions écrites en langage
d'assemblage (fichiers .OBJ).
Un sous-programme externe n'a pas de bloc, seule l'en-tête est spécifiée, suivie du mot réservé
External. Le fichier correspondant doit être lié au programme ou à l'unité par la directive {$L
Nom_de_Fichier}

EXEMPLE:

Procedure Deplace(Var Source, Dest: LongInt); External;


{$L BLOC.OBJ}

ASM
Les déclarations assembler permettent d'écrire des procédures entièrement en assembleur.

PARTIE INSTRUCTION
BLOC ASM ASSEMBLER ; DECLARATION ASM

EXEMPLE:

Function LongMul(X, Y : Integer) : LongInt; Assembler ;


asm
MOV AX, X
IMUL Y
end;

L'instruction ASM permet d'insérer une ou plusieurs instructions assembleur séparées par un
point-virgule, un saut de ligne ou un commentaire Pascal.
EXEMPLE:
If Inter_Autorise
Then
asm STI end
Else
asm CLI end;

DMSI/PROGRAMMATION - 76 -
Procédures et fonctions

INLINE
La directive INLINE permet d'insérer directement des instructions en code machine au sein
d'un flot d'instructions (l'effet de cette directive est proche des macro-instructions disponibles
en langage d'assemblage).
Ces directives ne contiennent ni déclaration locale ni bloc Begin..End. Leur structure ne
comporte que l'en-tête suivi par une instruction en ligne.

EXEMPLE :
Procedure ActvInterr ; INLINE($FA) ; { mnémonique = CLI }

L'instruction inline permet d'insérer un ou plusieurs éléments en ligne séparés par une barre (/)
et encadrés par des parenthèses. Les instructions inline peuvent être librement mélées aux
autres instructions.

EXEMPLE:
Function LongMul(X, Y : Integer) : LongInt;
INLINE ( $58 / { POP AX soit POP Y }
$5A / { POP DX soit POP X }
$F7 / $EA ) ; { IMUL DX soit DX:AX = X * Y }

DMSI/PROGRAMMATION - 77 -
La récursivité

XV LA RECURSIVITE
Le langage PASCAL autorise la récursivité simple et la récursivité croisée. Il y a récursivité
simple lorsqu'une fonction ou une procédure en cours d'exécution s'appelle elle-même, et
demande donc une nouvelle activation. Il y a récursivité croisée entre deux procédures A et B
si la procédure A appelle la procédure B qui elle-même appelle la procédure A.

XV.1 LA RECURSIVITE SIMPLE


Un exemple de récursivité simple est le suivant:

Procedure Rec(...);
Begin
-
Rec(...);
-
End;
L'emploi de la récursivité est pratique pour résoudre les problèmes dont la définition est
naturellement récursive.

Soit par exemple le calcul de Factorielle N:


N! = N * (N-1) * (N-2) * . . . * 2 * 1

La fonction suivante permet ce calcul:


Program Factoriel;
Var
N : LongInt;

Function Fact (M : LongInt):LongInt;


Begin
If M > 1
Then Fact := M * Fact(M-1)
Else Fact := 1;
End;

Begin
Write('ENTRER UN NOMBRE ENTIER ');
Readln(N);
Writeln('La Factorielle de ',N:5,' EST ',Fact(N):6);
End.

Remarque: il existe bien entendu une méthode plus simple pour résoudre ce problème.

DMSI/PROGRAMMATION - 78 -
La récursivité

Pour bien comprendre le fonctionnement de la récursivité, il faut bien connaître comment un


sous-programme est activé.
Lors de l'appel, il y a création des variables locales au sous-programme, chaque appel se
traduit par une réservation de mémoire différente pour les variables locales.
Les paramètres effectifs sont passés. Il s'agit d'une valeur pour les paramètres par valeur et
d'une adresse pour les paramètres par variables.
Le sous-programme s'exécute en travaillant avec ses variables locales.
A la fin de l'exécution, il y a restitution de la zone mémoire réservée aux variables locales,
donc destruction de celle-ci. Dans le cas d'une fonction, il y a retour du résultat.

Dans l'exemple précédent, le calcul de Factorielle 4 se traduit par:

Première activation de la fonction Fact(M)


avec la variable locale M = 4 qui calcule 4 * Fact(3)
Deuxième activation de la fonction Fact(M)
avec la variable locale M = 3 qui calcule 3 * Fact(2)
Troisième activation de la fonction Fact(M)
avec la variable locale M = 2 qui calcule 2 * Fact(1)
Quatrième activation de la fonction Fact(M)
avec la variable locale M = 1 qui rend la valeur 1
Il n'y a pas d'autre activation, cette fonction se termine
en End et rend la valeur 1
Retour à la troisième activation avec la valeur Fact = 1 qui se
termine donc avec
Fact = 2 * Fact(1) = 2 * 1 = 2
Cette activation se termine donc en rendant la valeur 2
Retour à la deuxième activation avec la valeur Fact = 2 qui se termine par
Fact = 3 * Fact(2) = 3 * 2 = 6
Cette activation se termine donc en rendant la valeur 6
Retour à la première activation avec la valeur Fact = 6 qui se termine par
Fact = 4 * Fact(3) = 4 * 6 = 24

L'appel à la fonction rend donc 24.

DMSI/PROGRAMMATION - 79 -
La récursivité

XV.2 LA RECURSIVITE CROISEE


Il y a récursivité croisée lorsqu'un sous-programme A appelle un sous-programme B qui
appelle lui-même le sous-programme A ou lorsqu'un sous-programme A appelle un sous-
programme B qui appelle un sous-programme C qui rappelle le sous-programme A ou le
sous-programme B.

Il faut bien entendu utiliser la déclaration Forward qui permet une déclaration en-avant d'un
sous-programme.

EXEMPLE:

Procedure Recur2(Paramètres Formels);FORWARD;


Procedure Recur1(Paramètres Formels);
Begin
...
Recur2(Paramètres effectifs);
...
End;

Procedure Recur2;
Begin
...
Recur1(Paramètres effectifs);
...
End;

DMSI/PROGRAMMATION - 80 -
Les unités

XVI LES UNITES


Une unité est un ensemble de constantes, types de données, variables, procédures et fonctions.
Elle peut comporter un point d'entrée principal qui sera appelé avant le début du programme
pour exécuter différentes initialisations.

XVI.1 SYNTAXES RELATIVES AUX UNITES

EN TETE
; INTERFACE IMPLEMENTATION INITIALISATION .
D’UNITE

Le nom de l'unité est celui référencé dans les clauses Uses.

EN TETE D’UNITE UNIT IDENTIFICATEUR D’UNITE

PARTIE INTERFACE

INTERFACE

CLAUSE USES DECLARATION DE CONSTANTES

DECLARATION DE TYPES

DECLARATION DE VARIABLES

EN TETE DE PROCEDURES
ET DE FONCTIONS

EN TETE DE PROCEDURES
ET DE FONCTIONS

EN TETE DE PROCEDURE
;
EN TETE DE FONCTION
DIRECTIVE INLINE ;

La partie interface ne comporte que l'en-tête de procédure ou de fonction. Le corps de la


procédure ou de la fonction se trouve dans la partie implémentation.
L'en-tête de procédure ou de fonction peut être mentionné à nouveau dans la partie
implémentation mais l'on n'a pas besoin de spécifier à nouveau la liste des paramètres formels.

DMSI/PROGRAMMATION - 81 -
Les unités

PARTIE
IMPLEMENTATION

IMPLEMENTATION

DECLARATION DE LABELS

DECLARATION DE CONSTANTES

DECLARATION DE TYPES

DECLARATION DE VARIABLES

EN TETE DE PROCEDURES
ET DE FONCTIONS

PARTIE INITIALISATION END

PARTIE INSTRUCTION

Le Turbo Pascal est livré avec neuf unites :

CRT permet d'exploiter la puissance de l'affichage et du clavier du PC.


DOS donne accès à de nombreuses fonctions du DOS
PRINTER permet d'accéder à l'imprimante
SYSTEM est la librairie de phase d'exécution de Turbo Pascal. Cette unité est automatiquement
référencée.
OVERLAY contient le mécanisme de gestion des partiels.
GRAPH est un module graphique acceptant les normes d'affichage CGA, EGA, VGA,
Hercules, IBM 3270 PC, MCGA, AT&T 6300 et IBM 8514.
GRAPH3 contient les fonctions du graphisme du Turbo Pascal 3
TURBO3 assure la compatibilité ascendante avec la version 3 du Turbo Pascal
WINDOS Cette unité rassemble les services liés au système d'exploitation et à la gestion des
fichiers.

DMSI/PROGRAMMATION - 82 -
Les unités

XVI.2 L'UNITE CRT


L'unité standard CRT contient les variables, procédures et fonctions suivantes :

ASSIGNCRT AssignCrt(Var F : Text);


AssignCrt agit exactement comme la procédure Assign (cf chapitre XIV) à la différence près
qu'aucun nom de fichier disque n'est spécifié. La variable de type fichier texte est associée à
l'écran.

CHECKBREAK Variable de type Boolean


Permet à un programme d'être ou non sensible à la frappe de la séquence d'interruption
utilisateur Ctrl-Break au clavier. CheckBreak est égale à TRUE par défaut.

CHECKEOF Variable de type Boolean


Active et désactive la génération du marqueur de fin de fichier lors des lectures clavier.
CheckEOF est égale à FALSE par défaut.

CHECKSNOW Variable de type Boolean


Active et désactive le test d'écran neigeux qui peut s'avérer nécessaire lors des écritures
directes dans la mémoire vidéo. CheckSnow est égale à TRUE quand un mode texte couleur
est sélectionné.

CLREOL ClrEol;
Efface tous les caractères de la position du curseur jusqu'à la fin de la ligne sans changer la
position du curseur.

CLRSCR ClrScr;
Efface l'écran et place le curseur en haut à gauche de l'écran. Cette procédure agit par rapport à
la fenêtre active.

DELAY Delay(ms : Word);


Attente de ms millisecondes (approximatif).

DELLINE DelLine;
Efface la ligne sur laquelle est positionné le curseur. Toutes les lignes suivantes sont
remontées d'une ligne.

DIRECTVIDEO Variable de type Boolean


Active et désactive l'accès direct à la mémoire vidéo pour les instructions Write et Writeln qui
affichent des caractères à l'écran. DirectVideo est égale à TRUE par défaut.

GOTOXY GotoXY(X, Y : Byte);


Positionne le curseur à la colonne X et à la ligne Y, le coin supérieur gauche étant le point de
coordonnées 1,1.

HIGHVIDEO HighVideo;
Initialise l'affichage des caractères en sur-intensité

DMSI/PROGRAMMATION - 83 -
Les unités

INSLINE InsLine;
Insère une ligne vide à la position du curseur.

KEYPRESSED KeyPressed : Boolean


Renvoie la valeur booléenne True si une touche du clavier a été touchée. Le caractère est
disponible dans la mémoire tampon.

LASTMODE variable de type Word


La variable LastMode mémorise la valeur du mode vidéo courant avant tout changement de
mode vidéo.

LOWVIDEO LowVideo;
Initialise l'affichage des caractères en sous-intensité.

NORMVIDEO NormVideo;
Restaure l'attribut video du mode texte tel qu'il a été lu à la position du curseur lors de l'entrée
dans le programme.

NOSOUND NoSound;
Désactive le haut-parleur interne.

READKEY ReadKey : Char


Lit un caractère frappé au clavier. Le caractère lu n'est pas visualisé.

SOUND Sound(Hz : Word);


Active le haut-parleur interne.

TEXTATTR Variable de type Byte


La variable TextAttr mémorise les attributs vidéo courants. Vous pouvez modifier les attributs
vidéo en écrivant directement dans la variable TextAttr dont la structure est donnée ci-dessous:

Bit 7 6 5 4 3 2 1 0
B f f f c c c c

où B est le bit de clignotement, fff reçoit les 3 bits de la couleur de fond et cccc reçoit les 4
bits de la couleur du caractère.
Cf TextColor, TextBackGround

TEXTBACKGROUNDTextBackGround(Couleur: Byte);
Définit la couleur du fond d'affichage. Couleur est une expression choisie dans l'intervalle 0..7.
Cf TextColor

DMSI/PROGRAMMATION - 84 -
Les unités

TEXTCOLOR TextColor(Couleur : Byte);


Définit la couleur d'affichage des caractères. Couleur est une expression choisie dans
l'intervalle 0..15.
Black =0 Brown =6 LightRed = 12
Blue =1 LightGray =7 LightMagenta = 13
Green =2 DarkGray =8 Yellow = 14
Cyan =3 LightBlue =9 White = 15
Red =4 LightGreen = 10
Magenta =5 LightCyan = 11 Blink = 128

TEXTMODE TextMode(Mode : Integer);


Définit un mode texte spécifique.
BW40 =0 CO80 = 3
CO40 =1 Mono = 4
BW80 =2 Font8x8 = 256

WHEREX WhereX : Byte


Renvoie l'abscisse X de la position courante du curseur

WHEREY WhereY : Byte


Renvoie l'ordonnée Y de la position courante du curseur

WINDMIN, WINDMAX Variables de type Word


Les variables WindMin et WindMax mémorisent les coordonnées écran de la fenêtre active.
L'abscisse X est rangée dans l'octet de poids faible et l'ordonnée Y dans l'octet de poids fort.

WINDOW Window(x1, y1, x2, y2 : Byte);


Définit une fenêtre d'affichage dans un écran texte. X1 et Y1 sont les coordonnées du coin
supérieur gauche, X2 et Y2 les coordonnées du coin inférieur droit.

DMSI/PROGRAMMATION - 85 -
Les unités

XVI.3 L'UNITE DOS


L'unité DOS contient un ensemble de sous-programmes liés au système d'exploitation et à la
gestion des fichiers.

Variable DosError
Cette variable est utilisée par de nombreux sous-programmes pour donner des renseignements
sur les situations d'erreurs.

La valeur 0 indique qu'il n'y a pas d'erreur.


Autres codes d'erreurs
2 Fichier non trouvé
3 Chemin non trouvé
5 Accès refusé
6 Identificateur de fichier invalide
8 Mémoire insuffisante
10 Environnement invalide
11 Format invalide
18 Plus de fichiers

DISKFREE DiskFree(Disque : Word) : LongInt


Renvoie la quantité d'octets disponibles sur l'unité de disque spécifiée. Disque = 0 signifie le
disque courant, Disque = 1 le disqueA, Disque = 2 le disque B, etc...

DISKSIZE DiskSize(Disque : Word) : LongInt


Renvoie la capacité totale du disque spécifié, exprimée en octets.

DOSEXITCODE DosExitCode : Word


Renvoie le code de sortie d'un sous-programme. L'octet de poids faible est le code renvoyé par
le sous-programme qui se termine.
L'octet de poids fort est égal à
0 dans le cas d'une fin normale
1 en cas d'une fin provoquée par Ctrl-C
2 en cas d'erreur causée par un périphérique
3 en cas d'appel à la procédure Keep

DOSVERSION DosVersion : Word


Renvoie le numéro de la version du DOS utilisé.

ENVCOUNT EnvCount : Integer


Renvoie le nombre de chaînes de caractères que contient la zone d'environnement du DOS.

DMSI/PROGRAMMATION - 86 -
Les unités

ENVSTR EnvStr(I : Integer) : String


Extrait la Ième chaîne de l'environnement DOS.

EXEC Exec(Chemin, LigneCmd : String);


Lance l'exécution d'un programme avec une ligne de commande.

FEXPAND FExpand(chemin : PathStr) : PathStr


Perfectionne un nom de fichier en le transformant en spécification absolue d'accès. Le type
PathStr est défini dans l'unité DOS en tant que String[79].

FINDFIRST FindFirst(Chemin:String;Attr:Word;Var S:SearchRec);


Cherche dans le répertoire spécifié la première entrée correspondant au nom de fichier et aux
attributs indiqués. Chemin est le masque de recherche. Attr est l'attribut défini dans l'unité
DOS

Constantes Valeur
ReadOnly $01
Hidden $02
SysFile $04
VolumeId $08
Directory $10
Archive $20
AnyFile $3F

SearchRec = RECORD
Fill : Array[1..21] Of Byte;
Attr : Byte; { Date }
Time : LongInt; { Heure }
Size : LongInt; { Taille }
Name : String[12]; { Nom_de_Fichier }
End;

FINDNEXT FindNext(Var S : SearchRec);


Renvoie l'entrée suivante correspondant au nom et attributs définis dans un appel préalable à
FindFirst.

FSEARCH FSearch(Chemin: PathStr;ListeRep: String) : PathStr


Recherche un nom de fichier dans une liste.

FSPLIT
FSplit(Chemin:PathStr;VarRep:DirStr;Var NomFic:NameStr;VarExt:ExtStr);
Subdivise une spécification de fichier en trois composantes: Rep reçoit le nom d'unité logique,
NomFic le nom de base du fichier et Ext l'extension du nom du fichier.

DMSI/PROGRAMMATION - 87 -
Les unités

GETCBREAK GetCBreak(Var Break : Boolean);


Renvoie l'état du mécanisme d'interruption clavier (Ctrl-Break).

GETDATE GetDate(Var Annee, Mois, Jour, Jour_Sem : Word);


Renvoie la date en vigueur dans le système d'exploitation.

GETENV GetEnv(EnVar : String) : String


Renvoie la valeur de la variable d'environnement spécifiée.

GETFATTR GetFAttr(Var F; Var Attr : Word);


Renvoie les attributs d'un fichier. F est une variable de type fichier (typé, non-typé ou texte).
Cf constantes de FindFirst.

GETFTIME GetFTime(Var F; Var Date_Heure : LongInt);


Renvoie la date et l'heure de la dernière mise à jour d'un fichier.

GETINTVEC GetIntVec(IntNo : Byte; Var Vecteur : Pointer);


Renvoie l'adresse contenue dans le vecteur d'interruption spécifié.

GETTIME GetTime(Var Heure, Minute, Seconde, Sec100 : Word);


Renvoie l'heure en vigueur dans le système d'exploitation.

GETVERIFY GetVerify(Var Verify : Boolean);


Renvoie l'état de l'indicateur VERIFY du DOS.

KEEP Keep(CodeSortie : Word);


Arrête le déroulement du programme concerné et rend le contrôle au DOS. Tout le programme
reste en mémoire. Le code de sortie correspond à celui qui est passé à la procédure Halt.

PACKTIME PackTime(Var DT : DateTime;Var Date_Heure : LongInt);


Convertit un enregistrement DateTime sous forme compressée dans un entier long Date_Heure
utilisable par SetFTime.
DateTime = Record
Year, Month, Day, Hour, Min, Sec : Integer;
End;

MSDOS MsDos(Var Regs : Registers);


Exécute une fonction MS-DOS. Equivaut à un appel à Intr avec IntNo égal à $21.

SWAPVECTORS SwapVectors;
Echange les vecteurs d'interruption (le contenu des pointeurs SaveIntXX de l'unité System
avec le contenu des vecteurs d'interruption en vigueur).

DMSI/PROGRAMMATION - 88 -
Les unités

INTR Intr(IntNo : Byte; Var Regs : Registers);


IntNo est le numéro du vecteur d'interruption (0..255).
Registers est un enregistrement défini dans l'unité DOS:
Registers = RECORD
Case Integer Of
0 : (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:Word);
1 : (AL,AH,BL,BH,CH,DL,DH : Byte);
End;
End;
Remarquez qu'il s'agit d'un enregistrement à partie variable permettant de manipuler les
registres dans le format 8 bits ou 16 bits.
Les constantes suivantes sont utilisées pour tester les bits indicateurs du Flag register.
Constante Valeur
Fcarry $0001
Fparity $0004
Fauxiliary $0010
Fzero $0040
Fsign $0080
Foverflow $0800

SETCBREAK SetCBreak(Break : Boolean);


Configure l'état du mécanisme de détection d'interruption clavier du DOS (Ctrl-Break).

SETDATE SetDate(Annee, Mois, Jour : Word);


Initialise la date maintenue par le système d'exploitation.

SETFATTR SetFAttr(Var F; Attr : Word);


Définit les attributs d'un fichier. F est une variable fichier (typé, non-typé ou texte), Attr est la
valeur de l'attribut (cf FindFirst).Cf constantes de FindFirst.

SETFTIME SetFTime(Var F; Date_Heure : LongInt);


Ecrit la date et l'heure de la dernière mise à jour d'un fichier.

SETINTVEC SetIntVec(IntNo : Byte; Vecteur : Pointer);


Affecte une adresse au vecteur d'interruption spécifié.

SETTIME SetTime(heure, minute, seconde, sec100 : Word);


Initialise l'heure courante du système d'exploitation.

SETVERIFY SetVerify(Var Verify : Boolean);


Configure l'état de l'indicateur VERIFY du DOS.

DMSI/PROGRAMMATION - 89 -
Les unités

UNPACKTIME
UnPackTime(Pack_D_H : LongInt;Var UnPack_D_H : DateTime);
Convertit un entier long représentant une date compactée en une variable de type DateTime.Cf
PackTime.

XVI.4 L’UNITE WINDOS


Elle fournit une interface de type PChar pour les fonctions de gestion fichier de l'unité Dos.
Dans la mesure MS-DOS nécessite des chaînes AZT (à zéro terminal), l'unité WinDos est plus
efficace dans les relations avec le MS-DOS que l'unité Dos.

Aucune des routines de WinDos n'est définie par le standard Pascal.


Un certain nombre de constantes, procédures, fonctions, types et variables de l’unité WINDOS
existent et ont déjà été décrites dans la partie consacrée à l’unité DOS
XVI.4.1 CONSTANTES DE L’UNITE WINDOS
Constantes fXXXX utilisées pour tester les bits indicateurs du Flag Register (cf unité
Dos)
Constantes de modes fichier (unités WinDos et Dos)
Les procédures de gestion de fichier utilisent les constantes du groupe fmXXXX lors de
l'ouverture et de la fermeture des fichiers disque.
Les champs de mode de TFileRec et TtextRec contiennent une des valeurs suivantes:
Constante Valeur
fmClosed $D7B0
fmInput $D7B1
fmOutput $D7B2
fmInOut $D7B3

Constantes d'attributs fichiers (unités WinDos et Dos)


Le groupe de constantes faXXXX contrôle les bits d'attributs utilisés avec GetFAttr, SetFAttr,
FindFirst et FindNext .
Ces constantes s'additionnent. faAnyFile est la somme de tous les attributs.
Constante WinDos Valeur Constantes Dos Valeur
faReadOnly $01 ReadOnly $01
faHidden $02 Hidden $02
faSysFile $04 SysFile $04
faVolumeID $08 VolumeId $08
faDirectory $10 Directory $10
faArchive $20 Archive $20
faAnyFile $3F AnyFile $3F

DMSI/PROGRAMMATION - 90 -
Les unités

Constantes de longueurs de membres de nom de fichier (unités WinDos et Dos)


Le groupe de constantes fsXXXX détermine les longueurs autorisées pour chaque chaîne
composant un nom de fichier (racine, extension, chemin, répertoire). Elles servent à
FileSearch et à FileExpand.
WinDos Valeur Dos Valeur
fsPathName 79 PathStr string [79}
fsDirectory 67 fsDirectory string [67]
fsFileName 8 fsFileName string [8]
fsExtension 4 fsExtension string [4]
ComStr string [127]

Constantes renvoyées par FileSplit (unité WinDos)


Le groupe de constantes fcXXXX sert à la fonction FileSplit.
La valeur renvoyée est une combinaison des champs binaires fcDirectory, fcFileName et
fcExtension . Elle décrit les composants présents dans la spécification.
Si le nom ou l'extension contiennent un caractère générique (* ou ?), fcWildcards est armé.

Constante Valeur
fcExtension $0001
fcFileName $0002
fcDirectory $0004
fcWildcards $0008

XVI.4.2 ROUTINES DE L’UNITE WINDOS (par catégories)


XVI.4.2.1 Gestion de répertoire:
CreateDir CreateDir(Dir: PChar)
Réalise le même travail que MkDir, mais en manipulant des chaînes AZT (à zéro terminal) et
non des chaînes Pascal standard.

GetCurDir GetCurDir(Rep: PChar; Unite: Byte): PChar;


La chaîne renvoyée dans Rep commence toujours par une lettre d'unité de disque, un
symbole : et une barre oblique inverse. Pour Unite, la valeur 0 représente l'unité courante, la
valeur 1 représente l'unité A, la valeur 2 l'unité B, et ainsi de suite. La valeur renvoyée est
identique à Rep. Les erreurs sont renvoyées dans DosError.

DMSI/PROGRAMMATION - 91 -
Les unités

RemoveDir RemoveDir(Rep: PChar);


Le sous-répertoire désigné par le chemin d'accès Rep est supprimé. Les erreurs éventuelles
(sous-répertoire inexistant ou non vide) sont signalées dans DosError.

SetCurDir SetCurDir(Rep: PChar)


Si le paramètre Rep comporte une lettre d'unité de disque, celle-ci est également adoptée
comme nouvelle unité courante.

XVI.4.2.2 Accès à l'environnement:


GetArgCount GetArgCount :Integer ;
Renvoie le nombre de paramètres transmis au programme sur la ligne de commande

GetArgStr GetArgStr(Dest: PChar; Numero: Integer;LongMax: Word): PChar;


Renvoie le paramètre de la ligne de commande désigné par Numero.
Si Numero est inférieur à zéro ou supérieur à la valeur de GetArgCount, GetArgStr renvoie
une chaîne vide. Si Numero est égal à zéro, GetArgStr renvoie le nom de fichier du module
courant. La valeur est renvoyée dans Dest et sa longueur maximum est LongMax.

GetEnvVar GetEnvVar(NomVar: PChar): PChar;


Renvoie un pointeur sur la valeur de la variable d'environnement spécifiée.
Si la variable d'environnement spécifiée n'existe pas, GetEnvVar renvoie nil.

XVI.4.2.3 Gestion de fichiers


FileExpand FileExpand(Dest, Source: PChar): PChar;
Etend un nom de fichier en le transformant en spécification absolue d'accès.
Convertit le nom de fichier indiqué dans Source en une spécification absolue d'accès, écrite en
lettres majuscules. Cette spécification se compose d'une lettre d'unité logique, d'un signe :,
d'une suite de noms de répertoires (séparés par des barres obliques inverses \) et d'un nom de
fichier. Les références relatives spéciales '.' et '..' éventuellement présentes sont supprimées.
Les noms ont au maximum 8 caractères et les extensions 3 caractères. Le résultat est renvoyé
dans Dest. Les paramètres Dest et Source peuvent pointer sur le même emplacement en
mémoire.

La fonction FileSplit peut être utilisée ensuite pour subdiviser le résultat renvoyé par
FileExpand en 3 chaînes, l'une pour l'unité et les répertoires, une autre pour le nom du fichier
et une dernière pour l'extension.

DMSI/PROGRAMMATION - 92 -
Les unités

FileSearch FileSearch(Dest, Nom, Liste: PChar): PChar;


Recherche le fichier spécifié par Nom dans la liste de répertoires. Les répertoires doivent être
séparés les uns des autres par des points-virgules.

FileSplit FileSplit(Chemin, Rep, Nom, Ext: PChar): Word


Cette procédure subdivise la spécification complète d'accès à un fichier désignée par Chemin
en ses trois composantes.
Rep reçoit le nom d'unité logique (disque) et la suite de répertoires menant au fichier, barres
obliques inverses (\) initiales et finales comprises.
Nom reçoit le nom de base du fichier.
Ext son extension précédée d'un point.
Si l'un des paramètres chaîne élément vaut nil, la partie correspondante du chemin n'est pas
mémorisée. Si le chemin ne contient pas l'une des composantes, la chaîne correspondante est
renvoyée à vide. Les longueurs maximales des chaînes composantes renvoyées dans Rep, Nom
et Ext sont définies par les trois constantes fsDirectory, fsFileName et fsExtension.
La valeur renvoyée par la fonction est une combinaison des masques binaires fcDirectory,
fcFileName et fcExtension indiquant quelles composantes ont été trouvées dans le chemin. Si
le nom ou l'extension contient des caractères génériques (* ou ?), l'indicateur binaire
fcWildcards est également positionné dans la valeur renvoyée.

XVI.4.3 LES TYPES DE L’UNITE WINDOS


Structures fichier (types) (unités WinDos et Dos)
Les définitions de structures RECORD internes à Turbo Pascal sont déclarées aussi dans
WinDos.
TFileRec s'applique aux fichiers typés et non typés.
TTextRec s'applique aux fichiers texte.

TYPE
{ Fichiers typés et non typés }
TFileRec = record
Handle: Word;
Mode: Word;
RecSize: Word;
Private: array[1..26] of Byte;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
end;

DMSI/PROGRAMMATION - 93 -
Les unités

{ Fichiers texte Textfile record }


PTextBuf = ^TTextBuf;
TTextBuf = array[0..127] of Char;
TTextRec = record
Handle: Word;
Mode: Word;
BufSize: Word;
Private: Word;
BufPos: Word;
BufEnd: Word;
BufPtr: PTextBuf;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
Buffer: TTextBuf;
end;

TRegisters (type) (unité WinDos)


Les procédures Intr et MsDos se servent de variables de type TRegisters pour indiquer le
contenu des registres en entrée et lire le contenu des registres en sortie d'une interruption
logicielle.
TYPE
TRegisters = RECORD
CASE Integer OF
0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
END ;
END ;

Notez la partie variante du RECORD pour recadrer les registres sur 8 bits avec ceux sur 16
bits.

DMSI/PROGRAMMATION - 94 -
Les unités

TDateTime (type) (unité WinDos)


Les variables du type TDateTime servent avec UnpackTime et PackTime pour analyser et
construire des valeurs compactées sur 4 octets pour GetFTime, SetFTime, FindFirst et
FindNext.
TYPE
TDateTime = RECORD
Year,Month,Day,Hour,Min,Sec: Word;
END;

TSearchRec (type) (unité WinDos)


Les routines FindFirst et FindNext se basent sur des variables du type TSearchRec pour scruter
les répertoires.
TYPE
TSearchRec = RECORD
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: array[0..12] of Char;
END;

Les informations pour chaque fichier trouvé sont renvoyées dans TSearchRec.
 Attr contient les attributs (construits avec les constantes adéquates) - Time contient la date
et l'heure compactés (UnpackTime décompacte)
 Size contient la taille en octets
 Name contient le nom
 Fill est réservé par le DOS et ne doit jamais être altéré

DMSI/PROGRAMMATION - 95 -
Les unités

XVI.5 L'UNITE GRAPH


L'unité GRAPH est une bibliothèque complète comportant plus de 50 routines graphiques.

ARC Arc(X, Y :Integer; AngleDep, AngleFin, Rayon : Word);


Dessine un arc de cercle par rapport au centre de coordonnées X,Y.

BAR Bar(X1, Y1, X2, Y2 : Integer);


Dessine une barre dans le style et la couleur de remplissage courants.

BAR3D Bar3D(X1, Y1, X2, Y2: Integer; Profond : Word;Top: Boolean);


Dessine une pile en 3 dimensions.
TopOn : Boolean = TRUE { si le haut de l'histogramme doit être en relief }
TopOff : Boolean = FALSE

CIRCLE Circle(X, Y: Integer; Rayon: Word);


Dessine un cercle de centre X,Y et de rayon Rayon.

CLEARDEVICE ClearDevice;
Initialise le périphérique graphique de sortie courant et le prépare.

CLEARVIEWPORT ClearViewPort;
Efface la fenêtre graphique courante.

DRAWPOLY DrawPoly(NbPoints: Word; Var PolyPoints);


Dessine les contours d'un polygone. PolyPoints est un paramètre sans type contenant les
coordonnées de chaque intersection du polygone.

ELLIPSE Ellipse(X,Y: Integer; AngleDeb, AngleFin:Word;


XRayon,YRayon:Word);
Dessine un arc elliptique.
FILLELLIPSE FillEllipse(X, Y: Integer; XRayon, YRayon: Word);
Trace une surface elliptique.

FILLPOLY FillPoly(NbPoints: word; Var PolyPoints);


Remplit un polygone.

CLOSEGRAPH CloseGraph;
Désactive le mode graphique.

FLOODFILL FloodFill(X, Y, Border: Word);


Peint une surface délimitée avec le motif de remplissage courant.

DETECTGRAPH DetectGraph(Var Pilote, GraphMode : Integer);


Vérifie la configuration matérielle et détermine quels sont le pilote et le mode graphique
courants.

DMSI/PROGRAMMATION - 96 -
Les unités
Constante Valeur
Detect 0 Demande d'auto détection
CGA 1
MGCA 2
EGA 3
EGA64 4
EGAMono 5
IBM8514 6
HercMono 7
ATT400 8
VGA 9
PC3270 10
Currentdriver -128 Passé à GetModeRange
CGAC0 0 320x200 palette 0 : vert, rouge, jaune; 1 page
CGAC1 1 320x200 palette 1 : rouge, jaune, vert; 1 page
CGAC2 2 320x200 palette 2 : vert, rouge, marron; 1 page
CGAC3 3 320x200 palette 3 : cyan, magenta, gris; 1 page
MCGAC0 0 320x200 palette 0 : vert, rouge, jaune; 1 page
MCGAC1 1 320x200 palette 1 : cyan, magenta, blanc; 1 page
MCGAC2 2 320x200 palette 2 : vert, rouge, marron; 1 page
MCGAC3 3 320x200 palette 3 : vert, rouge, gris; 1 page
MCGAMed 2 640x200 1 page
MCGAHi 3 640x480 1 page
EGALo 0 640x200 4 pages
EGAHi 1 640x350 16 couleurs; 2 pages
EGA64Lo 0 640x200 16 couleurs; 1 page
EGA64Hi 1 640x350 4 couleurs; 1 page
EGAMonoHi 3 640x350
HercMonoHi 0 720x348 2 pages
ATT400C0 0 320x200 palette 0 : vert, rouge, jaune; 1 page
ATT400C1 1 320x200 palette 1 : rouge, jaune, vert; 1 page
ATT400C2 2 320x200 palette 2 : vert, rouge, marron; 1 page
ATT400C3 3 320x200 palette 3 : cyan, magenta, gris; 1 page
ATT400Med 2 640x200
ATT400Hi 3 640x400
VGALo 0 640x200 16 couleurs 4 pages
VGAMed 1 640x350 16 couleurs 2 pages
VGAHi 2 640x480 16 couleurs
VGAHi2 3 640x480 2 couleurs
PC3270Hi 0 720x350
IBM8514Lo 0 640x480 256 couleurs; 1 page
IBM8514Hi 0 1024x768 256 couleurs; 1 page

DMSI/PROGRAMMATION - 97 -
Les unités

GETCOLOR GetColor : Word;


Renvoie la valeur de la couleur transmise lors du précédent appel àSetColor.

GETARCCOORDS GetArcCoords(Var ArcCoords : ArcCoordsType);


Permet de récupérer les coordonnées utilisées lors du précedent appel à la procédure Arc.
ArcCoordsType = Record
X, Y : Integer;
Xs, Ys, Xend, Yend : Word;
End;

GETASPECTRATIO GetAspectRatio(Var XAsp, YAsp : Word);


Donne la résolution de l'écran graphique à partir de laquelle peut être calculé l'allongement des
formes ciculaires (XAsp / YAsp).

GETBKCOLOR GetBkColor : Word;


Renvoie l'indice dans la palette de la couleur courante du fond d'affichage.

GETDEFAULTPALETTE GetDefaultPalette(Var Pal: PaletteType):PaletteType;


Renvoie l'enregistrement de définition de la palette.

GETDRIVERNAME GetDriverName : String;


Renvoie une chaîne contenant le nom du pilote graphique courant.

GETFILLPATTERN GetFillPattern(Var FillPattern : FillPaternType);


Renvoie le dernier motif de remplissage.
FillPatternType = Array[1..8] Of Byte;

GETFILLSETTINGS GetFillSettings(Var FillInfo: FillSettingsType);


Permet de récupérer la couleur et le motif de remplissage courants définis par SetFillStyle et
SetFillPatern.
FillSettingsType = Record
Pattern Word;
Color : Word;
End;

DMSI/PROGRAMMATION - 98 -
Les unités

Constante Valeur
EmptyFill 0 { Couleur de Fond = effacement }
SolidFill 1 {Couleur d'avant-plan uniforme }
LineFill 2 { Traits horizontaux }
LtSlashFill 3 { Traits Droit fin ///}
SlashFill 4 { Traits Droit épais ///}
BkSlashFill 5 { Traits Gauche épais \\\}
LtBkSlashFill 6 { Traits Gauche fin \\\ }
HatchFill 7 { Trame }
XHatchFill 8 { Trame oblique }
InterLeaveFill 9 { Trame serrée }
WideDotFill 10 { Points espacés }
CloseDotFill 11 { Points rapprochés }
UserFill 12 { Défini par le programmeur }

GETGRAPHMODE GetGraphMode : Integer;


Renvoie le mode graphique courant (en fonction du pilote graphique courant).
Cf DetectGraph

GETIMAGE GetImage(X1, Y1, X2, Y2: Word; Var BitMap);


Sauvegarde une partie d'image graphique dans une mémoire tampon. BitMap est un paramètre
sans type dont la taille doit être supérieure ou égale au nombre de pixels inclus dans le
rectangle + 4.

GETLINESETTINGS GetLineSettings(Var LigneInfo : lineSettingsType);


Renvoie le style, le motif et l'épaisseur de ligne initialisés par SetLineStyle.

LineSettingsType = Record
LineStyle : Word;
Pattern : Word;
Thickness : Word;
End;

Constante Valeur
SolidLn 0
DottedLn 1
CenterLn 2
DashedLn 3
UserBitLn 4 Style défini par l'utilisateur
NormWidth 1
ThickWidth 3 Triple épaisseur

DMSI/PROGRAMMATION - 99 -
Les unités

GETMAXCOLOR GetMaxColor : Word;


Renvoie la plus haute valeur de couleur pouvant être transmise à la procédure SetColor.

GETMAXCODE GetMaxMode : Word;


Renvoie le plus grand numéro de mode supporté par le pilote courant.

GETMAXX GetMaxX : Integer;


Renvoie le numéro de la colonne la plus à droite.

GETMAXY GetMaxY : Integer;


Renvoie le numéro de la ligne la plus basse.
GETMODENAME GetModeName(NumeroMode: Word) : String;
Renvoie une chaîne de caractères contenant le nom du mode graphique spécifié.

GETMODERANGE
GetModeRange(PiloteGrafic: Integer; Var ModeInf, ModeSup: Integer);
Renvoie la plus grande et la plus petite valeur de mode graphique supportées par le pilote
spécifié.
Cf DetectGraph

GETPALETTE GetPalette(Var Palette: PaletteType);


Renvoie la palette courante et sa taille.

PaletteType = Record
Size : Byte;
Colors : Array[0..MaxColors] Of Shortint;
End;

GETPALETTESIZE GetPaletteSize : Word;


Renvoie la taille de la table de conversion de la palette de couleurs.

GETPIXEL GetPixel(X, Y: Integer) : Word;


Renvoie la valeur du pixel situé en X,Y.

DMSI/PROGRAMMATION - 100 -
Les unités

GETTEXTSETTINGS GetTextSettings(Var TextInfo : TextSettingsType);


Renvoie les différentes valeurs courantes de configuration d'affichage de texte : police, taille et
justification.

TextSettingsType = Record
Font : Word;
Direction : Word;
CharSize : Word;
Horiz : Word;
Vert : Word;
End;

Constante Valeur
DefaultFont 0 Police en matrice 8x8 bits
TriplexFont 1 Polices vectorielles
SmallFont 2
SansSeriFont 3
GothicFont 4
HorizDir 0 De gauche à droite
VertDir 1 De haut en bas
UserCharSize 0 Taille de caractère
modifiable

GETVIEWSETTINGS GetViewSettings(Var ViewPort: ViewPortType);


Permet de récupérer les coordonnées de la fenêtre graphique active ainsi que les paramètres
définis par SetViewPort.

ViewPortType = Record
X1, Y1, X2, Y2 : Integer;
Clip : Boolean;
End;

GETX GetX : Integer;


Renvoie la coordonnée X de la position courante.

GETY GetY : Integer;


Renvoie la coordonnée Y de la position courante.

GRAPHDEFAULTS GraphDefaults;
Réinitialise la configuration du mode graphique.
GRAPHERRORMSG GraphErrorMsg(CodeErreur: Integer) : String;
Renvoie le message d'erreur correspondant au code d'erreur indiqué.

GRAPHRESULT GraphResult : Integer;


Renvoie le code d'erreur de la dernière opération graphique.

DMSI/PROGRAMMATION - 101 -
Les unités
Codes d'erreurs renvoyés par la fonction GraphResult
GrOk 0 pas d'erreur
GrNoInitGraph -1 graphique non installé
GrNotDetected -2 équipement graphique non détecté
GrFileNotFound -3 fichier du pilote graphique introuvable
GrInvalidDriver -4 fichier du pilote graphique invalide
GrNoLoadMem -5 mémoire insuffisante pour charger le pilote
GrNoScanMem -6 dépassement de capacité mémoire (type scan)
GrNoFloodMem -7 dépassement de capacité mémoire (type flood)
GrFontNotFound -8 fichier de police de caractères non trouvé
GrNoFontMem -9 mémoire insuffisante pour charger la police
GrInvalidMode -10 mode graphique invalide pour le pilote sélectionné
GrError -11 erreur graphique
GrIOerror -12 erreur d'entrées/sorties graphique
GrInvalidFont -13 fichier de police invalide
GrInvalidFontNum -14 numéro de police invalide
GrInvalidDeviceNum -15 erreur de numéro de pilote graphique

IMAGESIZE ImageSize(X1, Y1, X2, Y2: Integer) : Word;


Renvoie le nombre d'octets nécessaires pour stocker une zone rectangulaire de l'écran.

INITGRAPH
InitGraph(Var GraphPilote: Integer;Var GraphMode: Integer;CheminPilote : String);
Initialise le système graphique et configure le matériel dans un mode graphique.
Cf DetectGraph.

INSTALLUSERDRIVER

InstallUserDriver(Nom:String;AutoDetectPtr:Pointer) : Word;
Ajoute un pilote de périphérique supplémentaire dans la table des pilotes de périphériques
gérée par le système graphique BGI. Affecte et renvoie un numéro de pilote.

INSTALLUSERFONT InstallUserFont(NomFichierPolice:String):Integer;
Insère une nouvelle police de caractères graphique dans le système BGI.

LINE Line(X1, Y1, X2, Y2: Integer);


Trace une ligne du point (X1,Y1) au point (X2,Y2).

LINEREL LineRel(Dx, Dy);


Trace une ligne de la position courante (PC) jusqu'à un point dont les coordonnées sont
exprimées relativement à cette position courante.

LINETO LineTo(X, Y: Integer);


Trace une ligne à partir de la position courante jusqu'au point de coordonnées (X, Y).

DMSI/PROGRAMMATION - 102 -
Les unités

MOVEREL MoveRel(Dx, Dy: Integer);


Déplace le pointeur courant (PC) relativement à sa position courante.

MOVETO MoveTo(X, Y: Integer);


Place le pointeur courant aux coordonnées (X, Y).

OUTTEXT OutText(Texte: String);


Envoie une chaîne de caractères au périphérique de sortie, à la position courante.
Le pointeur courant est modifié en fonction des caractéristiques de la chaîne de caractères
(hauteur et largeur).

OUTTEXTXY OutTextXY(X, Y: Integer; Texte: String);


Envoie une chaîne de caractères au périphérique de sortie aux coordonnées (X, Y).
OutTextXY ne met pas à jour le pointeur courant.
PIESLICE PieSlice(X, Y: Integer; AngleDeb, AngleFin, Rayon : Word);
Trace et remplit un diagramme par secteurs.
PUTIMAGE PutImage(X, Y: Integer; Var BitMap; BitBlt:Word);
Affiche une image binaire (par pixels).
Constante Valeur
CopyPut 0 MOV (NormalPut en TP 5.5)
XorPut 1 XOR
OrPut 2 OR
AndPut 3 AND
NotPut 4 NOT

PUTPIXEL PutPixel(X, Y: Integer; PixelCoul: Word);


Redessine un pixel en (X, Y).

RECTANGLE Rectangle(X1, Y1, X2, Y2: Integer);


Dessine un rectangle.

REGISTERBGIDRIVER
RegisterBGIdriver(Pilote: Pointer): Integer;
Enregistre un fichier pilote graphique. En cas d'erreur, la valeur renvoyée est inférieure à 0,
sinon, elle correspond au numéro de gestion du pilote.
REGISTERBGIFONT RegisterBGIfont(Police: Pointer): Integer;
Enregistre un fichier de police de caractères. En cas d'erreur, la valeur renvoyée est inférieure
à 0, sinon, elle correspond au numéro assigné à la police.

RESTORECRTMODE RestoreCrtMode;
Restaure le mode d'affichage dans l'état précédant l'initialisation du mode graphique.

DMSI/PROGRAMMATION - 103 -
Les unités

SECTOR

Sector(X, Y: Integer;AngleDeb, AngleFin, XRayon, YRayon: Word);


Dessine et remplit un secteur elliptique.

SETACTIVEPAGE SetActivePage(Page: Word);


Choisit la page active pour les sorties graphiques.

SETALLPALETTE SetAllPalette(Var palette);


Change toutes les couleurs de la palette spécifiée.

SETASPECTRATIO SetAspectRatio(XAsp, YAsp: Word);


Modifie le facteur de correction des proportions de l'écran.

SETBKCOLOR SetBkColor(Couleur: Word);


Définit la couleur de fond en vigueur dans la palette.

SETCOLOR SetColor(couleur: Word);


Définit la couleur de dessin courante dans la palette.
SETFILLPATTERN SetFillPattern(Pattern: FillPatternType;Couleur: Word);
Sélectionne un motif et une couleur de remplissage définis par le programmeur.

SETFILLSTYLE SetFillStyle(Pattern: Word; Couleur: Word);


Définit la couleur et le motif de remplissage.
Cf GetFillSettings

SETGRAPHBUFSIZE SetGraphBufSize(TailleTampon: Word);


Permet de modifier la taille du tampon utilisé lors des remplissages de type scan et flood.

SETGRAPHMODE SetGraphMode(Mode: Integer);


Place le système en mode graphique et efface l'écran.

SETLINESTYLE SetLineStyle(style, Pattern, Epaisseur: Word);


Choisit la taille et le style de ligne courants.
Cf GetLineSettings

SETPALETTE SetPalette(Numcoul: Word; Couleur: ShortInt);


Modifie une des couleurs de la palette.

SETRGBPALETTE SetRGBPalette(CouleurNum,Rouge,Vert,Bleu: Integer);


Permet de modifier la palette de couleurs pour les pilotes VGAet IBM8514.

DMSI/PROGRAMMATION - 104 -
Les unités

SETTEXTJUSTIFY SetTextJustify(Horiz, Vert: Word);


Définit le type de justification utilisé par OutText.

Constante Valeur
LeftText 0 Justification à gauche
CenterText 1
RightText 2 Justification à droite
BottomText 0
CenterText 1
TopText 2

SETTEXTSTYLE SetTextStyle(Police, Direction: Word; Taille: Word);


Définit la police, le style et le facteur de grossissement des caractères.
Cf GetTextSettings

SETUSERCHARSIZE SetUserCharSize(MultX, DivX, MultY, DivY: Word);


Permet de faire varier la largeur et la hauteur des caractères des polices vectorielles.

SETVIEWPORT SetViewPort(X1,Y1,X2,Y2: Word; Lim : Boolean);


Définit la fenêtre courante pour les affichages graphiques.
ClipOn : Boolean = TRUE si les affichages sont limités à la fenêtre active
ClipOff : Boolean= FALSE

SETVISUALPAGE SetVisualPage(Page: Word);


Définit le numéro de la page graphique active.

SETWRITEMODE SetWriteMode(ModeEcriture: Integer);


Configure le mode d'écriture pour le tracé de lignes.
Cf constantes de PutImage

TEXTHEIGHT TextHeight(Texte: String) : Word;


Renvoie la hauteur d'une chaîne exprimée en pixels.

TEXTWIDTH TextWidth(Texte: String) : Word;


Renvoie la largeur d'une chaîne exprimée en pixels.

DMSI/PROGRAMMATION - 105 -
Les unités

XVI.6 L'UNITE PRINTER


L'unité PRINTER permet de faciliter les communications avec l'imprimante.
Printer contient une variable fichier de type texte appelée LST, variable qui est associée au
périphérique LPT1.

Exemple:

Program Essai_Imprimante;
Uses
Printer;
Begin
Writeln(Lst,'BONJOUR');
End.

XVI.7 L'UNITE OVERLAY


Le système de recouvrement permet de créer des programmes plus grands que la mémoire
disponible. Cette technique permet de rassembler des parties de programme appelées partiels
dans un fichier séparé du fichier principal. A un moment donné, ces partiels peuvent occuper
l'espace mémoire d'autres routines inutiles à cet instant là.
Ces recouvrements ont lieu dans une région mémoire appelée tampon de recouvrement.
Turbo Pascal gère les partiels au niveau des unités; une unité est la plus petite partie de
programme pouvant être constituée sous forme de partiel.
Lors de la construction de l'exécutable, Turbo Pascal, en plus du fichier exécutable (.EXE),
génère un fichier de recouvrement (.OVR). Le fichier .EXE contient le 'noyau' (partie statique
du programme non recouvrable) et le fichier .OVR regroupe tous les partiels qui seront
chargés puis recouverts.
Le gestionnaire de recouvrement de partiels est implémenté par l'unité standard Overlay.
Toutes les unités recouvrables doivent comporter la directive {$O+} indiquant que le code
peut être recouvert et la directive {$F+} indiquant que toutes les procédures et fonctions
actives doivent être du type à appel long.

OVRINIT OvrInit(File_Name : String);


Initialise le mécanisme de recouvrement de partiels et ouvre le fichier .OVR. Les erreurs
éventuelles sont indiquées par la variable OvrResult.

OVRINITEMS OvrInitEMS;
Charge le fichier de recouvrement en mémoire EMS, si possible.La variable OvrResult
indique une erreur éventuelle.

OVRSETBUF OvrSetBuf(Size : LongInt);


Définit la taille du tampon de recouvrement. La variableOvrResult indique une erreur
éventuelle.

OVRGETBUF OvrGetBuf : LongInt;


Renvoie la taille actuelle du tampon de recouvrement departiels.

DMSI/PROGRAMMATION - 106 -
Les unités
OVRCLEARBUF OvrClearBuf;
Vide le tampon de recouvrement de partiels

OVRSETRETRY OvrSetRetry(Taille : LongInt);


Permet de spécifier la taille de la zone probatoire au sein du tampon de recouvrement. Un
partiel est mis en période probatoire si l'espace qu'il occupe empiète sur les tailles octets avant
la fin du tampon.

OVRGETRETRY OvrGetRetry : LongInt;


Renvoie la taille actuelle de la zone probatoire (0 s'il n'y a pas eu de création de zone
probatoire).

Exemple:

Contenu du fichier DEMO.PAS

{$F+,O+}
Program Demonstration_Ovr ;
Uses
Overlay,Crt,Demo1,Demo2;
{$O Demo1}
{$O Demo2}
Begin
ClrScr;
OvrInit('Demo.OVR');
If OvrResult = 0
Then
Begin
Write1;
Write2;
End
Else
Writeln('Overlay Error : ',OvrResult);
End.

DMSI/PROGRAMMATION - 107 -
Les unités
Contenu du fichier DEMO1.PAS

{$F+,O+}
Unit Demo1;
Interface
Procedure Write1;

Implementation
Procedure Write1;
Begin
Writeln('premier partiel');
End;
End.

Contenu du fichier DEMO2.PAS

{$F+,O+}
Unit Demo2;

Interface
Procedure Write2;

Implementation
Procedure Write2;
Begin
Writeln('deuxième partiel');
End;

End.

DMSI/PROGRAMMATION - 108 -
Les types fichiers

XVII LES TYPES FICHIERS


Un fichier est un canal logique à travers lequel le programme peut passer des données. Un
fichier peut être soit un fichier disque, dans ce cas, lecture et écriture sur un support
magnétique, soit un organe logique tel que les fichiers pré-définis Input et Output, c'est-à-dire
le clavier et l'écran.

Un fichier est constitué d'une séquence de composants de même type. Le nombre de


composants d'un fichier (ou la taille du fichier) n'est pas déterminé dans la définition du
fichier. PASCAL garde la trace des accès au fichier grâce à un pointeur de fichier. Chaque fois
qu'un composant est écrit ou lu dans un fichier, le pointeur de fichier est avancé sur le
composant suivant.

Tous les composants d'un fichier étant de longueur égale, la position d'un composant
particulier peut être calculée. Le pointeur de fichier peut donc être déplacé vers tout
composant dans le fichier, procurant ainsi un accès direct à tout élément.

XVII.1 DEFINITION DU TYPE FICHIER


Un type fichier est défini par le mot réservé 'File of' suivi par le type des composants de ce
fichier. Un identificateur de fichier est déclaré également par le mot réservé 'File of' suivi par
l'identificateur d'un type fichier préalablement défini.

EXEMPLES :

Type
ProductName = String[80];
Product = Record
Name : ProductName;
ItemNumber : Real;
InStock : Real;
MinStock : Real;
Supplier : Integer;
End;

Var
ProductFile: FILE of Product;

DMSI/PROGRAMMATION - 109 -
Les types fichiers

XVII.2 PROCEDURES STANDARD SUR LES FICHIERS TYPES


Pour les procédures et fonctions suivantes, FilVar est l'identificateur d'une variable fichier.

ASSIGN Assign(FilVar,Nom_Fic : String);


Nom_Fic est une expression de type chaîne (nom de fichier valide). Le nom de fichier est
affecté à la variable FilVar et toutes les opérations suivantes sur FilVar affecteront le fichier
disque Nom_Fic.
Si la chaîne Nom_Fic est une chaîne vide, FilVar est associé au fichier d'entrée ou de sortie
standard.
Assign ne doit jamais être utilisé sur un fichier en cours d'utilisation.

REWRITE Rewrite(FilVar);
Un nouveau fichier disque dont le nom est assigné à la variable FilVar est crée et préparé pour
le traitement. Le pointeur de fichier est placé au début de ce fichier, c'est- à-dire sur le
composant numéro 0. Tout fichier pré-existant avec le même nom est détruit. Un fichier
disque créé par Rewrite est vide, il ne contient aucun élément.

RESET Reset(FilVar);
Le fichier disque affecté à FilVar est préparé pour traitement. Le pointeur du fichier est
positionné au début de ce fichier sur le composant numéro 0. FilVar doit référencer un fichier
existant, sinon il se produira une erreur d'entrée/sortie.

READ Read(FilVar,Var);
Var représente une ou plusieurs variables du type des éléments de FilVar séparées par des
virgules. Chaque variable est lue sur le fichier disque et après chaque opération de lecture le
pointeur de fichier est avancé sur le composant suivant.

WRITE Write(FilVar, Var);


Var représente une ou plusieurs variables du type des éléments de FilVar séparées par des
virgules. Chaque variable est écrite sur le fichier disque et après chaque opération d'écriture le
pointeur de fichier est avancé sur le composant suivant.

SEEK Seek(FilVar, N : LongInt);


Seek déplace le pointeur de fichier sur le nième composant du fichier référencé par FilVar. N
est une expression de type entier long. La position du premier composant est 0. Pour pouvoir
agrandir un fichier on peut déplacer le pointeur un élément après le dernier élément.

CLOSE Close(FilVar);
Le fichier disque associé à FilVar est fermé et le répertoire du disque est mis à jour pour tenir
compte des modifications apportées au fichier.
Remarque: Il est nécessaire de fermer un fichier même si on n'a fait que des opérations de
lecture sinon on aurait rapidement trop de fichiers ouverts à la fois.

DMSI/PROGRAMMATION - 110 -
Les types fichiers

ERASE Erase(FilVar);
Le fichier disque associé à FilVar est effacé. Erase ne doit jamais être utilisé sur un fichier
ouvert.

RENAME Rename(FilVar,Str : String);


Le fichier disque associé à FilVar est renommé avec l'expression chaîne Str. Les opérations
ultérieures sur FilVar agiront sur le fichier disque portant le nouveau nom. Le répertoire du
disque est mis à jour pour montrer les nouveaux noms.

TRUNCATE Truncate(FilVar);
Tronque le fichier à la position courante du pointeur de fichier. Tous les enregistrements situés
après le pointeur de fichier sont supprimés et la position courante dans le fichier devient la fin
de fichier.

CHDIR ChDir(Str : String);


Change le répertoire courant. Si Str comporte une spécification d'unité logique (disque,
disquette etc.), l'unité logique courante est également modifiée.

MKDIR MkDir(Str : String);


Crée un sous-répertoire.

RMDIR RmDir(Str : String);


Supprime un sous-répertoire vide.

GETDIR GetDir(B : Byte;Var Str : String);


Renvoie le répertoire courant pour le disque spécifié. B est une expression de type entier
spécifiant le disque concerné. B = 0 indiquele disque courant, B = 1 indique le lecteur A, B =
2 le disque B et ainsi de suite.

XVII.3 FONCTIONS STANDARD SUR LES FICHIERS TYPES

EOF Eof(FilVar) : Boolean;


Fonction booléenne retournant VRAI si le pointeur de fichier pointe après le dernier élément
du fichier ou si le fichier ne contient aucun élément.

FILEPOS FilePos(FilVar) : LongInt;


Fonction entière retournant la position courante du pointeur de fichier. Le premier composant
d'un fichier a le numéro 0.

FILESIZE FileSize(FilVar) : LongInt;


Fonction entière retournant la taille d'un fichier disque exprimée en nombre d'éléments de ce
fichier. Si FileSize(FilVar) est égale à 0, le fichier est vide.

DMSI/PROGRAMMATION - 111 -
Les types fichiers

IORESULT IOResult : Word;


Renvoie une valeur entière informant sur l'état de la dernière opération d'entrée/sortie
exécutée. Le contrôle des entrées/sortie doit être désactivé ({$I-}) pour pouvoir intercepter un
code d'erreur. Les codes d'erreur sont indiqués dans l'annexe B.

XVII.4 UTILISATION DES FICHIERS


Avant d'utiliser un fichier, la procédure Assign doit être appelée pour affecter le nom du
fichier à une variable fichier. Avant d'effectuer toute opération de lecture ou d'écriture, le
fichier doit être ouvert par un appel à Reset ou Rewrite. Cet appel place le pointeur de fichier
sur le premier élément du fichier disque.
Un fichier disque peut être agrandi seulement en ajoutant des composants à la fin du fichier
existant.
Le pointeur de fichier peut être déplacé à la fin du fichier par l'instruction suivante :
Seek(FilVar,FileSize(FilVar));

XVII.5 FICHIERS TEXTES


Contrairement aux autres types fichiers, les fichiers textes ne sont pas seulement des suites de
valeurs de même type. Bien que les éléments de base d'un fichier texte soient les caractères, ils
sont structurés en lignes, chaque ligne étant terminée par une marque de fin de ligne (séquence
CR/LF). Le fichier est de plus terminé par une marque de fin de fichier (Ctrl-Z). La longueur
des lignes étant variable, la position d'une ligne dans un fichier ne peut pas être calculée. En
conséquence, les fichiers texte ne peuvent être manipulés que séquentiellement.
Le type TEXT est différent du type File Of Char.
Une variable fichier texte est déclarée par le mot réservé Text.

EXEMPLE:
Var fichier : Text;

Toute opération sur les fichiers doit être précédée par un appel à la procédure Assign et un
appel à Reset ou à Rewrite doit précéder toute opération d'écriture ou de lecture.
Rewrite permet de créer un nouveau fichier texte et la seule opération autorisée est l'écriture.
Reset est utilisé pour ouvrir un fichier existant en lecture, la seule opération permise sur ce
fichier est la lecture séquentielle. Lorsqu'un nouveau fichier texte est fermé, une marque de fin
de fichier est mise à la fin du fichier.
L'entrée et la sortie des caractères dans les fichiers textes s'effectuent par les procédures Read
et Write. Les procédures Readln, Writeln et Eoln permettent le traitement des lignes.

READLN Readln(FilVarTxt);
Va au début de la ligne suivante, c'est-à-dire écarte tous les caractères jusque et y compris la
séquence CR/LF.

WRITELN Writeln(FilVarTxt);

DMSI/PROGRAMMATION - 112 -
Les types fichiers
Ecrit une marque de fin de ligne, c'est-à-dire une séquence CR/LF dans le fichier texte.

EOF Eof(FilVarTxt) : Boolean;


Fonction booléenne retournant VRAI si le pointeur de fichier pointe après le dernier caractère
du fichier ou si le fichier ne contient aucun caractère. Si FilVarTxt est omis, le fichier d'entrée
standard est supposé.

EOLN Eoln(FilVarTxt) : Boolean;


Fonction booléenne retournant VRAI si la fin de ligne a été atteinte, c'est-à-dire si le pointeur
de fichier est positionné sur le caractère CR de la séquence CR/LF. Si EOF(FilVarTxt) est
vrai, alors Eoln(FilVarTxt) est également vrai. Si FilVarTxt est omis, le fichier d'entrée
standard est supposé.

SEEKEOF SeekEof(FilVarTxt) : Boolean;


Similaire à EOF, mais écarte les blancs, les TABs et les marques de fin de ligne, avant de
tester la marque de fin de fichier. Le résultat est de type Booléen.

SEEKEOLN SeekEoln(FilVarTxt);
Similaire à Eoln, mais écarte les espaces et les TABs avant de faire le test. Le résultat est de
type Booléen.

FLUSH Flush(FilVarTxt);
Flush vide le buffer interne du fichier disque FilVarTxt et assure que le buffer a été écrit sur le
disque si une opération d'écriture a eu lieu depuis la dernière mise à jour du disque. Flush n'a
aucun effet sur les fichiers ouverts en lecture.

APPEND Append(FilVarTxt);
Procédure ouvrant un fichier texte en mode Ajout. Si FilVarTxt est déjà ouvert, le fichier est
d'abord fermé puis ouvert de nouveau. Le pointeur de fichier est positionné en fin de fichier.

SETTEXTBUF SetTextBuf(FilVarTxt;Var Tamp[;Taille: Word]);


Procédure permettant d'affecter à la variable FilVarTxt le tampon identifié par la variable
Tamp et non plus le tampon affecté par défaut à FilVarTxt. Taille (de type Word) spécifie la
taille du tampon en octets. Si Taille est omis, SizeOf(Tamp) est présumée.

DMSI/PROGRAMMATION - 113 -
Les types fichiers

XVII.6 FICHIERS NON TYPES


Les fichiers non typés sont des canaux d'entrée/sortie de bas niveau, utilisés principalement
pour l'accès direct à tout fichier disque.
Un fichier sans type est compatible avec tout autre fichier. Dans les opérations d'entrée/sortie
sur des fichiers sans type, les données sont transférées directement entre le fichier disque et la
variable, économisant ainsi l'espace nécessaire du buffer requis pour les fichiers avec type. Un
fichier sans type est déclaré avec le mot réservé file.

Var
DataFile : file;

Dans le cas des fichiers non typés, les procédures RESET et REWRITE acceptent un
paramètre supplémentaire permettant de spécifier la taille de l'enregistrement utilisé pour les
transferts.

Reset(FilVar,Taille: Word) et Rewrite(FilVar,Taille: Word);

Si Taille est omis, la taille de l'enregistrement est de 128 octets.

BLOCKREAD / BLOCKWRITE
Toutes les procédures et les fonctions standards de manipulation de fichiers, excepté Read,
Write et Flush sont autorisées sur les fichiers sans type. Read et Write sont remplacées par
deux procédures de transfert à haute vitesse : BlockRead et BlockWrite.

BlockRead(FilVar,Var Buf; Quanti: Word);


BlockWrite(FilVar,Var Buf; Quanti: Word);
ou
BlockRead(FilVar,Var Buf; Quanti: Word; Var Result: Word);
BlockWrite(FilVar,Var Buf; Quanti: Word; Var Result: Word);

où Buf est toute variable et Quanti est une expression entière donnant le nombre
d'enregistrements de Taille octets à transférer entre le fichier disque et la variable. Le bloc
transféré aura au maximum la taille de Quanti * Taille. Le paramètre facultatif Result retourne
le nombre d'enregistrements réellement transféré. Si Result n'est pas précisé, une erreur
d'entrée/sortie surviendra si le nombre d'enregistrements lus n'est pas égal à Quanti.

Un appel à BlockRead ou BlockWrite avance le pointeur de fichier de Result enregistrements.

DMSI/PROGRAMMATION - 114 -
Les types fichiers

XVII.7 PERIPHERIQUES DANS TURBO PASCAL


TURBO PASCAL et le MS/PC-DOS considèrent les équipements externes tels que le clavier,
l'écran et l'imprimante comme des périphériques. Au niveau programmation, ces périphériques
sont traités comme des fichiers.

Le périphérique CON
CON se rapporte au périphérique CONsole qui permet d'envoyer des informations vers l'écran
et d'en recevoir à partir du clavier. Les entrées depuis CON sont 'orientées ligne'. Un caractère
de fin de fichier est généré en frappant la séquence Ctrl-Z.

Les périphériques LPT1, LPT2 et LPT3


La famille LPTx concerne les trois imprimantes que l'on peut utiliser sur le système. Si une
seule imprimante est connectée, elle est référencée LPT1 (synonyme PRN).
L'unité standard PRINTER contient la déclaration d'une variable de fichier texte appelée Lst
qu'elle associe au périphérique LPT1.

Les périphériques COM1 et COM2


Ces périphériques de communication concernent les deux ports de communication série. Le
synonyme de COM1 est AUX.

Le périphérique NUL
Ce périphérique ignore toute écriture et génère une fin de fichier immédiate. Il peut être utilisé
lorsque l'on ne veut pas créer de fichier particulier.

Les variables de fichiers texte INPUT et OUTPUT


Ces variables sont disponibles dès le démarrage de tout programme PASCAL. Input
correspond à un fichier en lecture seule associé au clavier et Output à un fichier en écriture
seule associé à l'écran.

Write(Ch) équivalent à Write(Output,Ch)


Read(Ch) équivalent à Read(Input,Ch)
Writeln équivalent à Writeln(Output)
Readln équivalent à Readln(Input)
Eof équivalent à Eof(Input)
Eoln équivalent à Eoln(Input)

DMSI/PROGRAMMATION - 115 -
Les types fichiers

XVII.8 ENTREE ET SORTIE DE TEXTE


Si le premier paramètre d'une procédure d'entrée/sortie est l'identificateur d'une variable
représentant un fichier, l'opération d'entrée/sortie aura lieu sur ce fichier. Dans le cas contraire,
l'opération se fera sur les fichiers standards Input et Output.

PROCEDURE READ
La procédure READ permet l'entrée de caractères, chaînes et de données numériques.

Read(Var1,Var2,...,VarN)
ou

Read(FilVar,Var1,Var2,...,VarN)
où Var1,Var2,...,VarN sont des variables de type Caractère, Chaîne, Entier, ou Réel.

Avec une variable de type Char, Read lit un caractère dans le fichier et affecte ce caractère à la
variable.
Avec une variable de type Chaîne, Read lit tous les caractères jusqu'au prochain indicateur de
fin de ligne (ce dernier exclus). Si cette chaîne est plus longue que la chaîne destinataire, la
chaîne est tronquée.
Avec une variable numérique, Read attend une chaîne de caractères se conformant au format
d'une constante numérique du type adéquat. Tous les caractères délimiteurs (espaces,
tabulation ou indicateur de fin de ligne) sont ignorés. La lecture s'arrête soit au premier
caractère délimiteur soit lorsque Eof(FilVar) devient vrai.

PROCEDURE READLN
La procédure Readln est identique à la procédure Read, excepté que lorsque la dernière
variable a été lue, le reste de la ligne est ignoré. Tous les caractères, jusque et y compris la
prochaine séquenceCR/LF sont écartés.

Readln(Var1,Var2,...,VarN);
ou

Readln(FilVar,Var1,Var2,...,VarN)

Readln peut également être appelé sans paramètre. Dans ce cas, le reste de la ligne est écarté et
le retour chariot est envoyé à l'écran comme une séquence CR/LF.

DMSI/PROGRAMMATION - 116 -
Les types fichiers

PROCEDURE WRITE
La procédure Write permet la sortie de caractères, chaînes, de valeurs booléennes et de valeurs
numériques.

Write(Var1,Var2,...,VarN)
ou

Write(FilVar,Var1,Var2,...,VarN)

où Var1,Var2,...,VarN (les paramètres d'écriture) sont des variables du type Char, Chaîne,
Booléen, Entier ou Réel suivies éventuellement du signe : et d'une expression définissant les
paramètres d'écriture.

Un paramètre d'écriture peut prendre la forme : ExprSortie [:TailleMini [:NbDecimal ]]


ExprSortie représente une expression de sortie. TailleMini et NbDecimal sont des expressions
de type entier.
TailleMini spécifie la taille minimum du champ et doit être supérieure à 0. A moins que
ExprSortie ne soit représentée par plus de caractères que TailleMini, TailleMini caractères
seront écrits dans le fichier (en ajoutant des espaces au préalable si nécessaire). Si la longueur
de ExprSortie est supérieure à TailleMini, le nombre de caractères nécessaires à la
représentation de ExprSortie sera écrit.
NbDecimal précise le nombre de décimales demandé pour une valeur de type réel en notation
à virgule fixe. Cette option ne peut être spécifié que si ExprSortie est de type réel et si
TailleMini est elle aussi spécifiée. Si NbDecimal est omis, une valeur à virgule flottante
convertie en chaîne est écrite.
Si TailleMini est également omise, une taille de 17 est utilisée par défaut. Si TailleMini est
inférieure à 8, sa valeur est ramenée à 8.

Composants d'une chaîne de sortie avec une valeur de type réel :

[ | -] " " ou "-" suivant le signe de ExprSortie


<chiffre> un seul chiffre, "0" si ExprSortie = 0
<décimales> chaîne de chiffres de TailleMini - 7 (mais au plus 10) chiffres
E Lettre "E" en majuscule
[ + | -] Suivant le signe de l'exposant
<exposant> Nombre à 2 chiffres

Composants d'une chaîne en format à virgule fixe :


[<espaces>] Espaces pour ajuster à TailleMini
[-] Si ExprSortie est négative
<Chiffres> Au moins un chiffre, mais pas de 0 en tête
[<décimales>] Décimales, si NbDecimal > 0
Dans les descriptions suivantes, les symboles :
I,m,n représentent une expression entière

DMSI/PROGRAMMATION - 117 -
Les types fichiers
R représente une expression Réelle
Ch représente une expression Char
S représente une expression Chaîne
B représente une expression Booléenne

Ch Le caractère Ch est sorti


Ch:n Le caractère Ch est sorti, justifié à droite dans un champ de n caractères
S La chaîne S est sortie. Les tableaux de caractères peuvent être également
sortis
S:n La chaîne S est sortie, justifiée à droite dans un champ de n caractères
B En fonction de la valeur de B, le mot TRUE ou FALSE est sorti
B:n TRUE ou FALSE est sorti, justifié à droite dans un champ de n caractères
I La représentation décimale de la valeur de I est sortie
I:n La représentation décimale de la valeur de I est sortie, justifiée à droite dans
un champ de n caractères
R La représentation décimale de R est sortie dans un champ de 17 caractères,
en utilisant la notation en virgule flottante.
Pour R >= 0.0,le format est _#.##########E*##
Pour R < 0.0,le format est - #.##########E*##
où _ représente un espace, le signe # représente un digit et * représente le
signe + ou -
R:n La représentation décimale de la valeur de R est sortie, justifiée à droite dans
un champ de n caractères.
Pour R >= 0.0 blancs#.digitsE*##
Pour R < 0.0 blancs-#.digitsE*##
où blancs représente zéro ou plusieurs espaces, digits représente de un à dix
chiffres.
R:n:m La représentation décimale de la valeur de R est sortie, justifiée à droite dans
un champ de n caractères avec m digits après le point décimal. m doit être
dans l'intervalle 0..11. Si m est supérieur à 11, sa valeur est ramenée à 11.

PROCEDURE WRITELN
La procédure Writeln est identique à la procédure Write, excepté qu'une séquence CR/LF est
sortie après la dernière valeur.

Writeln(Var1,Var2,...,VarN)
ou

Writeln(FilVar,Var1,Var2,...,VarN)

Une instruction Writeln sans paramètres d'écriture écrit seulement une ligne vide consistant en
une séquence CR/LF.

DMSI/PROGRAMMATION - 118 -
Le type pointeur

XVIII LE TYPE POINTEUR


Un type fichier permet de regrouper des informations de même type et en nombre indéterminé
sur un support externe (disque, bande, etc...). Le type pointeur offre la même possibilité mais
sur un support interne : la mémoire.

Il est possible en cours d'exécution de demander des zones mémoires pour mettre de nouvelles
variables. Ces variables sont appelées variables dynamiques par opposition aux variables
statiques utilisées jusqu'à présent.

Ces variables dynamiques ne sont pas déclarées dans une déclaration de variables comme pour
des variables statiques et elles ne peuvent pas être référencées directement par un
identificateur. Au contraire, une variable spéciale contenant l'adresse mémoire de la variable
est utilisée pour pointer vers cette variable. Cette variable spéciale est appelée variable
pointeur.

XVIII.1 DEFINITION D'UNE VARIABLE POINTEUR


A chaque variable dynamique de type X est associée un objet de type^X appelé pointeur sur X,
il contient l'adresse de la variable dynamique.
L'exemple suivant montre comment déclarer un enregistrement et les pointeurs associés.

Type
Lien = ^Personne;
Personne = Record
Nom : String[15];
Prenom : String[15];
Emploi : String[40];
Suivant : Lien;
End;
Var
Premier, Pcourant : Lien;

Remarque : Cette construction n'est rendue possible que par une exception à la règle
d'ordonnancement qui oblige à déclarer un identificateur avant son utilisation.

Les variables Premier et Pcourant sont donc des variables pointeurs qui peuvent pointer sur
des enregistrements de type Personne.

DMSI/PROGRAMMATION - 119 -
Le type pointeur

XVIII.2 ALLOCATION DES VARIABLES - NEW - GETMEM


Avant de pouvoir utiliser une variable pointeur, nous devons avoir des variables sur lesquelles
pointer. Les nouvelles variables de tout type sont créées avec les procédures standards New ou
GetMem.

Syntaxe des procédures New et GetMem :


Procedure New(Var P : Pointer);
Procedure GetMem(Var P : Pointer; Taille : Word);

où P est une variable pointeur (pointant sur une variable de n'importe quel type) et Taille une
expression de type Word spécifiant la taille en octets de la variable dynamique à allouer. Dans
le cas de New, la taille du bloc mémoire alloué correspond à la taille de la variable pointée par
P. La variable nouvellement créée peut être référencée par P^.

Une nouvelle variable du type Personne est donc créee par l'instruction :
New(Pcourant);

ou par l'instruction :
GetMem(Pcourant,Taille);
qui a pour effet de faire pointer Pcourant sur un enregistrement du type Personne alloué
dynamiquement.

Les affectations entre les variables pointeurs sont possibles à condition que les deux pointeurs
soient d'un type identique. Les pointeurs de type identique peuvent être comparés en utilisant
les opérateurs relationnels =, <>, qui retournent une valeur booléenne.

La valeur de pointeur Nil est une constante symbolique destinée à représenter le cas où une
variable pointeur ne fait référence à aucun élément de type associé. La valeur Nil est
compatible avec tous les types pointeurs et peut être utilisée dans les comparaisons.

Les variables créées par la procédure New sont rangées dans une structure de type Pile partant
du bas de la mémoire, appelée le Tas (Heap).

L'origine du tas est mémorisé dans la variable HeapOrg et le haut du tas (correspondant au
début de la mémoire disponible) dans la variable HeapPtr, le pointeur de tas.

A chaque appel à New ou à GetMem, le pointeur de Tas est déplacé vers le haut de la mémoire
libre, d'un nombre d'octets correspondant à la taille de la nouvelle variable allouée.

DMSI/PROGRAMMATION - 120 -
Le type pointeur

XVIII.3 LIBERATION DE LA MEMOIRE - MARK - RELEASE - DISPOSE -


FREEMEM
Lorsqu'une variable dynamique n'est plus nécessaire dans un programme, les procédures
standards MARK et RELEASE sont utilisées pour récupérer la mémoire utilisée par ces
variables.
La procédure Mark affecte la valeur du pointeur de tas à une variable.
Mark(Var); où Var est une variable pointeur.
La procédure Release donne au pointeur de tas l'adresse de cet argument.
Release(Var);
Var est une variable pointeur préalablement initialisée par Mark. Release supprime donc toutes
les variables dynamiques au-dessus de cette adresse et ne peut pas récupérer de l'espace utilisé
par des variables au milieu du tas.

Au lieu de Mark et Release, la procédure DISPOSE du PASCAL STANDARD peut être


utilisée pour récupérer de l'espace dans le Tas.
Dispose(Var); où Var est une variable Pointeur.
Dispose récupère la mémoire utilisée par une variable pointeur spécifique, alors que
Mark/Release récupèrent toute la partie du Tas à partir d'une variable pointeur spécifique
indiquée et au-dessus.

REMARQUE : Dispose et Mark/Release utilisent des approches totalement différentes de la


gestion du Tas. Ils ne doivent jamais être utilisés en même temps. (voir schéma page suivante)

FreeMem libère la mémoire d'une variable dynamique d'une certaine taille.

Procedure FreeMem(Var P : Pointer; Taille : Word);


Taille doit représenter exactement le même nombre d'octets que la quantité précédemment
allouée à cette variable par GetMem.
Le schéma suivant montre le contenu du Tas avant et après l'utilisation de Dispose et de
Mark/Release.

Tas Dispose (Var3); Mark(Var3);


Release(Var3);

Var1 Var1 Var1


Var2 Var2 Var2
Var3
Var4 Var4
Var5 Var5
Var6 Var6

XVIII.4 UTILISATION DU TYPE POINTEUR


DMSI/PROGRAMMATION - 121 -
Le type pointeur
Les pointeurs permettent la création de structures de données complexes mais souples. Ils ne
nécessitent pas la connaissance préalable du nombre d'éléments qui seront traités par le
programme.
Les principales structures de données que l'on peut construire sont les listes à simple chaînage,
les listes à double chaînage, les arbres binaires ou à N branches, etc.
Exemple:
Type
Lien = ^Personne;
Personne = Record
Nom : String[15];
Prenom : String[15];
Suivant : Lien;
End;
Var
Premier, Pcourant : Lien;
Name : String[15];
I,N : Integer;

Begin
Premier := Nil;
Write('Entrez un nom : ');
ReadLn(Name);
While Not(Name = '') Do
Begin
New(Pcourant);
Pcourant^.Nom := Name;
Readln(Pcourant^.Prenom);
Pcourant^.Suivant := Premier;
Premier := Pcourant;
Write('Entrez un nom : ');
ReadLn(Name);
End;
End.

XVIII.5 AUTRES PROCEDURES ET FONCTIONS


MAXAVAIL MaxAvail : LongInt;
La fonction standard MaxAvail retourne la taille du plus grand espace disponible dans le Tas,
ce qui correspond à la taille de la plus grande variable dynamique qui puisse être allouée après
cette évaluation.
MEMAVAIL MemAvail : LongInt;
La fonction standard MemAvail retourne la somme de tous les blocs de mémoire libres dans le
Tas.

DMSI/PROGRAMMATION - 122 -
Le type pointeur

XVIII.6 LES STRUCTURES NON LINEAIRES


Les structures non linéaires les plus simples sont les structures d'arbre.
QUELQUES DEFINITIONS
Un arbre A est un ensemble fini d'éléments appelés nœuds tel que :
 Il existe un nœud spécial appelé racine (R).
 L'ensemble des nœuds (autres que R) est partagé en M >= 0 ensembles disjoints
A1,A2,...AM, qui sont eux-mêmes des arbres. Les arbres A1,A2,...AM sont appelés sous-
arbres de la racine.
Il s'agit là d'une définition récursive, puisqu'un arbre est défini à partir d'autres arbres. La
décomposition d'un arbre conduit finalement à un ensemble de racines (un seul élément). Les
nœuds terminaux sont appelés feuilles.
 Degré d'un nœud : Le nombre de sous-arbres d'un nœud est appelé le degré du nœud
Un nœud terminal (ou feuille) a pour degré 0.
 Niveau d'un nœud :· Le niveau d'un nœud se définit par rapport à celui de la racine.
EXEMPLE:

B C

D E F

G H

A est relié à deux sous-arbres B et C, D, E , F, G, H ; son degré est 2


Le degré de C est égal à 3. Le degré de D et F est égal à 1.
Le degré de B,G,E,H est égal à 0; il s'agit donc de feuilles.

 Arbres ordonnés: Si l'ordre relatif des sous-arbres A1,A2,...AM est important,


l'arbre est dit ordonné.
 Arbres orientés: Des arbres qui diffèrent par le seul ordre de leurs sous-arbres sont
dits orientés.
 Arbres binaires: Un arbre binaire est un ensemble de noeuds qui est soit vide soit
composé d'une racine et de deux arbres binaires disjoints appelés sous-arbre droit et sous-
arbre gauche.

DMSI/PROGRAMMATION - 123 -
Le type pointeur

XVIII.6.1 CREATION D'UN ARBRE BINAIRE


Un arbre binaire peut être créé en définissant un type correspondant à un noeud de l'arbre.

Type
Pointeur = ^Noeud;
Noeud = Record
Nom : String[10];
Gauche : Pointeur;
Droit : Pointeur;
End;

Une telle structure peut être utilisée pour ordonner des éléments, en considérant que le sous-
arbre gauche d'un noeud contient les éléments situés avant l'élément correspondant au noeud
tandis que le sous-arbre droit contient les éléments situés après l'élément associé au noeud.
La procédure ARBRE ci-dessous permet la création d'un arbre binaire.

Program ArbreBin;
Type
Mot = String[10];
Pointeur = ^Noeud;
Noeud = Record
Nom : Mot;
Gauche : Pointeur;
Droit : Pointeur;
End;
Var
Racine : Pointeur;
Element : Mot;

Procedure ARBRE(Var Rac : Pointeur; Elt : Mot);


Begin
If Rac = Nil
Then
Begin
New(Rac);
Rac^.Nom := Elt;
Rac^.Gauche := Nil;
Rac^.Droit := Nil;
End
Else
If Elt < Rac^.Nom
Then
Arbre(Rac^.Gauche,Elt)
Else
Arbre(Rac^.Droit,Elt);
End;

DMSI/PROGRAMMATION - 124 -
Notions de Programmation Objet

XIX NOTIONS DE PROGRAMMATION OBJET


XIX.1 GENERALITES SUR LES OBJETS.
Qu’est-ce qu’un objet ?
Une entité regroupant
− les données (constantes, variables) nommées attributs.
− les actions, méthodes sur ces objets
XIX.1.1 APPROCHE STRUCTURÉE – APPROCHE OBJET
La méthodologie objet est très différente de l’algorithmique structurée. Elle s’appuie sur des
méthodes nommées :
− OMT (Object Modeling Technique)
− OOD (Object Oriented Designed)
− MERISE OBJET
− UML (Unified Modeling Language)

Programmation Structurée POO


- Données Object
- Procédures qui manipulent les données Données
Procédures qui manipulent ces données
Exemple :
Etude d’un point dans le plan.
Approche structurée :
TYPE
T_Point = Record
Abscisse, Ordonnee : Integer ;
End ;
VAR
Point : T_Point ;
Procedure Placer(Var P : T_Point ; X,Y : Integer) ;
Begin
P.Abscisse := X ;
P.Ordonnee := Y ;
End ;

Utilisation :
Placer un point Pt_A en (1,3) s’écrira
Placer(Pt_A, 1, 3) ;

DMSI/PROGRAMMATION - 125 -
Notions de Programmation Objet

Approche objet :
Unit Upoint ;
INTERFACE
TYPE
T_Point = Object
Public
Procedure Placer(X, Y : Integer) ;
Procedure Afficher ;
Private
Abscisse, Ordonnee : Integer ;
End ;

IMPLEMENTATION
Procedure T_Point.Placer(X, Y : Integer) ;
Begin
Abscisse := X ;
Ordonnee := Y ;
End ;
Procedure T_Point.Afficher ;
Begin
Writeln(‘L’’abscisse vaut : ‘,abscisse) ;
Writeln(‘L’’ordonnée vaut : ‘,ordonnee) ;
End ;
End.

Program Utilisation_Classe_Point ;
Uses
Upoint ;
Var
Pt1 : T_Point ;
Begin
Pt1.Placer(5, 8) ;
Pt1.Afficher ;
...
End.

DMSI/PROGRAMMATION - 126 -
Notions de Programmation Objet

XIX.2 TERMINOLOGIE OBJET


Objet Entité qui possède des caractéristiques, sur laquelle on peut appliquer
des actions, à laquelle on peut envoyer des messages
Propriétés = Caractéristiques de l’objet
Attributs
Données membres
Méthodes = Actions sur les objets
Messages
Fonctions membres
Membres Les caractéristiques et les Actions
Classe Modèle d’objet qui décrit les membres
Instance de classe Un objet
Chaque objet reçoit une copie des données membres de la classe.
Tous les objets d’une classe se partagent les méthodes de la classe
Abstraction Rendre Visible/Invisible certains membres d’une classe
Private Données Membres +
Implémentation (En général)
Public Méthodes
Composition Objet composé d’un ou plusieurs objets
Héritage Objet qui hérite des membres d’un autre objet
Phrase clef : " est un type de "
Surcharge Réécrire le comportement d'une méthode héritée
Encapsulation Assurer un maximum de fiabilité, de garantie, de souplesse d'utilisation.
La manipulation des attributs de l'objet, l'utilisation ne peut se faire
qu'en utilisant les méthodes.
Les attributs ne sont pas utilisables directement par le programme. Par
exemple, Pt.Abscisse est interdit.
Les attributs, contrairement aux méthodes, ne sont pas visibles à
l'extérieur.
La classe définie doit être complète, ie, posséder toutes les méthodes
nécessaires à l'utilisation des attributs.
Polymorphisme Capacité pour une méthode d'adapter son comportement suivant l'objet
auquel elle s'applique. Cf exemple suivant

Mammifère
Avancer

Chien Baleine
Avancer Avancer

Nb: Les mots Objets et Classes sont interchangeables suivant le contexte.

DMSI/PROGRAMMATION - 127 -
Notions de Programmation Objet

XIX.3 EXEMPLE D'UTILISATION


Définition d'une classe:

Unit U_Vehic; { sera enregistrée dans le fichier U_Vehic.pas }


INTERFACE
TYPE
Pt_Vehicule = ^T_Vehicule; { Type Pointeur sur un T_Vehicule }
T_Vehicule = Object
Public
Couleur : Integer;
Procedure Initialiser;
Procedure Demarrer;
Function Obtenir_Immatriculation : String;
Private
Immatriculation : String;
...
Procedure Immatriculer;
End;

IMPLEMENTATION
Procedure T_Vehicule.Initialiser;
Begin
...
...
End;

{ Autres procédures et fonctions }

Utilisation de la classe T_Vehicule

Uses U_Vehic; { Utilisation de l'unité U_Vehic (dans le fichier U_Vehic.TPU) }

Var
Voiture : T_Vehicule;
...

Begin
Voiture.Couleur := 10; { OK }
Voiture.Initialiser; { OK }
Voiture.Immatriculer; { Interdit car la procédure Immatriculer est private }

DMSI/PROGRAMMATION - 128 -
Notions de Programmation Objet

XIX.4 LES CONSTRUCTEURS ET LES DESTRUCTEURS


Les constructeurs et les destructeurs sont des méthodes spéciales utilisées pour initialiser et
construire un objet ou pour supprimer un objet de l'espace du Tas.
Les constructeurs et destructeurs se déclarent au moyen des mots réservés constructor et
destructor à la place du mot réservé procedure.
XIX.4.1 LES CONSTRUCTEURS
Les constructeurs sont des méthodes qui permettent d'initialiser les données membres des
objets.
EXEMPLE :
INTERFACE
TYPE
T_Obj = OBJECT
Public
Constructor Initialiser;
Constructor Init(A:Integer);
Private
Donnee_M : Integer;
End;
IMPLEMENTATION
Constructor T_Obj.Initialiser;
Begin
Donnee_M := 0;
End;
Constructor T_Obj.Init(A : Integer);
Begin
Donnee_M := A;
End;
En Pascal, les constructeurs sont publics par défaut.
Utilisation
VAR
Objet1 : T_Obj;
Begin
Objet1.Initialiser;
Objet1.Initialiser_2(17);
...
End.

DMSI/PROGRAMMATION - 129 -
Notions de Programmation Objet

XIX.4.2 LES DESTRUCTEURS


Les destructeurs sont des méthodes qui permettent de finaliser un objet (Inverse du
constructeur). Ils sont utilisés pour
− libérer la mémoire
− fermer des fichiers
− détruire des objets contenus dans l'objet
− etc...
EXEMPLE :
INTERFACE
TYPE
T_Obj = OBJECT
Public
Constructor Init;
Destructor Done;
Procedure ChangerValeur(Valeur : Integer);
Private
Pt_M : ^Integer;
End;
IMPLEMENTATION
Constructor T_Obj.Init;
Begin
New(Pt_M);
End;
Destructor T_Obj.Done;
Begin
If Pt_M <> NIL Then Begin
Dispose(Pt_M);
Pt_M := NIL;
End;
End;
Procedure T_Obj. ChangerValeur(Valeur : Integer);
Begin
Pt_M^ := Valeur;
End;
Utilisation
VAR
Objet1 : T_Obj;
Begin (1)
Objet1.Init; (2)
Objet1. ChangerValeur(25); (3)
Objet1.Done; (4)
End. (5)

DMSI/PROGRAMMATION - 130 -
Notions de Programmation Objet

(1) Déclaration de Objet1


Pt_M P

(2) Appel du Constructeur

Pt_M P
?

(3) Objet1. ChangerValeur(25)


Pt_M P
25

(4) Appel du Destructeur

Pt_M P
25
NIL

(5) Objet1 n'existe plus

DMSI/PROGRAMMATION - 131 -
Notions de Programmation Objet

XIX.4.3 L'HERITAGE
Soit le programme suivant qui utilise un objet dérivé de la classe T_Obj définie
précédemment.
EXEMPLE
INTERFACE
TYPE
T_ObjetDerive = Object ( T_Obj)
Public
Constructor Init;
Destructor Done;
Procedure P50;
Private
Nb : Real;
End;
IMPLEMENTATION
Constructor T_ObjetDerive.Init;
Begin
inherited Init; { Appelle le Init de la Classe de Base }
N := 0.0;
End;
Procedure T_ObjetDerive.P50;
Begin
N := 50.0;
End;
...
Le mot réservé inherited est mentionné pour indiquer que c'est le constructeur Init de la classe
de base qui est appelé.
XIX.5 POLYMORPHISME - SURCHARGES DES METHODES
Soit la méthode M1 d'une classe de base. Si cette méthode est redéfinie dans la classe dérivée,
on dit qu'elle est surchargée.
Soient C_Base une classe de Base et C_Derivee une classe dérivée de C_Base.
Soit Pt une variable déclarée comme pointeur sur un objet de type C_Base.
Alors Pt peut pointer sur un objet de type C_Base ou sur un objet de type C_Derivee (car
C_Derivee hérite de C_Base).

DMSI/PROGRAMMATION - 132 -
Notions de Programmation Objet
EXEMPLE
Uses
CRT;
TYPE
T_PT_C_Base=^C_Base;
C_Base =object
public
Constructor Init; { Constructeur obligatoire dans la classe de Base }
procedure P1;virtual;
private
end;
T_PT_C_Derivee = ^C_Derivee;
C_Derivee =object(C_Base) { La classe dérivée hérite de la classe de base }
public
procedure P1;virtual;
private
end;
Constructor C_Base.Init;
Begin
End;
Procedure C_Base.P1;
Begin
Writeln('Méthode P1 de C_Base (Classe de base)');
End;
Procedure C_Derivee.P1;
Begin
Writeln('Méthode P1 de C_Derivee (Classe qui hérite de la Classe de base)');
End;
Var
Ptr : T_PT_C_Base;
Begin
ClrScr;
Ptr := New(T_Pt_C_Derivee,Init);
Ptr^.P1;
Dispose(Ptr);
Ptr := New(T_Pt_C_Base,Init);
Ptr^.P1;
Dispose(Ptr);
End.

NB :
− L'utilisation du mot réservé virtual qui indique que la méthode concernée n'est liée
au code qu'au moment de l'exécution, de l'appel (ligature dynamique).
− L'utilisation de New avec comme paramètres le type du pointeur renvoyé et le
constructeur.

DMSI/PROGRAMMATION - 133 -
Notions de Programmation Objet

XIX.6 LE PARAMETRE CACHE (IMPLICITE) SELF


Le paramètre caché Self référence l'objet auquel la méthode s'applique.

EXEMPLES
TYPE
C_Obj = Object
Public
Constructor Init (LeNombre : Integer);
Function ObtenirNombre : Integer;
Private
Nombre_M : Integer;
End;
Constructor C_Obj.Init(LeNombre : Integer);
Begin
Nombre_M := LeNombre;
End;
Function C_Obj.ObtenirNombre : Integer;
Begin
ObtenirNombre := Nombre_M;
End;

Les déclarations précédentes sont en fait les suivantes :


TYPE
C_Obj = Object
Public
Constructor Init (Var Self : C_Obj;LeNombre : Integer);
Function ObtenirNombre (Var Self : C_Obj) : Integer;
Private
Nombre_M : Integer;
End;
Constructor C_Obj.Init(Var Self : C_Obj;LeNombre : Integer);
Begin
Self.Nombre_M := LeNombre;
End;
Function C_Obj.ObtenirNombre (Var Self : C_Obj) : Integer;
Begin
ObtenirNombre := Self.Nombre_M;
End;

Var Traduction
Obj1, Obj2 : C_Obj;
Begin
Obj1.Init(100); C_Obj.Init(Obj1, 100);
Obj2.Init(110); C_Obj.Init(Obj2,110);
Writeln(Obj1.ObtenirNombre); Writeln(C_Obj.ObtenirNombre(Obj1));
End.

DMSI/PROGRAMMATION - 134 -
Notions de Programmation Objet

Self est un pointeur. Mais Attention, on n'utilise pas la notation pointeur (Self^).

Soit l'objet Obj1 de la classe C_Obj

Obj1
Nombre_M

Self

Self.Nombre_M := LeNombre;

DMSI/PROGRAMMATION - 135 -
Utilisation du Turbo Pascal

XX UTILISATION DU TURBO PASCAL


XX.1 L'ENVIRONNEMENT DE DEVELOPPEMENT INTEGRE DU TURBO
PASCAL
Lorsque l'on utilise Turbo Pascal dans la version Environnement Intégré, l'écran se présente
sous la forme de menus déroulants. Cet environnement de développement intégré (EDI)
combine un éditeur de texte, un compilateur et un débogueur, le tout accessible depuis un
menu principal.
Les différentes options du menu sont accessibles soit
 à l’aide de la souris
 par F10, puis les flèches de direction et Enter
 par Alt + la première lettre de l’option choisie
 par un raccourci (Exemple Alt+F9 = Compile)

XX.1.1 PRESENTATION DE L’ECRAN PRINCIPAL ET DES SOUS-MENUS.

DMSI/PROGRAMMATION - 136 -
Utilisation du Turbo Pascal

Sous-menu File

New
Provoque l'ouverture d'une nouvelle fenêtre NONAMExx.PAS.
Open F3
Ouvre une boite de chargement de fichier
Save F2
Copie le contenu de la fenêtre d'édition dans un fichier disque.
Save as
Permet de sauvegarder le fichier en cours sous un autre nom.
Save all
Permet de sauvegarder tous les fichiers ouverts.
Change Dir
Ouvre la boite permettant de spécifier le nom du répertoire.
Print
Provoque l'impression du contenu de la fenêtre d'édition active.
Printer Setup...
Provoque l’ouverture de la boîte Printer Setup qui sert à configurer le chemin d’accès et les
éléments de ligne de commande. Le filtre est en général le fichier PRNFLTR.EXE dont le
source (modifiable) est livré dans le répertoire TP\BIN.
DOS shell
Sortie temporaire de l'EDI pour réaliser des opérations DOS (retour par EXIT)
Exit Alt X
Provoque la fin normale de la session dans l'EDI.

DMSI/PROGRAMMATION - 137 -
Utilisation du Turbo Pascal

Sous-menu Edit

Undo Alt+BkSp
Annule l'effet de la dernière action d'édition par rapport à une ligne de texte. Vous pouvez
continuer à taper Undo pour défaire d’autres actions.
Redo
Annule l’effet de la dernière commande Undo
Cut Shift+Del
Supprime le bloc marqué et le transfère dans le presse-papier.
Copy Ctrl+Ins
Copie le bloc marqué dans le presse-papier
Paste Shift+Ins
Insère une copie du contenu du presse-papier à la position du curseur.
Clear Ctrl+Del
Efface le bloc marqué
Show clipboard
Permet d'afficher le contenu du presse-papier
Pour marquer un bloc, vous pouvez toujours utiliser les commandes clavier (les séquences
Crtl-K-B, Ctrl-K-K etc...) ou bien utiliser la touche Shift associée aux touches de déplacement
de curseur ou bien encore utiliser directement la souris (cliquer sur le bouton gauche sur le
début du bloc souhaité et déplacer la souris en maintenant le bouton gauche appuyé).

DMSI/PROGRAMMATION - 138 -
Utilisation du Turbo Pascal

Sous-menu Search

Find ...
Ouvre la boite Find pour permettre de définir le texte à rechercher.
Replace ...
Affiche une fenêtre de dialogue permettant de taper un texte à chercher et un autre de
remplacement.
Search again Ctrl-L
Reprend la dernière commande Find ou Replace. Tous les paramètres spécifiés restent actifs.
Goto line number ...
Aller à la ligne N°
Show last compiler error
Affiche le dernier message d’erreur et amène le curseur sur la ligne source correspondante.
Find error
Recherche la position d'une erreur d'exécution.
Find procedure ...
Permet de rechercher une procédure pendant le débogage.
Previous browser
Affiche le résultat de la dernière opération dans la fenêtre Browser
Objects
Affiche tous les objets d’une application
Units
Affiche les informations au sujet des unités
Globals
Affiche les informations au sujet des identificateurs globaux
Symbol
Provoque l’ouverture de la boîte Browse Symbol

DMSI/PROGRAMMATION - 139 -
Utilisation du Turbo Pascal

Sous-menu Run

Run Ctrl-F9
Lance l'exécution du programme. Si le fichier Source a été modifié depuis la dernière
compilation, provoque une reconstruction Make.
Step over F8
Provoque l'exécution de la prochaine instruction en considérant comme une seule instruction
l'appel et le retour du niveau inférieur (procédures ou fonctions).
Trace into F7
Provoque l'exécution de la prochaine instruction même si cela suppose de descendre dans un
niveau inférieur (sous-programme).
Go to cursor F4
Lance l'exécution jusqu'à la ligne curseur (si la ligne est exécutable).
Program reset Ctrl-F2
Abandonne le débogage, libère la mémoire et ferme tous les fichiers ouverts par le
programme.
Parameters ...
Ouvre une boite de dialogue permettant de spécifier les options de ligne de commande qui
seront transmises en début d'exécution.

DMSI/PROGRAMMATION - 140 -
Utilisation du Turbo Pascal

Sous-menu Compile

Compile Alt-F9
Provoque la compilation du texte source dans la fenêtre d'édition active.
Make F9
Construction sélective du fichier indiqué par Primary File ou du fichier de la fenêtre d'édition.
 si le source d'une unité a été mis à jour (.TPU obsolète), elle est recompilée.
 si la partie Interface d'une unité a été modifiée, toutes les unités qui la référencent
sont recompilées.
 si une unité référence un fichier Include ou .OBJ modifié (.TPU obsolète), l'unité est
recompilée.
Build
Provoque la reconstruction systématique du projet.
Primary File...
Permet de définir le nom du fichier source .PAS principal qui sera compilé par le Make et le
Build.
Clear primary file...
Désélectionne le fichier principal courant. Les commandes Compile et Build vont s’appliquer
au fichier de la fenêtre active.
Information...
Provoque l’ouverture de la boîte Information qui indique
 le statut de la dernière compilation
 l’utilisation mémoire
 l’environnement

DMSI/PROGRAMMATION - 141 -
Utilisation du Turbo Pascal

Sous-menu Debug

BreakPoints...
Provoque l'ouverture d'une boite de dialogue qui contrôle l'utilisation des points d’arrêt aussi
bien conditionnels qu’inconditionnels.
Call Stack Ctrl-F3
Provoque l'ouverture de la fenêtre Call Stack. Cette fenêtre montre la pile d'appels des
différentes routines. La pile symbolique peut mémoriser 128 appels.
Register
Provoque l'ouverture de la fenêtre Register. Cette fenêtre présente le contenu des registres du
microprocesseur (très utile lors du débogage des parties d’assembleur).
Watch
Provoque l'ouverture de la fenêtre de suivi Watch. Cette fenêtre contient les expressions
choisies comme témoins.
Output
Provoque l'ouverture de la fenêtre de résultats d'exécution (pas de graphiques).
User Screen Alt-F5
Bascule sur la page vidéo, l'écran d'exécution (aussi bien les affichages texte que les tracés
graphiques).
Evaluate/modify... Ctrl-F4
Permet d'évaluer une variable ou une expression, de visualiser ou de modifier la valeur d'une
variable.
Add Watch... Ctrl F7
Permet de spécifier une expression témoin.
Add Breakpoint...
Provoque l’ouverture d’une boîte qui sert à définir de nouveaux points d’arrêts conditionnels
ou inconditionnels.

DMSI/PROGRAMMATION - 142 -
Utilisation du Turbo Pascal

Sous-menu Tools

Messages
Affiche la fenêtre Message (messages des programmes qui utilisent un filtre DOS comme
GREP).
Go to next Alt+F8
Dans une fenêtre Messages ou Browser, le focus va sur le prochain élément, puis l’EDI affiche
le source correspondant.
Go to previous Alt+F7
Idem sur l’élément précédent.
Grep Shift+F2
Grep (Acronyme de Get Regular Expression Pattern) est un utilitaire installé par défaut. Son
rôle est de rechercher un texte dans plusieurs fichiers à la fois. On peut modifier ses
paramètres dans Options/Tools.

Sous-menu Options

Compiler...
Ouvre une fenêtre permettant de fixer soit pour l’application en cours, soit pour les
applications futures, différentes options de compilation. Ces options seront détaillées en
Annexe A.

DMSI/PROGRAMMATION - 143 -
Utilisation du Turbo Pascal

Memory Sizes...
Permet de modifier trois paramètres de taille mémoire :
Taille Pile (Stack size)
Limite Mini du Tas (Low Heap limit)
Limite Maxi du Tas (High Heap limit)
L'option $M est équivalente.
Taille Pile : Ce paramètre définit la taille du segment de pile, en octets. La valeur par défaut
est de 16 Ko, le maximum étant bien sûr de 64 Ko.
Limite mini du Tas : Ce paramètre définit la taille minimale du tas (>Heap). La valeur par
défaut est de 0 Ko. Si la taille du tas ne permet pas la bonne exécution d'un programme, celui-
ci se termine sur une erreur d'exécution.
Limite maxi du Tas : Ce paramètre définit la taille maximale du tas (>Heap). La valeur par
défaut est de 655360, ce qui correspond en général à la totalité de la mémoire disponible. Cette
valeur doit être supérieure ou égale à la valeur minimale du tas.
Linker...
Permet de préciser les fichiers éventuellement produits par le linker.
Debugger...
Permet de fixer différentes options de débogage
 Integrated debugging : par défaut (débogage par débogueur intégré et par Turbo
Debugger)
 Standalone : débogage uniquement par Turbo Debugger
 Display Swapping : pour spécifier quand le débogueur intégré peut permuter les
fenêtres d’affichage.
Directories...
Permet de spécifier les répertoires que Turbo Pascal doit utiliser pour les fichiers EXE & TPU,
les fichiers Include, les fichier Units et les fichiers Objets.
Browser...
Provoque l’ouverture d’une boîte définissant les options de ObjectBrowser qui permet de
naviguer au milieu des hierarchies d’objets, d’unités et d’identificateurs de votre projet.
Tools...
Provoque l’ouverture d’une boîte qui sert à aménager l’accès aux utilitaires associés (Ex
GREP) en fixant les répertoires et différentes options de la ligne de commande.

DMSI/PROGRAMMATION - 144 -
Utilisation du Turbo Pascal

Sous-menu Window

Tile (mosaïque)
Permet de juxtaposer les fenêtres.
Cascade
Permet d'empiler les fenêtres avec un léger décalage.
Close all
Permet de fermer toutes les fenêtres
Refresh display
Restaure l’affichage
Size/Move Ctrl-F5
Permet de retailler et de déplacer la fenêtre active à l'aide des touches curseur associées à la
touche Shift. On peut également utiliser la souris en cliquant sur la poignée en bas à droite.
Zoom F5
Permet de déplier (ou replier) la fenêtre active pour qu'elle occupe tout l'écran. C'est une
commande bascule.
Next F6
Permet de circuler entre les fenêtres selon un schéma d'appel circulaire.
Previous Shift-F6
Permet d'activer la dernière fenêtre active avant la fenêtre active actuelle.
Close Alt-F3
Provoque la fermeture de la fenêtre active.
List Alt-0
Provoque l'ouverture de la liste des fenêtres actuellement ouvertes.

DMSI/PROGRAMMATION - 145 -
Utilisation du Turbo Pascal

Sous-menu Help

Contents
Présente un sommaire des entrées principales du système d'aide.
Index Shift+F1
Présente un index alphabétique complet.
Topic Search Ctrl+F1
Permet d'accéder à l'aide langage sur un mot standard (pointé par le curseur).
Previous TopicAlt+F1
Dans le système d'aide, vous pouvez consulter les 20 derniers écrans d'aide.
Using Help
Permet d'accéder à un écran expliquant comment utiliser l'aide.
Files...
Ouvre une boîte permettant d’ajouter/ôter des fichiers d’aide
Compiler Directives
Reserved Words ...
Différentes aides particulières sur les sujets indiqués.

DMSI/PROGRAMMATION - 146 -
Utilisation du Turbo Pascal

XX.1.2 COMMANDES DE L'EDITEUR


Mouvements du curseur
Caractère à gauche Ctrl-S ou Flèche Gauche
Caractère à droite Ctrl-D ou Flèche Droite
Mot à gauche Ctrl-A
Mot à droite Ctrl-F
Ligne précédente Ctrl-E ou Flèche Haut
Ligne suivante Ctrl-X ou Flèche Bas
Défilement arrière Ctrl-W
Défilement avant Ctrl-Z
Page précédente Ctrl-R ou PgUp
Page suivante Ctrl-C ou PgDn
Position précédente Ctrl-Q P
Insertion et Suppression
Insertion Oui/Non Ctrl-V ou Ins
Insertion 1 ligne Ctrl-N
Insertion options Ctrl-O O
Suppression 1 ligne Ctrl-Y
Suppr. -> Fin de ligne Ctrl-Q Y
Suppr. carac. à gauche Ctrl-H ou Backspace
Suppr. carac. Curseur Ctrl-G ou Del
Suppr. carac. à droite Ctrl-T
Suppr. Bloc Ctrl-K Y
Commande de blocs de texte
Marque début de bloc Ctrl-K B
Marque fin de bloc Ctrl-K K
Marque un mot Ctrl-K T
Copie du bloc Ctrl-K C
Déplacement de bloc Ctrl-K V
Suppression de bloc Ctrl-K Y
Lecture bloc disque Ctrl-K R
Ecriture bloc disque Ctrl-K W
Montre/Cache bloc Ctrl-K H
Imprime bloc Ctrl-K P
Indente bloc Ctrl-K I
Indente inverse bloc Ctrl-K U
Commandes d'édition diverses
Sortie sans sauver Ctrl-K D ou Ctrl-K Q
Sauve et édite Ctrl-K S ou F2
Charge autre fichier F3
Tabulation Ctrl-I ou Tab
Bascule Tab Ctrl-O T ou Ctrl-Q T
Autoindentation O/N Ctrl-O I ou Ctrl-Q I
Récupère ligne Ctrl-Q L
Pose marqueur Ctrl-K n
Trouve marque Ctrl-Q n
Remplissage optimisé Ctrl-O F
Indentation inverse Ctrl-O U
Délimiteur apparié droit Ctrl-Q [
Délimiteur apparié gauche Ctrl-Q ]
Préfixe de caractère CtrlCtrl-P
Abandon d'opération (Undo) Ctrl-U
Réaffiche message d'erreur Ctrl-Q W
Cherche (Find) Ctrl-Q F
Cherche & remplace Ctrl-Q A
Cherche suivant (Last) Ctrl-L

DMSI/PROGRAMMATION - 147 -
Utilisation du Turbo Pascal

XX.1.3 DIVERS
La commande Edit vous fait entrer dans l'éditeur intégré. Vous revenez au menu principal par
F10, et passez à une autre option par Alt-initiale d'option. Le fichier contenu dans l'éditeur
reste visible. Il suffit de frapper "E" depuis le menu ou Alt-E de tout autre point pour revenir à
l'édition. Lors de la saisie, vous êtes en mode Insertion par défaut.
Ctrl+O+O insère toutes les directives de compilation en première ligne du fichier en cours.
Ctrl+F1 appelle l'aide langage.
La ligne d'état de l'éditeur indique : la ligne et colonne courantes.
Un astérisque indique si le fichier a été sauvegardé depuis la dernière modification.
La longueur de ligne maximale de l'éditeur est de 249 (voire 1024 suivant l’EDI utilisé)
caractères; rappelez-vous cependant que le compilateur n'en accepte que 126.
La largeur de la fenêtre d'édition est de 77 caractères; si vous frappez au-delà, le texte à
gauche est translaté. Lorsque vous terminez votre session d'édition, frappez F10 pour revenir
au menu principal.

DMSI/PROGRAMMATION - 148 -
Utilisation du Turbo Pascal

XX.2 UTILISATION DU DEBOGUEUR


Le débogueur intégré de Turbo Pascal fonctionne au niveau source : vous suivez l'exécution
du programme et posez des points d'arrêt dans le texte source correspondant. Vous examinez
et modifiez des variables sélectionnées (les témoins) en appliquant la syntaxe Pascal.
Le débogueur utilise la fenêtre de l'éditeur (Edit) pour indiquer la position courante et les
points d'arrêt. Les témoins éventuels sont visibles dans la fenêtre de suivi Watch.
Le système de menus déroulants reste accessible lors du débogage. Le texte source peut être
modifié et compilé grâce aux commandes du menu Compile.
Pour utiliser le débogueur, basculez l'option Options/Debugger sur Integrated avant de
compiler le programme. Le débogueur entre en action dès que vous utilisez une des
commandes du menu Run.
XX.2.1 FENETRE WATCH
La fenêtre de suivi (Watch window) contient les témoins que vous avez désignés, c'est-à-dire
les variables ou expressions dont la valeur évolue au cours du débogage.

Ces témoins peuvent comporter des spécificateurs de format pour contrôler leur format
d'affichage.
Exemple :
I,$ { Affiche la variable entière I en HexaDécimal }
La fenêtre de suivi est indispensable pour surveiller les valeurs de certaines variables et
expressions stratégiques. Dans certaines situations cependant, le besoin est ponctuel et ne
justifie pas l'insertion d'un témoin supplémentaire. Utilisez dans ce cas la commande
Evaluate/Modify (Ctrl+F4), elle vous permet de visualiser et même de modifier la valeur de
toute variable ou expression.
Un spécificateur de format comprend une valeur de répétition facultative (entière), suivie de
zéro ou plus métacaractères de format.

C Caractère. Visualise les caractères de contrôle (ASCII 0..31); par défaut, ceux-ci sont
représentés sous forme de valeurs ASCII en utilisant la syntaxe #xx. Concerne les
caractères et les chaînes.
D Décimal. Les valeurs entières sont présentées en notation décimale. Concerne les
expressions entières simples mais aussi les structures contenant des entiers.
F[n] Virgule flottante. n est un entier entre 2 et 18 spécifiant le nombre de chiffres
significatifs (11 par défaut). Ne concerne que les valeurs à virgule flottante.
H, X, $ Hexadécimal. Les valeurs entières sont présentées en notation hexadécimale avec un
préfixe '$'. Concerne les expressions entières simples mais aussi les structures
contenant des entiers.
M Mémoire. Visualise le contenu de l'adresse mémoire symbolisé par la variable. Celle-
ci doit évidemment représenter une position mémoire. M peut être combiné à D, C,
S, X ou H.
P Pointeur. Visualise les pointeurs au format segment:déplacement (seg:ofs) plutôt
qu'au format standard Ptr(seg,ofs). Ne concerne que les valeurs de type pointeur.
R Record. Visualise aussi les noms des champs des enregistrements (X:1;Y:10;Z:5) en
plus de leurs valeurs (1,10,5). Ne concerne que les variables du type enregistrement.
S String. Visualise les caractères de contrôle (ASCII 0..31) en tant que valeurs ASCII
avec le préfixe #. C'est le mode de présentation standard; S n'est donc utile qu'en
combinaison avec M
Voici quelques exemples d'expressions employant les spécificateurs de format. Posons les
déclarations suivantes :

DMSI/PROGRAMMATION - 149 -
Utilisation du Turbo Pascal

TYPE
NamePtr = ^NameRec;
NameRec = RECORD
Next : NamePtr;
Count : INTEGER;
Name : STRING[31];
END;

VAR
List : ARRAY[1..10] OF INTEGER;
P : NamePtr;

Les expressions suivantes sont valides :


Témoin Résultat Commentaires
List: (10,20,30,40,50,60,70,80,90,100) Toutes les valeurs du tableau
List[6],3X: $3C,$46,$50 Les 3 valeurs à partir de List[6]
P,P: 3EA0:000C P sous format Pointeur
P Ptr($1073,$0)
P^: (PTR($3EF2,$2),412,'John') Ce qui est pointé par P
P^.Next^,RX: (Next:nil;Count:$19C;'Joe')
Mem[$40:0],8M: F8 03 F8 02 00 00 00 00 8 cases du tableau Mem à partir de
l’emplacement $40 :0 au format
Mémoire
Mem[$40:0],8MD: 248 3 248 2 0 0 0 0 La même au format décimal

DMSI/PROGRAMMATION - 150 -
Annexes

ANNEXE A - OPTIONS DE COMPILATION


Les directives de compilation ressemblent à des commentaires et peuvent être insérées aux
mêmes points. Elles sont toujours constituées d'un signe $ suivant l'accolade ouvrante et d'une
lettre de directive.
Les directives bascules activent/inhibent certaines fonctions du compilateur (signe + ou - après
la lettre de directive). Les directives paramètres permettent de transmettre des paramètres au
compilateur.
Les directives Bascules sont locales ou globales. Locales, elles n'ont d'effet que sur une partie
de la compilation.
Les directives Paramètres doivent comporter au moins un esapce entre la lettre et la paramètre.
Les directives locales peuvent s'insérer en tout point d'un programme ou d'une unité. Celles de
type global doivent être placées avant le bloc de déclaration du module.
Vous groupez plusieurs directives en les séparant par des virgules.
Les directives bascules
$A : Cadrage Données (Align Data Switch) (Globale)
Bascule entre alignement sur frontière d'octet et de mot pour le stockage des variables et
constantes typées.
L'alignement sur mot permet une plus grande vitesse d'exécution car les éléments sur 2 octets
stockés à une adresse paire sont atteints en un seul cycle mémoire au lieu de deux.
Un champ de structure record n'est aligné sur une frontière de mot que si la taille totale de tous
les champs qui le précède est paire.
Pour assurer un alignement mot des champs de tableaux, la taille d'élément doit être paire.
Note: Quel que soit l'état de $A, les blocs de déclarations de variables et de constantes globales
débutent sur une adresse paire.
$B : Evaluation Booléenne (Boolean Evaluation Switch) (Locale)
Permet d'activer ou non le mécanisme d'évaluation optimisée des expressions logiques
(booléennes) basées sur les opérateurs booléens AND et OR.
$D : Infos Débogage (Debug Information Switch) (Globale)
Contrôle l'insertion des informations de débogage dans le fichier exécutable.
REMARQUES Cette option contrôle la génération des informations de débogage. Il s'agit
d'une
table des numéros de lignes source pour chaque procédure ou autre objet à étudier.
$F : Forcer Appels FAR (Force Far Calls Switch) (Locale)
Cette bascule contrôle le modèle d'appel qui doit être utilisé pour les appels de procédures et
de fonctions qui suivent la bascule.
$G : Jeu d'instructions 80286 (Generate 80286 Code Switch) (Globale)
Contrôle la génération des instructions spécifiques au 80286.

DMSI/PROGRAMMATION - 151 -
Annexes

$I : Test des Entrées/Sorties (Input/Output-Checking Switch) (Locale)


Sous l'effet de cette option, le compilateur génère du code supplémentaire pour tester la
validité de chaque opération d'entrées/sorties.
REMARQUES: Si une erreur est détectée (valeur renvoyée différente de 0), le programme se
termine sur une erreur d'exécution.
Si {$I} est Off, vous devez utiliser la fonction IOResult pour tester ces erreurs.
$K : Rappels Optimisés (Smart Callbacks Switch) (Windows seul)
Contrôle la génération de blocs de code de rappel optimisés (smart callbacks) pour les
procédures et fonctions exportées par une application.
REMARQUES: Si une application est compilée sous l'effet de $K-, elle doit utiliser les
routines de l'API Windows nommées MakeProcInstance et FreeProcInstance pour créer des
routines de rappel (callbacks).
$L : Informations de Symboles Locaux (Local Symbol Information Switch) (Globale)
Cette option contrôle la génération des informations au sujet des symboles locaux.
REMARQUES L'information de symboles locaux est constituée des éléments suivants:
− les symboles de la partie implémentation du module (noms et types de toutes les
variables, constantes locales) et
− les symboles des blocs de procédures et de fonctions de ce module.
$N : Coprocesseur arithmétique (Numeric Coprocessor Switch) (Globale)
Permet de choisir entre les deux types de code pour les calculs sur les nombres flottants offerts
par Turbo Pascal.
Dans l'état {$N-}, Turbo Pascal génère un code pour réaliser les calculs sur les flottants par
appel aux routines standard.
Dans l'état {$N+}, Turbo Pascal génère les instructions particulières au co-processeur
arithmétique 80x87 ou à son émulateur.
$P : Paramètres chaînes ouverts (Globale)
La directive $P contrôle la signification des paramètres variables déclarés à l'aide du mot-clé
STRING.
Dans l'état $P-, les paramètres variables déclarés à l'aide du mot-clé STRING sont des
paramètres variables normaux, ce qui assure la compatibilité avec les versions antérieures de
Turbo Pascal.
Dans l'état $P+, il s'agit de paramètres chaînes ouverts.
$Q : Test de Débordement (Overflow Checking Switch) (Locale)
Cette directive contrôle la génération de code de test de débordement.
Dans l’état $Q+, certaines fonctions arithmétiques entières (+, -, *, Abs, Sqr, Succ et Pred)
font l'objet d'un test de dépassement de capacité.

DMSI/PROGRAMMATION - 152 -
Annexes

$R : Test Domaines (Range-Checking Switch) (Locale)


Autorise/interdit l'insertion de code de gestion des erreurs de domaine de validité.
Dans l'état $R+,
− tous les tableaux et toutes les expressions indicées sur chaînes sont vérifiés comme
restant dans les limites autorisées;
− toutes les affectations à des variables scalaires et sous-intervalle sont testées comme
restant dans les limites autorisées.
$R+ ne s'applique pas à Inc et à Dec.
$S : Test Débordement Pile (Stack-Overflow Checking Switch) (Locale)
Contrôle l'insertion de code spécial pour prévenir les débordements de pile.
Sous l'effet de {$S+}, le compilateur génère du code supplémentaire pour vérifier l'existence
d'un espace mémoire suffisant pour les variables locales avant chaque entrée dans une
procédure ou une fonction.
$T : Test Types Pointeurs (Type-Checked Pointers Switch) (Locale)
Contrôle les types des pointeurs créés par l'opérateur @ .
$V : Test des Chaînes VAR (Var-String Checking Switch) (Locale)
Sous l'effet de cette option, le compilateur compare la taille des paramètres formels et effectifs
de type chaîne (var type strings).
Sous l'effet de {$V+}, le paramètre formel doit être de même type que celui transmis, sinon
une erreur de compilation survient.
$W : Cadre de pile Windows (Windows Stack Frame Switch) (Locale)
(VALABLE SOUS WINDOWS SEULEMENT) Provoque la génération de code spécial de
prologue et d'épilogue pour les routines à accès far.
$X : Extension de Syntaxe (Extended Syntax Switch) (Globale)
Contrôle l'acceptation des extensions de syntaxe par le compilateur.
Dans l'état {$X+}, les appels de fonction peuvent être utilisés comme des instructions; le
résultat d'une telle fonction peut être laissé à l'abandon.
$Y : Bascule des Informations de référence de symboles (Globale)
(pas dans TPC ni Turbo)
Contrôle la génération des informations de références de symboles.

DMSI/PROGRAMMATION - 153 -
Annexes

Les directives paramètres


$I : Fichiers Inclus (Include File Directive)
Syntaxe : $I nomfichier
Demande au compilateur d'insérer le fichier source spécifié à partir de la ligne actuelle.
Si NomFic n'est pas trouvé dans le répertoire courant, Turbo Pascal recherche dans ceux
indiqués par l'option de ligne de commande /I).
$C : Attributs Segments de Code (Code Segment Attribute) (Windows et mode protégé
seuls)
Contrôle les attributs d'un segment de code.
$D : Directive Description (Windows et mode protégé seuls)
Insère le texte que vous lui spécifiez dans l'entrée de description du module située dans l'en-
tête d'un fichier .EXE ou .DLL.
$G : Directive Groupage segments unités (Group Unit Segments)
(Windows et mode protégé seuls)
Spécifie des groupes d'unités qui doivent être rassemblés par le lieur dans le même segment.
$L : Directive Inclure Fichier .OBJ (Link Object File) (Locale)
Demande au compilateur d'insérer le fichier .OBJ spécifié à partir de la ligne actuelle.
REMARQUES Cette directive $L permet d'incorporer à un module des programmes écrits
en assembleur et contenant des routines externes (EXTERNAL).
Ces fichiers doivent obéir au format objet Intel relogeable (.OBJ).
$M : Directive Tailles Mémoire (Memory Allocation Sizes) (Globale)
Définit les paramètres de pile et de tas d'un programme.
Cf Options|Memory Sizes
$R : Directive Fichiers Ressources (Resource File Directive)
(Windows et mode protégé seuls)
Permet d'indiquer le nom d'un fichier ressources à insérer dans une application ou une
librairie.
REMARQUES L'extension de nom standard pour NomFic est .RES. Il doit s'agir d'un fichier
ressources Windows.
$S : Directive de taille de Segment (Windows et mode protégé seuls)
Spécifie la taille favorite des segments de code qui recevront les unités groupées.

DMSI/PROGRAMMATION - 154 -
Annexes

Compilation Conditionnelle: Directives et Symboles


La compilation conditionnelle est basée sur l'évaluation de symboles conditionnels.

Directive Description
DEFINE définit un symbole conditionnel
Le symbole défini par cette directive reste valable pour toute la suite de la
compilation sauf à partir de la rencontre d'une directive de neutralisation
$UNDEF Nom.
ELSE traite ou ignore la portion de source délimitée
ENDIF marque la fin d'un bloc ouvert par le plus récent $Ifxxx
IFDEF Compile si Nom est défini {$IFDEF Nom}
IFNDEF Compile si Nom n'est pas défini {$IFNDEF Nom}
IFOPT Compile si option de compilation dans l'état (+ ou -) {$IFOPT Option}
UNDEF Annule une définition existante {$UNDEF Nom}

Symbole Description
CPU86 CPU de la famille Intel 80x86
CPU87 Défini si un coprocesseur 80x87 est détecté à la compilation
DPMI Vrai si en mode protégé DOS
MSDOS Vrai si en mode réel (MS-DOS ou PC-DOS)
VER70 Numéro de version de Turbo Pascal
WINDOWS Vrai si sous MS-Windows

DMSI/PROGRAMMATION - 155 -
Annexes

ANNEXE B - MESSAGES ET CODES D'ERREUR

MESSAGES D'ERREUR DU COMPILATEUR :


Si ce genre de message survient dans l'environnement intégré, vous êtes placé dans l'éditeur, à
l'endroit de l'erreur. Dans le cas du compilateur en ligne de commande, le message d'erreur est
affiché ainsi que la ligne du fichier source avec un accent circonflexe pointant l'endroit
incriminé.
MESSAGES D'ERREUR D'EXECUTION :
Le programme se termine en affichant : Runtime error <nnn> at <xxxx:yyyy>
nnn est le code d'erreur et xxxx:yyyy l'adresse de l'erreur.
Ces erreurs sont divisées en quatre groupes :
− les erreurs DOS (1 à 99)
− les erreurs d'entrées/sorties (100 à 149)
− les erreurs critiques (150 à 199)
− les erreurs fatales (200 à 249)

1 : Invalid function number


2 : fichier introuvable
3 : chemin d'accès introuvable
4 : trop de fichiers ouverts simultanément
5 : accès au fichier interdit
6 : identificateur de fichier invalide
12 : code d'accès fichier invalide
15 : numéro d'unité de disque invalide
16 : ne peut supprimer le répertoire courant
17 : ne peut renommer de disque à disque
18 : No more files
100 : erreur disque en lecture
101 : erreur disque en écriture
102 : variable non associée à un fichier
103 : fichier non ouvert
104 : fichier non ouvert en lecture
105 : fichier non ouvert en écriture
106 : format numérique invalide
150 : unité de disque protégée en écriture
151 : unité de disque non reconnue par le système
152 : unité de disque non prête
153 : commande inconnue
154 : erreur d'intégrité des données lues
155 : taille de la structure de communication disque erronée
156 : erreur de positionnement des têtes du disque
157 : type de support magnétique inconnu
158 : secteur non trouvé
159 : erreur imprimante (fin de papier)
160 : erreur d'écriture sur périphérique
DMSI/PROGRAMMATION - 156 -
Annexes
161 : erreur de lecture sur périphérique
162 : erreur liée au matériel
200 : division par zéro
201 : erreur de dépassement d'intervalle
202 : débordement de pile
203 : débordement du segment de tas
204 : opération sur pointeur invalide
205 : débordement en virgule flottante
206 : débordement inverse en virgule flottante
207 : opération en virgule flottante invalide
208 : gestionnaire de recouvrements de partiels non installé
209 : erreur de lecture du fichier de recouvrement des partiels
210 : Object not initialized
211 : Call to abstract method
212 : Stream registration error
213 : Collection index out of range
214 : Collection overflow error
215 : Arithmetic overflow error
216 : General Protection fault

DMSI/PROGRAMMATION - 157 -
Annexes

ANNEXE C - TABLE ASCII


D H Ctrl Mmen D H Ctrl Mmen
0 00 ^ NUL 16 10 ^P DLE
1 01 ^A SOH 17 11 ^Q DC1
2 02 ^B STX 18 12 ^R DC2
3 03 ^C ETX 19 13 ^S DC3
4 04 ^D EOT 20 14 ^T DC4
5 05 ^E ENQ 21 15 ^U NAK
6 06 ^F ACK 22 16 ^V SYN
7 07 ^G BEL 23 17 ^W ETB
8 08 ^H BS 24 18 ^X CAN
9 09 ^I HT 25 19 ^Y EM
10 0A ^J LF 26 1A ^Z SUB
11 0B ^K VT 27 1B ^[ ESC
12 0C ^L FF 28 1C ^\ FS
13 0D ^M CR 29 1D ^] GS
14 0E ^N SO 30 1E ^^ RS
15 0F ^O SI 31 1F ^_ US

D H Ch D H C D H C D H C D H C D H C D H Ch
h h h h h
32 20 SP 64 40 @ 96 60 ` 128 80 Ç 160 A0 á 192 C0 └ 224 E0 α
33 21 ! 65 41 A 97 61 a 129 81 ü 161 A1 í 193 C1 ┴ 225 E1 β
34 22 " 66 42 B 98 62 b 130 82 é 162 A2 ó 194 C2 ┬ 226 E2 τ
35 23 # 67 43 C 99 63 c 131 83 â 163 A3 ú 195 C3 ├ 227 E3 л
36 24 $ 68 44 D 100 64 d 132 84 ä 164 A4 ñ 196 C4 ─ 228 E4 ∑
37 25 % 69 45 E 101 65 e 133 85 à 165 A5 Ñ 197 C5 ┼ 229 E5 σ
38 26 & 70 46 F 102 66 f 134 86 å 166 A6 ª 198 C6 ╞ 230 E6 μ
39 27 ' 71 47 G 103 67 g 135 87 ç 167 A7 º 199 C7 ╟ 231 E7 τ
40 28 ( 72 48 H 104 68 h 136 88 ê 168 A8 ¿ 200 C8 ╚ 232 E8 φ
41 29 ) 73 49 I 105 69 i 137 89 ë 169 A9 ¬ 201 C9 ╔ 233 E9 Θ
42 2A * 74 4A J 106 6A j 138 8A è 170 AA ¬ 202 CA ╩ 234 EA Ω
43 2B + 75 4B K 107 6B k 139 8B ï 171 AB ½ 203 CB ╦ 235 EB δ
44 2C , 76 4C L 108 6C l 140 8C î 172 AC ¼ 204 CC ╠ 236 EC ∞
45 2D - 77 4D M 109 6D m 141 8D ì 173 AD ¡ 205 CD ═ 237 ED Ø
46 2E . 78 4E N 110 6E n 142 8E Ä 174 AE « 206 CE ╬ 238 EE ε
47 2F / 79 4F O 111 6F o 143 8F Å 175 AF » 207 CF ╧ 239 EF ∩
48 30 0 80 50 P 112 70 p 144 90 É 176 B0 ░ 208 D0 ╨ 240 F0 ≡
49 31 1 81 51 Q 113 71 q 145 91 æ 177 B1 ▒ 209 D1 ╤ 241 F1 ±
50 32 2 82 52 R 114 72 r 146 92 Æ 178 B2 ▓ 210 D2 ╥ 242 F2 ≤
51 33 3 83 53 S 115 73 s 147 93 ô 179 B3 │ 211 D3 ╙ 243 F3 ≥
52 34 4 84 54 T 116 74 t 148 94 ö 180 B4 ┤ 212 D4 ╘ 244 F4 ⌠
53 35 5 85 55 U 117 75 u 149 95 ò 181 B5 ╡ 213 D5 ╒ 245 F5 ⌡
54 36 6 86 56 V 118 76 v 150 96 û 182 B6 ╢ 214 D6 ╓ 246 F6 ÷
55 37 7 87 57 W 119 77 w 151 97 ù 183 B7 ╖ 215 D7 ╫ 247 F7 ≈
56 38 8 88 58 X 120 78 x 152 98 ÿ 184 B8 ╕ 216 D8 ╪ 248 F8 °
57 39 9 89 59 Y 121 79 y 153 99 Ö 185 B9 ╣ 217 D9 ┘ 249 F9 ·
58 3A : 90 5A Z 122 7A z 154 9A Ü 186 BA ║ 218 DA ┌ 250 FA ·
59 3B ; 91 5B [ 123 7B { 155 9B ¢ 187 BB ╗ 219 DB █ 251 FB √
60 3C < 92 5C \ 124 7C | 156 9C £ 188 BC ╝ 220 DC ▄ 252 FC ⁿ
61 3D = 93 5D ] 125 7D } 157 9D ¥ 189 BD ╜ 221 DD ▌ 253 FD ²
62 3E > 94 5E ^ 126 7E ~ 158 9E P 190 BE ╛ 222 DE ▐ 254 FE ■
63 3F ? 95 5F _ 127 7F 159 9F ƒ 191 BF ┐ 223 DF ▀ 255 FF

DMSI/PROGRAMMATION - 158 -
Annexes

ANNEXE D - CODES RETOURNES PAR LE CLAVIER


Les touches de fonction et les touches combinées avec Alt, Ctrl génèrent des codes étendus.
Un code étendu se compose de deux caractères dont le premier est égal au caractère NUL
(valeur ASCII zéro) et le second correspond au code de touche étendu.

La table suivante présente la liste des codes de touches étendus.

Second Octet Signification


3 NUL
15 Shift Tab
16-25 Séquences Alt A,Z,E,R,T,Y,U,I,O,P
30-39 Séquences Alt Q,S,D,F,G,H,J,K,L,M
44-49 Séquences Alt W,X,C,V,B,N
59-68 F1 à F10
71 Home
72 UpArrow
73 PgUp
75 LeftArrow
77 RightArrow
79 End
80 DownArrow
81 PgDn
82 Ins
83 Del
84-93 Shift F1 à Shift F10 (F11 à F20)
94-103 Ctrl F1 à Ctrl F10 (F21 à F30)
104-113 Alt F1 à Alt F10 (F31 à F40)
114 Ctrl PrtScr
115 Ctrl LeftArrow
116 Ctrl RightArrow
117 Ctrl End
118 Ctrl PgDn
119 Ctrl Home
120-131 Séquences Alt 1,2,3,4,5,6,7,8,9,0,),-
132 Ctrl PgUp
133 F11
134 F12
135 Shift F11
136 Shift F12
137 Ctrl F11
138 Ctrl F12
139 Alt F11
140 Alt F12

DMSI/PROGRAMMATION - 159 -
Annexes

BIBLIOGRAPHIE
− Manuels de TURBO PASCAL (Versions 5 à 7.01)
BORLAND INTL – BORLAND INPRISE
− Le Langage PASCAL
E N S T Br R. OGOR
− PASCAL USER MANUAL AND REPORT
JENSEN & WIRTH
− Cours PASCAL
ESE
− Le PASCAL par la pratique LE BEUX et TAVERNIER
Editions SYBEX

DMSI/PROGRAMMATION - 160 -
Annexes

Index

DMSI/PROGRAMMATION - 161 -
I CARACTERISTIQUES PRINCIPALES DU LANGAGE PASCAL...................................................................................1
Caractéristiques principales du langage Pascal......................................................................................................................1
I.1 LE LANGAGE PASCAL...................................................................................................................1
PASCAL est un langage de programmation de haut niveau développé à l'origine par le Professeur Niklaus WIRTH à
ZURICH dans les années 1970................................................................................................................................................1
PASCAL est un langage universel..........................................................................................................................................1
Il dérive du langage de programmation ALGOL...................................................................................................................1
Son champ d'application est complet : problèmes scientifiques, problèmes de gestion, problèmes de traitement de textes
etc..............................................................................................................................................................................................1
PASCAL est un langage structuré. ........................................................................................................................................1
Le professeur WIRTH a conçu le langage PASCAL comme une aide à l'enseignement d'une approche systématique de
la programmation des ordinateurs. Cette approche est connue sous le terme de programmation structurée........................1
PASCAL est reconnu aujourd'hui comme l'un des langages les plus performants que ce soit en programmation
professionnelle, éducative ou personnelle...............................................................................................................................1
I.2 LE TURBO PASCAL........................................................................................................................1
TURBO PASCAL suit de près la définition du PASCAL STANDARD telle qu'elle a été publiée par JENSEN et
WIRTH dans Pascal User Manual and Report........................................................................................................................1
Dans les mains d'un programmeur expérimenté, il devient un outil de développement très efficace en procurant des
temps d'exécution et de compilation très courts......................................................................................................................1
Avertissement : les renseignements contenus dans ce document se rapportent au TURBO PASCAL Version 7.0
(BORLAND International Inc)................................................................................................................................................1
DMSI/PROGRAMMATION - 161 -.......................................................................................................................................1
II ELEMENTS DE BASE DU LANGAGE.............................................................................................................................2
Elements de base du langage..................................................................................................................................................2
II.1 LES SYMBOLES DE BASE............................................................................................................2
Le vocabulaire de base du TURBO PASCAL est composé de lettres, de chiffres, et de symboles spéciaux:.....................2
II.1.1 LETTRES.......................................................................................................................................2
A..Z, a..z Aucune lettre accentuée sauf dans les commentaires............................................................................................2
II.1.2 CHIFFRES.....................................................................................................................................2
0..9 ..........................................................................................................................................................................................2
0..9 et les lettres A..F ou a..f pour les chiffres hexadécimaux...............................................................................................2
II.1.3 SYMBOLES SPECIAUX..............................................................................................................2
+ - * / = ^ < > ( ) [ ] { } . : ; ' # $ @........................................................................................................................................2
Aucune distinction n'est faite entre les minuscules et les majuscules. Certains opérateurs et délimiteurs sont construits
avec deux symboles spéciaux...................................................................................................................................................2
Opérateur d'affectation :=.......................................................................................................................................................2
Opérateur relationnel = <> < <= >= >....................................................................................................................................2
Délimiteur de sous-ensemble .................................................................................................................................................2
Parenthèses et crochets (. .) ou [ ]...........................................................................................................................................2
Commentaires (* *) ou { }....................................................................................................................................................2
II.1.4 MOTS RESERVES........................................................................................................................2
Les mots réservés font partie intégrante de TURBO PASCAL. Ils ne peuvent pas être définis à nouveau et ne peuvent
donc pas être utilisés comme des identificateurs définis par l'utilisateur...............................................................................2
and............................................................................................................................................................................................2
end............................................................................................................................................................................................2
nil.............................................................................................................................................................................................2
shr.............................................................................................................................................................................................2
array.........................................................................................................................................................................................2
file............................................................................................................................................................................................2
not............................................................................................................................................................................................2
string........................................................................................................................................................................................2
asm...........................................................................................................................................................................................2
for.............................................................................................................................................................................................2
object........................................................................................................................................................................................2
then...........................................................................................................................................................................................2
begin.........................................................................................................................................................................................2
function....................................................................................................................................................................................2
of..............................................................................................................................................................................................2
to..............................................................................................................................................................................................2
case...........................................................................................................................................................................................2
goto..........................................................................................................................................................................................2
or..............................................................................................................................................................................................2
type...........................................................................................................................................................................................2
const.........................................................................................................................................................................................2
if...............................................................................................................................................................................................2
packed......................................................................................................................................................................................2
unit...........................................................................................................................................................................................2
constructor...............................................................................................................................................................................2
implementation........................................................................................................................................................................2
procedure.................................................................................................................................................................................2
until..........................................................................................................................................................................................2
destructor.................................................................................................................................................................................2
in..............................................................................................................................................................................................2
program....................................................................................................................................................................................2
uses...........................................................................................................................................................................................2
div............................................................................................................................................................................................2
inline........................................................................................................................................................................................2
record.......................................................................................................................................................................................2
var............................................................................................................................................................................................2
do..............................................................................................................................................................................................2
interface...................................................................................................................................................................................2
repeat........................................................................................................................................................................................2
while.........................................................................................................................................................................................2
downto.....................................................................................................................................................................................2
label..........................................................................................................................................................................................2
set.............................................................................................................................................................................................2
with..........................................................................................................................................................................................2
else...........................................................................................................................................................................................2
mod..........................................................................................................................................................................................2
shl.............................................................................................................................................................................................2
xor............................................................................................................................................................................................2
Les mots suivants constituent des directives de compilation. Ils peuvent donc être redéfinis par l'utilisateur, bien que
cela ne soit pas conseillé..........................................................................................................................................................2
DMSI/PROGRAMMATION - 161 -.......................................................................................................................................2
absolute....................................................................................................................................................................................3
far.............................................................................................................................................................................................3
near...........................................................................................................................................................................................3
assembler.................................................................................................................................................................................3
forward.....................................................................................................................................................................................3
private......................................................................................................................................................................................3
external....................................................................................................................................................................................3
interrupt....................................................................................................................................................................................3
virtual.......................................................................................................................................................................................3
Les identificateurs prédéfinis tels que les identificateurs de constantes (Ex : PI), de type (Ex : INTEGER), de variables
(Ex : MEM), de procédures (Ex : RESET) ou de fonctions (Ex : SIN) standard peuvent également être redéfinis par
l'utilisateur................................................................................................................................................................................3
II.2 LES DELIMITEURS........................................................................................................................3
Les éléments du langage doivent être séparés par au moins un des délimiteurs suivants : un espace, une fin de ligne, ou
un commentaire en observant les restrictions suivantes:.........................................................................................................3
Il ne peut pas y avoir de séparateurs à l'intérieur d'un identificateur, d'un nombre, ou d'un symbole.................................3
Il doit y avoir au moins un séparateur entre deux identificateurs, deux nombres ou deux mots réservés consécutifs........3
II.3 LES LIGNES DE PROGRAMME...................................................................................................3
La longueur maximum d'une ligne de programme est 126 caractères. Tout caractère au-delà du 126ème sera ignoré du
compilateur bien que l'éditeur autorise 249 (voire 1024) caractères par ligne.......................................................................3
................................................................................................................................................................................................3
III LES TYPES DE DONNEES...............................................................................................................................................4
Un type de données définit l'ensemble des valeurs qu'une variable peut prendre. Chaque variable dans un programme
doit être associée à un et un seul type de données. Bien que les types de données puissent être très complexes, ils sont
tous construits à partir de types simples (non structurés)........................................................................................................4
Les huit types fondamentaux se regroupent en trois classes:.................................................................................................4
La classe des types simples comprend les types scalaires (entiers, booléen, caractère, énuméré, intervalle) et les types
réels (réel, simple, double, étendu, composite).......................................................................................................................4
La classe des types structurés comprend le type chaîne de caractères, le type tableau, le type enregistrement, le type
ensemble et les types fichiers...................................................................................................................................................4
La classe du type pointeur.......................................................................................................................................................4
III.1 LES TYPES SIMPLES...................................................................................................................4
Un type simple peut être défini par le programmeur (type scalaire déclaré), l'un des types scalaires standard : integer
(entier), boolean (booléen), char (caractère) ou byte (octet), un type réel.............................................................................4
III.1.1 LES TYPES SCALAIRES...........................................................................................................4
Ces types sont caractérisés par quatre propriétés :.................................................................................................................4
Les valeurs possibles d'un type scalaire forment un ensemble ordonné; à chaque valeur est associé un rang (0 pour la
première valeur sauf pour les entiers)......................................................................................................................................4
La fonction standard ORD, qui retourne le rang de la valeur peut être utilisée....................................................................4
La fonction standard PRED, qui retourne la valeur précédant la valeur spécifiée peut être utilisée. PRED indique une
erreur si elle est appelée avec la première valeur du type......................................................................................................4
La fonction standard SUCC, qui retourne la valeur succédant la valeur spécifiée peut être utilisée. SUCC indique une
erreur si elle est appelée avec la dernière valeur du type........................................................................................................4
La syntaxe d'un type scalaire est la suivante :........................................................................................................................4
DMSI/PROGRAMMATION - 161 -.......................................................................................................................................4
Les types de données...............................................................................................................................................................4
Type.........................................................................................................................................................................................6
Portée.......................................................................................................................................................................................6
Format......................................................................................................................................................................................6
entier court SHORTINT..........................................................................................................................................................6
entier INTEGER......................................................................................................................................................................6
entier long LONGINT.............................................................................................................................................................6
octet BYTE..............................................................................................................................................................................6
mot WORD..............................................................................................................................................................................6
-128..127..................................................................................................................................................................................6
-32768..32767..........................................................................................................................................................................6
-2147483648..2147483647......................................................................................................................................................6
0..255.......................................................................................................................................................................................6
0..65535...................................................................................................................................................................................6
8 bits signé..............................................................................................................................................................................6
16 bits signé............................................................................................................................................................................6
32 bits signé............................................................................................................................................................................6
8 bits non signé.......................................................................................................................................................................6
16 bits non signé.....................................................................................................................................................................6
Remarque : Les dépassements de capacité dans les opérations arithmétiques ne sont pas détectés. En particulier, les
résultats partiels dans les expressions entières doivent être compris dans l'échelle du type considéré.................................6
Une valeur booléenne peut avoir l'une des deux valeurs logiques vrai ou faux (True ou False). Elle sera définie telle que
False < True..............................................................................................................................................................................6
Une variable BOOLEAN occupe un octet en mémoire.........................................................................................................6
FALSE < TRUE......................................................................................................................................................................6
ORD ( FALSE ) = 0..............................................................................................................................................................6
ORD ( TRUE ) = 1................................................................................................................................................................6
SUCC (FALSE ) = TRUE.....................................................................................................................................................6
PRED ( TRUE ) = FALSE....................................................................................................................................................6
PRED ( FALSE ) renvoie une erreur....................................................................................................................................6
Une valeur de type caractère est un élément de l'ensemble des caractères du code ASCII (voir annexe C). Les valeurs
ordinales des caractères ASCII vont de 0 à 255. Une variable CHAR occupe un octet en mémoire....................................6
Les types énumérés permettent de définir des ensembles ordonnés de valeurs en énumérant les identificateurs qui
représentent ces valeurs............................................................................................................................................................6
Le type intervalle est une portion de l'intervalle de valeurs d'un type scalaire, qui est appelé le type hôte. La définition
du type intervalle consiste en la spécification des deux bornes (min et max) de l'intervalle................................................8
Les deux constantes doivent être du même type scalaire et telles que min < max. Une variable de type intervalle hérite
de toutes les propriétés du type hôte, mais lors de l'exécution, sa valeur doit rester dans l'intervalle défini........................8
Nota : Le type SCALAIRE ENUMERE et le type INTERVALLE seront étudiés plus en détail dans le chapitre VIII.....8
III.1.2 LES TYPES REELS.....................................................................................................................8
Il existe cinq variantes du type réel : réel (REAL), simple(SINGLE), double (DOUBLE), étendu (EXTENDED) et
compatible (COMP).................................................................................................................................................................8
Turbo Pascal accepte deux modèles de génération de code à virgule flottante :..................................................................8
Calculs flottants par logiciel {$N-}........................................................................................................................................8
Calculs flottants par matériel 80x87 {$N+}...........................................................................................................................8
La directive $N permet de passer d’un mode à l’autre..........................................................................................................8
Voir également la directive $E qui active ou inhibe la liaison du code avec les routines de la librairie d'émulation pour
le calcul des flottants (émulateur de 80x87)............................................................................................................................8
Type.........................................................................................................................................................................................8
Portée.......................................................................................................................................................................................8
Précision..................................................................................................................................................................................8
Taille........................................................................................................................................................................................8
Réel REAL..............................................................................................................................................................................8
Simple SINGLE.......................................................................................................................................................................8
Double DOUBLE....................................................................................................................................................................8
Etendu EXTENDED...............................................................................................................................................................8
Compatible COMP..................................................................................................................................................................8
2.9 * 10-39 .. 1.7 * 1038.........................................................................................................................................................8
1.5 * 10-45 .. 3.4 * 1038.........................................................................................................................................................8
5.0 * 10-324 .. 1.7 * 10308.....................................................................................................................................................8
1.9 * 10-4951 .. 1.1 * 104932.................................................................................................................................................8
-9.2*1018.. 9.2*1018...............................................................................................................................................................8
11-12........................................................................................................................................................................................8
7-8............................................................................................................................................................................................8
15-16........................................................................................................................................................................................8
19-20........................................................................................................................................................................................8
19-20........................................................................................................................................................................................8
6 octets.....................................................................................................................................................................................8
4 octets.....................................................................................................................................................................................8
8 octets.....................................................................................................................................................................................8
10 octets...................................................................................................................................................................................8
8 octets.....................................................................................................................................................................................8
Remarque : le type COMP ne peut recevoir que des valeurs entières (de –263 à 263-1).....................................................8
Le dépassement de capacité pendant une opération arithmétique impliquant des réels provoque l'arrêt du programme et
l'affichage d'un message d'erreur.............................................................................................................................................8
Différences entre les réels et les autres types simples :..........................................................................................................8
Les fonctions PRED, SUCC et ORD ne peuvent pas avoir d'arguments réels. Les réels ne peuvent pas être utilisés pour
l'indexation des tableaux, pour définir le type de base d'un ensemble, dans les instructions For et Case. Les intervalles de
type réel ne sont pas autorisés..................................................................................................................................................8
III.1.3 AUTRES TYPES..........................................................................................................................8
Le type Chaîne de caractères, les types structurés et le type Pointeur feront l'objet des chapitres IX, X, XI, XII, XIV et
XVIII.........................................................................................................................................................................................8
III.2 IDENTITE ET COMPATIBILITE DE TYPES..............................................................................9
III.2.1 IDENTITE DE TYPE...................................................................................................................9
L'identité de type n'est requise qu'entre les paramètres effectifs et formels des procédures et fonctions (cf Chapitre VII).
...................................................................................................................................................................................................9
Deux types T1 et T2 sont identiques si...................................................................................................................................9
T1 et T2 représentent le même identificateur de type ou.......................................................................................................9
T1 est déclaré équivalent à un type identique à T2................................................................................................................9
Deux variables déclarées dans la même déclaration sont de type identique.........................................................................9
EXEMPLES :..........................................................................................................................................................................9
T1 = Integer ;...........................................................................................................................................................................9
T2 = T1 ;..................................................................................................................................................................................9
T1 et T2 sont de type identique..............................................................................................................................................9
T3 = Set Of Char ;...................................................................................................................................................................9
T4 = Set Of Char;....................................................................................................................................................................9
T3 et T4 ne sont pas deux types identiques car Set Of Char n'est pas un identificateur de type..........................................9
V1, V2 : Set Of Char ;.............................................................................................................................................................9
V1 et V2 sont de type identique..............................................................................................................................................9
III.2.2 COMPATIBILITE DE TYPES....................................................................................................9
La compatibilité entre deux types est parfois nécessaire dans les expressions et opérations relationnelles........................9
Il y a compatibilité de types lorsque au moins une des conditions suivantes est vérifiée :..................................................9
Les deux types sont identiques................................................................................................................................................9
Les deux types sont du type réel.............................................................................................................................................9
Les deux types sont du type entier..........................................................................................................................................9
Un des types est un sous-intervalle de l'autre.........................................................................................................................9
Les deux types sont des sous-intervalles du même type hôte................................................................................................9
Les deux types sont des types ensemble avec des types de base compatibles......................................................................9
Les deux types sont des types chaîne de caractères compactée ayant le même nombre de composants ............................9
Un des types est une chaîne de caractères et l'autre une chaîne de caractères, une chaîne de caractères compactée ou un
caractère....................................................................................................................................................................................9
Les deux types sont de type pointeur......................................................................................................................................9
Les deux types sont du type sous-programme avec un même type pour la valeur renvoyée, le même nombre de
paramètres et le type de chacun de ceux-ci est identique un à un..........................................................................................9
III.2.3 COMPATIBILITE AU NIVEAU DES AFFECTATIONS.......................................................10
La compatibilité au niveau des affectations est nécessaire lors d'une affectation ou d'un passage de paramètres par
valeur......................................................................................................................................................................................10
Un type T2 est compatible au niveau des affectations avec un type T1 (c'est-à-dire T1 := T2 est autorisée) si l'une des
assertions suivantes est vraie :................................................................................................................................................10
T1 et T2 sont de type identique (sauf type fichier ou type structuré ayant un type fichier comme composant)...............10
T1 et T2 sont des type scalaires compatibles et les valeurs de T2 sont contenues dans l'intervalle des valeurs autorisées
de T1.......................................................................................................................................................................................10
T1 et T2 sont des types réels et les valeurs de T2 sont contenues dans l'intervalle des valeurs autorisées de T1.............10
T1 est un type réel et T2 est un type entier..........................................................................................................................10
T1 et T2 sont des types chaînes de caractères......................................................................................................................10
T1 est un type chaîne de caractères et T2 est un type caractère..........................................................................................10
T1 est un type chaîne et T2 est un type chaîne compactée de caractères............................................................................10
T1 et T2 sont des type compatibles chaînes compactées de caractères...............................................................................10
T1 et T2 sont des types ensembles compatibles, tous les membres de T2 étant compris dans l'intervalle des valeurs
autorisées de T1......................................................................................................................................................................10
T1 et T2 sont des types pointeurs compatibles.....................................................................................................................10
T1 et T2 sont des types sous-programme compatibles.........................................................................................................10
T1 est un type sous-programme et T2 un sous-programme ayant le même type de résultat, le même nombre de
paramètres et le type de chacun de ceux-ci est identique un à un........................................................................................10
IV ELEMENTS DU LANGAGE DEFINIS PAR L'UTILISATEUR...................................................................................11
IV.1 IDENTIFICATEURS....................................................................................................................11
Les identificateurs sont des noms utilisés pour marquer:.....................................................................................................11
des étiquettes.........................................................................................................................................................................11
des constantes........................................................................................................................................................................11
des types de données.............................................................................................................................................................11
des variables..........................................................................................................................................................................11
des procédures ou des fonctions............................................................................................................................................11
Ils sont formés de lettres et de chiffres, mais doivent commencer obligatoirement par une lettre ou le caractère
Underscore (souligné). Leur longueur est limitée par la longueur de la ligne (126 caractères). En fait, seuls les 63
premiers caractères seront pris en compte par le compilateur. Il n'y a pas de distinction entre majuscules et minuscules.
.................................................................................................................................................................................................11
La syntaxe est la suivante :...................................................................................................................................................11
IV.2 NOMBRES....................................................................................................................................11
Les nombres sont des constantes de type entier ou de type réel. Les constantes entières sont des nombres entiers
exprimés soit en décimal soit en hexadécimal. Les constantes hexa- décimales sont précédées par le signe $ et
l'intervalle est de $0000 à $FFFF. La syntaxe est la suivante :.............................................................................................11
IV.3 CHAINES......................................................................................................................................11
Une constante chaîne est une suite de caractères inclus entre deux apostrophes '..............................................................11
Une apostrophe peut être comprise dans une chaîne en écrivant deux apostrophes successives. Les chaînes contenant un
seul caractère sont du type char. Une chaîne étant assimilable à un type tableau, les caractères sont accessibles comme
les éléments d'un tableau. ......................................................................................................................................................11
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................11
IV.4 CARACTERES DE CONTROLE.................................................................................................12
Elements du langage définis par l’utilisateur.......................................................................................................................11
TURBO PASCAL permet d'inclure des caractères de contrôle dans les chaînes...............................................................12
Deux notations sont possibles :.............................................................................................................................................12
Le signe # suivi d'une constante entière dans l'intervalle 0..255, dénote un caractère ayant la valeur ASCII
correspondante........................................................................................................................................................................12
Le symbole ^ suivi d'un caractère, dénote le caractère de contrôle correspondant.............................................................12
Exemples :.............................................................................................................................................................................12
#10.........................................................................................................................................................................................12
ASCII 10................................................................................................................................................................................12
Line Feed...............................................................................................................................................................................12
#$1B.......................................................................................................................................................................................12
ASCII 1B hex........................................................................................................................................................................12
Escape .................................................................................................................................................................................12
^G...........................................................................................................................................................................................12
Control-G...............................................................................................................................................................................12
Bell.........................................................................................................................................................................................12
Les séquences de caractères de contrôle peuvent être concaténées en chaînes, en les écrivant sans séparateur...............12
IV.5 COMMENTAIRES.......................................................................................................................12
Un commentaire peut être inséré n'importe où dans un programme où un délimiteur est autorisé. ..................................12
Les délimiteurs de commentaire sont:..................................................................................................................................12
(* et *)..................................................................................................................................................................................12
ou...........................................................................................................................................................................................12
{ et }..................................................................................................................................................................................12
Les accolades ne peuvent pas être imbriquées à l'intérieur d'autres accolades (de même pour les séquences (* *) ).
Cependant, les accolades peuvent être imbriquées à l'intérieur des parenthèses et vice-versa............................................12
IV.6 OPTIONS ET DIRECTIVES DE COMPILATION.....................................................................12
Certaines caractéristiques du compilateur de TURBO PASCAL sont contrôlées par des directives de compilation qui
seront spécifiées comme les commentaires avec une syntaxe spéciale................................................................................12
Une directive de compilation est constituée de la séquence { ou (* suivie immédiatement du signe $, suivi
immédiatement par une directive de compilation et se termine par } ou *)........................................................................12
Les options et les directives de compilation seront présentées en annexe A.
.................................................................................................................................................................................................12
V STRUCTURE DE BASE D'UN PROGRAMME PASCAL..............................................................................................13
Un programme PASCAL a la structure suivante :...............................................................................................................13
Le bloc est divisé en une partie DECLARATION dans laquelle sont définis tous les objets locaux au programme et une
partie INSTRUCTIONS qui spécifie les actions à exécuter sur ces objets..........................................................................13
V.1 EN-TETE de PROGRAMME.........................................................................................................13
Dans TURBO-PASCAL, l'en-tête est facultative. Sa syntaxe est la suivante:....................................................................13
EXEMPLES :........................................................................................................................................................................13
Program circles;.....................................................................................................................................................................13
Program accountant(Input,Output);......................................................................................................................................13
V.2 CLAUSE USES..............................................................................................................................13
La clause USES permet d'indiquer le nom de toutes les unités que le programme utilise (voir Chapitre XVI pour la
description des unités standards). La syntaxe est la suivante :.............................................................................................13
..............................................................................................................................................................................................13
L'unité SYSTEM est toujours référencée de manière implicite par le compilateur............................................................13
V.3 STRUCTURE D'UN BLOC...........................................................................................................14
La syntaxe d'un bloc est la suivante:....................................................................................................................................14
V.4 PARTIE DECLARATION.............................................................................................................15
La partie DECLARATION est divisée en cinq sections différentes:..................................................................................15
Déclaration des étiquettes.....................................................................................................................................................15
Définition des constantes......................................................................................................................................................15
Définition des types...............................................................................................................................................................15
Déclaration des variables......................................................................................................................................................15
Déclaration des procédures et des fonctions.........................................................................................................................15
Remarque : le TURBO PASCAL permet à chacune de ces sections d'apparaître plusieurs fois et dans n'importe quel
ordre alors que le PASCAL STANDARD spécifie que chaque section ne doit apparaître que zéro ou une fois dans l'ordre
ci-dessus..................................................................................................................................................................................15
V.4.1 REGLE D'ORDONNANCEMENT.............................................................................................15
Toutes les déclarations créent de nouveaux objets à partir d'objets pré-définis ou d'objets déjà créés, dans tous les cas,
un identificateur d'objet doit être déclaré avant son utilisation............................................................................................15
V.4.2 DECLARATION DES ETIQUETTES.......................................................................................15
Toute instruction dans un programme peut être précédée par une étiquette permettant ainsi un branchement direct par
l'instruction GOTO. Une étiquette est constituée par un nom d'étiquette suivi par le signe :. Le mot réservé LABEL
commence cette déclaration...................................................................................................................................................15
EXEMPLE :...........................................................................................................................................................................15
label 10, error, 999;..............................................................................................................................................................15
Remarques :...........................................................................................................................................................................15
En PASCAL STANDARD, les étiquettes sont limitées à des nombres de 1 à 4 chiffres...................................................15
L'emploi de l'instruction GOTO est contraire à l'esprit de la programmation structurée. Aussi, en règle générale, on
évite son utilisation.................................................................................................................................................................15
V.4.3 DEFINITION DES CONSTANTES...........................................................................................16
Dans la partie Déclaration des Constantes, on introduit des identificateurs comme synonymes pour des valeurs
constantes. Le mot réservé CONST commence cette déclaration. La syntaxe des constantes est la suivante :.................16
Remarque : les constantes suivantes sont pré-définies en TURBO PASCAL ...................................................................16
NOM......................................................................................................................................................................................16
TYPE ...........................................................................................................................................................................16
VALEUR...............................................................................................................................................................................16
False ........................................................................................................................................................................16
Boolean ..........................................................................................................................................................................16
False.......................................................................................................................................................................................16
True .........................................................................................................................................................................16
Boolean .......................................................................................................................................................................16
True........................................................................................................................................................................................16
MaxInt .........................................................................................................................................................................16
Integer ........................................................................................................................................................................16
32767.....................................................................................................................................................................................16
V.4.4 DEFINITION DES TYPES.........................................................................................................16
Un type de données peut être décrit directement dans la partie Déclaration des Variables ou référencé par un
identificateur de type. Le mot réservé TYPE commence la définition des types et il est suivi par une ou plusieurs
affectations séparées par des ;. Chaque affectation de type est constituée d'un identificateur de type suivi du signe = et
d'un type..................................................................................................................................................................................16
La syntaxe des types est la suivante:....................................................................................................................................16
TYPE.....................................................................................................................................................................................17
EXEMPLES :........................................................................................................................................................................17
Type......................................................................................................................................................................................17
Number = Integer;.............................................................................................................................................................17
Day = (mon,tue,wed,thu,fri,sat,sun);.................................................................................................................................17
List = Array[1..20] of real; ................................................................................................................................................17
V.4.5 DECLARATION DES VARIABLES.........................................................................................18
Chaque variable survenant dans un programme doit être déclarée avant son emploi. La déclaration doit strictement
précéder tout emploi de cette variable de façon que le compilateur reconnaisse celle-ci...................................................18
Une déclaration de variable commence par le mot réservé VAR suivi d'un ou plusieurs identificateurs séparés par des
virgules, suivi du signe : et d'un type.....................................................................................................................................18
Remarque : la portée de cet identificateur est le bloc dans lequel elle est définie, et tout bloc à l'intérieur de celui-ci. La
syntaxe des variables est la suivante :....................................................................................................................................18
Une variable peut être déclarée de manière à résider à une adresse mémoire spécifique, elle est alors désignée variable
absolue....................................................................................................................................................................................18
Remarque : la liste de déclaration d'une variable absolute ne peut concerner plus d'un identificateur..............................18
EXEMPLES :........................................................................................................................................................................18
VAR......................................................................................................................................................................................18
Resultat, Calcul, Moyenne : Real;......................................................................................................................................18
I, J, K, L : Integer;...............................................................................................................................................................18
Buffer : Array[0..127] of Byte;...........................................................................................................................................18
ModeEcran : Byte Absolute $0040:$0049;........................................................................................................................18
Chaine : String[15];.............................................................................................................................................................18
Longueur : Byte Absolute chaine;......................................................................................................................................18
{ = longueur dynamique de la chaîne }.............................................................................................................................18
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................13
V.4.6 DECLARATION DES PROCEDURES ET DES FONCTIONS...............................................19
Structure de base d’un programme Pascal............................................................................................................................13
Une déclaration de procédure permet de définir une procédure à l'intérieur d'une autre procédure ou d'un programme.
Une procédure est activée par un appel de procédure, et à la fin de son exécution le programme continue avec
l'instruction suivant immédiatement l'appel de la procédure................................................................................................19
Une déclaration de fonction permet de définir une partie du programme calculant et retournant une valeur. Une fonction
est activée lorsque son identificateur est rencontré dans une expression.............................................................................19
EXEMPLES :........................................................................................................................................................................19
Déclarations..........................................................................................................................................................................19
Procedure essai1;.................................................................................................................................................................19
Begin....................................................................................................................................................................................19
............................................................................................................................................................................................19
............................................................................................................................................................................................19
End;......................................................................................................................................................................................19
Function essai2:integer;......................................................................................................................................................19
Begin....................................................................................................................................................................................19
............................................................................................................................................................................................19
............................................................................................................................................................................................19
End;......................................................................................................................................................................................19
Activations............................................................................................................................................................................19
Program essai;.....................................................................................................................................................................19
Var.......................................................................................................................................................................................19
resultat : integer;.............................................................................................................................................................19
Begin....................................................................................................................................................................................19
............................................................................................................................................................................................19
............................................................................................................................................................................................19
essai1;.................................................................................................................................................................................19
............................................................................................................................................................................................19
............................................................................................................................................................................................19
resultat := essai2;................................................................................................................................................................19
............................................................................................................................................................................................19
End.......................................................................................................................................................................................19
Remarques : La partie concernant les procédures et les fonctions sera détaillée au cours du chapitre XIV......................19
V.5 PARTIE INSTRUCTION...............................................................................................................19
La partie INSTRUCTION est la dernière partie d'un Bloc, elle spécifie les actions à exécuter par le programme. La
partie instruction prend la forme d'une séquence d'instructions suivie d'un point ou d'un point virgule............................19
Une séquence d'instructions est constituée du mot réservé Begin, suivi par une liste d'instructions séparées par des
points virgules et se termine par le mot réservé End.............................................................................................................19
VI LES EXPRESSIONS.........................................................................................................................................................20
Les expressions sont des constructions algorithmiques spécifiant les règles pour le calcul de valeurs. Elles sont
constituées d'opérandes: variables, constantes, et identificateurs de fonctions, combinés par le moyen d'opérateurs. La
syntaxe des expressions est la suivante :...............................................................................................................................20
EXPRESSION SIMPLE........................................................................................................................................................20
Les expressions......................................................................................................................................................................20
Les opérateurs sont divisés en 5 catégories, dénotées par leur ordre de préséance :..........................................................23
Le moins unaire (- avec un seul opérateur)..........................................................................................................................23
Opérateur NOT......................................................................................................................................................................23
Opérateurs multiplicatifs : *, /, DIV, MOD, AND, SHL, SHR...........................................................................................23
Opérateurs additifs : +, -, OR, XOR.....................................................................................................................................23
Opérateurs relationnels : =, <>, <, >, <=, >=, IN.................................................................................................................23
Les séquences d'opérateurs ayant la même préséance sont évaluées de gauche à droite. Les expressions entre
parenthèses sont évaluées en premier et indépendamment des opérateurs précédents et suivants......................................23
VI.1 MOINS UNAIRE..........................................................................................................................24
Le moins unaire indique la négation de son opérande qui peut être du type réel ou entier................................................24
VI.2 OPERATEUR NOT.......................................................................................................................24
L'opérateur NOT inverse la valeur logique de son opérande booléen.................................................................................24
NOT True = False...........................................................................................................................................................24
NOT false = True............................................................................................................................................................24
TURBO PASCAL permet d'utiliser l'opérateur NOT avec un opérande entier. Dans ce cas, la négation se fait bit à bit.
.................................................................................................................................................................................................24
NOT 0 = -1.........................................................................................................................................................................24
NOT -15 = 14........................................................................................................................................................................24
NOT $2345 = $DCBA...........................................................................................................................................................24
VI.3 OPERATEURS MULTIPLICATIFS............................................................................................24
Opérateur...............................................................................................................................................................................24
Opération...............................................................................................................................................................................24
Type des opérandes...............................................................................................................................................................24
Type du résultat.....................................................................................................................................................................24
*.............................................................................................................................................................................................24
Multiplication........................................................................................................................................................................24
Réel et Réel...........................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Réel et Entier.........................................................................................................................................................................24
Réel........................................................................................................................................................................................24
Entier......................................................................................................................................................................................24
Réel........................................................................................................................................................................................24
/..............................................................................................................................................................................................24
Division..................................................................................................................................................................................24
Réel et Réel...........................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Réel et Entier ........................................................................................................................................................................24
Réel........................................................................................................................................................................................24
Réel........................................................................................................................................................................................24
Réel........................................................................................................................................................................................24
DIV........................................................................................................................................................................................24
Division entière.....................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Entier......................................................................................................................................................................................24
MOD......................................................................................................................................................................................24
Reste......................................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Entier......................................................................................................................................................................................24
AND.......................................................................................................................................................................................24
Arithmétique..........................................................................................................................................................................24
Logique..................................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Booléen et Booléen...............................................................................................................................................................24
Entier......................................................................................................................................................................................24
Booléen..................................................................................................................................................................................24
SHL........................................................................................................................................................................................24
Décalage à gauche.................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Entier......................................................................................................................................................................................24
SHR........................................................................................................................................................................................24
Décalage à droite...................................................................................................................................................................24
Entier et Entier......................................................................................................................................................................24
Entier......................................................................................................................................................................................24
EXEMPLES :........................................................................................................................................................................24
12 * 34 = 408........................................................................................................................................................................24
123 / 4 = 30.75......................................................................................................................................................................24
123 DIV 4 = 30.....................................................................................................................................................................24
12 MOD 5 = 2.......................................................................................................................................................................24
True AND False = False.......................................................................................................................................................24
12 AND 22 = 4.....................................................................................................................................................................24
2 SHL 7 = 256......................................................................................................................................................................24
256 SHR 7 = 2......................................................................................................................................................................24
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................20
VI.4 OPERATEURS ADDITIFS..........................................................................................................25
Opérateur...............................................................................................................................................................................25
Opération...............................................................................................................................................................................25
Type des opérandes...............................................................................................................................................................25
Type du résultat.....................................................................................................................................................................25
+.............................................................................................................................................................................................25
Addition.................................................................................................................................................................................25
Réel et Réel...........................................................................................................................................................................25
Entier et Entier......................................................................................................................................................................25
Réel et Entier.........................................................................................................................................................................25
Réel........................................................................................................................................................................................25
Entier......................................................................................................................................................................................25
Réel........................................................................................................................................................................................25
-..............................................................................................................................................................................................25
Soustraction...........................................................................................................................................................................25
Réel et Réel...........................................................................................................................................................................25
Entier et Entier......................................................................................................................................................................25
Réel et Entier ........................................................................................................................................................................25
Réel........................................................................................................................................................................................25
Entier......................................................................................................................................................................................25
Réel........................................................................................................................................................................................25
OR..........................................................................................................................................................................................25
Arithmétique..........................................................................................................................................................................25
Logique..................................................................................................................................................................................25
Entier et Entier......................................................................................................................................................................25
Booléen et Booléen...............................................................................................................................................................25
Entier......................................................................................................................................................................................25
Booléen..................................................................................................................................................................................25
XOR.......................................................................................................................................................................................25
Arithmétique..........................................................................................................................................................................25
Logique..................................................................................................................................................................................25
Entier et Entier......................................................................................................................................................................25
Booléen et Booléen...............................................................................................................................................................25
Entier......................................................................................................................................................................................25
Booléen..................................................................................................................................................................................25
EXEMPLES :........................................................................................................................................................................25
123 + 456 = 579..................................................................................................................................................................25
456 - 123.0 = 333.0..............................................................................................................................................................25
True or False = True.............................................................................................................................................................25
12 or 22 = 30........................................................................................................................................................................25
True xor False = True...........................................................................................................................................................25
12 xor 22 = 26......................................................................................................................................................................25
VI.5 OPERATEURS RELATIONNELS..............................................................................................25
Tous les opérateurs relationnels fonctionnent avec tous les types simples (Type scalaire et Type réel)...........................25
Les opérateurs = et <> sont applicables aux opérandes de type pointeur...........................................................................25
Les opérateurs =, <= et >= sont applicables aux opérandes de type ensemble...................................................................25
L'opérateur IN renvoie TRUE si la valeur de l'opérande de type scalaire est un membre de l'opérande de type ensemble.
.................................................................................................................................................................................................25
Le résultat est toujours du type Booléen..............................................................................................................................25
VI.6 IDENTIFICATEURS DE FONCTION........................................................................................25
Un identificateur de fonction est un identificateur suivi éventuellement par une liste de paramètres, consistant en une ou
plusieurs variables ou expressions séparées par des virgules, le tout entre parenthèses. ....................................................25
Si la fonction n'est pas l'une des fonctions standards pré-définies, elle doit avoir été déclarée auparavant......................25
VI.7 OPERATEURS D'ADRESSE.......................................................................................................25
TURBO PASCAL comporte deux opérateurs d'adresse : @ adresse de, ^ indirection.......................................................25
L'opérateur @ fournit l'adresse de la variable spécifiée......................................................................................................25
Si PointCar est un pointeur sur un objet de type caractère, PointCar^ désigne de manière indirecte la variable caractère
sur laquelle pointe PointCar...................................................................................................................................................25
VII LES INSTRUCTIONS FONDAMENTALES................................................................................................................26
La partie Instruction commence par le mot réservé Begin et se termine par le mot End. Les instructions peuvent être
simples ou structurées. La syntaxe des instructions est donnée à la page suivante :...........................................................26
VII.1 INSTRUCTIONS SIMPLES........................................................................................................26
Les instructions simples sont des instructions ne contenant pas d'autres instructions. Ce sont l'instruction d'affectation,
l'appel de procédure, l'instruction GOTO et l'instruction vide..............................................................................................26
VII.1.1 INSTRUCTION D'AFFECTATION........................................................................................26
Elle est utilisée pour indiquer qu'une certaine valeur doit être affectée à une certaine variable. Une affectation est
constituée de l'identificateur de variable suivi de := suivi d'une expression........................................................................26
Les affectations à des variables de tout type sont autorisées à condition que la variable ou la fonction et l'expression
soient de même type. Il existe une exception : si la variable est du type Réel, le type de l'expression peut être Entier....26
EXEMPLES :........................................................................................................................................................................26
Angle := Angle * Pi ;............................................................................................................................................................26
Acces := False ;.....................................................................................................................................................................26
Entry := Answer = Password ;..............................................................................................................................................26
SurfSphere := 4 * Pi * R * R ;..............................................................................................................................................26
VII.1.2 L'APPEL DE PROCEDURE....................................................................................................28
Les instructions fondamentales.............................................................................................................................................26
L'appel de procédure permet d'activer une procédure préalablement définie par l'utilisateur, ou une procédure Standard
pré-définie. Cette instruction est constituée de l'identificateur de procédure suivi éventuellement par une liste de
paramètres. Lorsque l'appel de procédure est rencontré en cours d'exécution d'un programme, le contrôle est transféré à
la procédure et la valeur ou l'adresse des paramètres éventuels sont transférés à cette procédure. Lorsque celle-ci se
termine, l'exécution du programme reprend avec l'instruction suivant l'appel de la procédure..........................................28
EXEMPLES :........................................................................................................................................................................28
Find(Name,Address);............................................................................................................................................................28
Sort(Address);........................................................................................................................................................................28
VII.1.3 INSTRUCTION GOTO............................................................................................................28
L'instruction GOTO est constituée du mot réservé GOTO suivi par un identificateur d'étiquette. Elle permet de
continuer l'exécution des instructions au point du programme marqué par l'étiquette........................................................28
Avant tout emploi, les étiquettes doivent être déclarées......................................................................................................28
La portée d'une étiquette est le bloc dans lequel elle est déclarée. Il n'est donc pas possible de sauter à l'intérieur ou à
l'extérieur de procédures ou de fonctions..............................................................................................................................28
VII.1.4 INSTRUCTION VIDE..............................................................................................................28
Une instruction vide est une instruction ne contenant aucun symbole et qui n'a donc aucun effet. Elle peut prendre place
chaque fois que la syntaxe de PASCAL nécessite une instruction et qu'il n'y a aucune action à exécuter.........................28
EXEMPLES :........................................................................................................................................................................28
Begin End..............................................................................................................................................................................28
While Answer <> '' do ;........................................................................................................................................................28
Repeat Until Keypressed ; { attendre qu'une touche soit frappée }....................................................................................28
VII.2 INSTRUCTIONS STRUCTUREES............................................................................................29
Les instructions structurées sont des instructions composées d'autres instructions devant être exécutées en séquences
(séquences d'instructions), ou sous certaines conditions (instructions conditionnelles), ou répétées plusieurs fois
(instructions répétitives).........................................................................................................................................................29
VII.2.1 SEQUENCES D'INSTRUCTIONS .........................................................................................29
Une séquence d'instructions est utilisée si plus d'une instruction doit être exécutée dans une situation où la syntaxe de
PASCAL n'autorise qu'une instruction. Elle est constituée par tout nombre d'instructions séparées par des points virgules
et comprises entre les mots réservés Begin et End................................................................................................................29
EXEMPLE :...........................................................................................................................................................................29
If Small > Big.......................................................................................................................................................................29
then.......................................................................................................................................................................................29
Begin....................................................................................................................................................................................29
Tamp := Small;...................................................................................................................................................................29
Small := Big;......................................................................................................................................................................29
Big := Tamp;......................................................................................................................................................................29
End;......................................................................................................................................................................................29
Remarque : le point virgule précédent le mot End est facultatif car le End est considéré comme un séparateur. Il est
toutefois recommandé de l'utiliser afin de ne pas l'oublier en cas de rajout d'instructions..................................................29
VII.2.2 INSTRUCTIONS CONDITIONNELLES................................................................................29
Une instruction conditionnelle n'exécute que l'une de ses instructions...............................................................................29
L'instruction IF indique qu'une instruction ne doit être exécutée que si une condition est vraie (expression booléenne).
Si elle est fausse aucune instruction n'est exécutée ou l'instruction suivant le mot réservé Else est exécutée...................29
Remarques :...........................................................................................................................................................................29
il ne doit pas y avoir de point virgule avant le mot Else......................................................................................................29
le Else est facultatif...............................................................................................................................................................29
Dans le cas de : IF condition1 THEN IF condition2 THEN Inst1 ELSE Inst2, le Else est rattaché au IF le plus proche. 29
EXEMPLE:............................................................................................................................................................................29
If A <> B then.......................................................................................................................................................................29
If A > B................................................................................................................................................................................29
then Writeln('A est plus grand que B')..............................................................................................................................29
else Writeln('A est plus petit que B');...............................................................................................................................29
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................26
L'instruction CASE est constituée d'une expression et d'une liste d'instructions, chacune étant précédée par une étiquette
de cas de même type que le sélecteur. L'instruction exécutée est celle dont l'étiquette de cas correspond à la valeur
courante de la sélection. S'il n'y en a pas, aucune instruction n'est exécutée ou éventuellement les instructions suivant le
mot réservé Else sont exécutées.............................................................................................................................................30
Remarque : la clause Else est une extension du PASCAL STANDARD............................................................................30
Une étiquette de cas est constituée de tout nombre de constantes ou d'intervalles séparés par des virgules et terminés par
le signe :. Un intervalle est écrit par deux constantes séparées par le délimiteur d'intervalle .. . L'instruction suivant
l'étiquette de cas est exécutée si la valeur du sélecteur est égale à une des constantes ou tombe dans l'un de ces
intervalles................................................................................................................................................................................30
Les types légaux pour le sélecteur sont les types scalaires. ................................................................................................30
EXEMPLES :........................................................................................................................................................................30
Case Operator of....................................................................................................................................................................30
'+': Result := Answer + Result ;...........................................................................................................................................30
'-': Result := Answer - Result ;.............................................................................................................................................30
'*': Result := Answer * Result ;............................................................................................................................................30
End;........................................................................................................................................................................................30
Case Year of..........................................................................................................................................................................30
Min .. 1939 : Begin.............................................................................................................................................................30
Time := PreWorldWar2;....................................................................................................................................................30
Writeln('The World at peace');..........................................................................................................................................30
End;......................................................................................................................................................................................30
1946 .. Max : Begin.............................................................................................................................................................30
Time := PostWorldWar2;...................................................................................................................................................30
Writeln('Building a new world');.......................................................................................................................................30
End.......................................................................................................................................................................................30
Else Begin............................................................................................................................................................................30
Time := WorldWar2;..........................................................................................................................................................30
Writeln('We are at war');....................................................................................................................................................30
End;......................................................................................................................................................................................30
End;........................................................................................................................................................................................30
VII.2.3 INSTRUCTIONS REPETITIVES............................................................................................31
Les instructions répétitives indiquent que certaines instructions doivent être exécutées plusieurs fois. Si le nombre de
répétitions est connu à l'avance, l'instruction FOR est l'instruction appropriée sinon on utilisera les instructions WHILE
ou REPEAT............................................................................................................................................................................31
L'instruction FOR indique que le corps de l'instruction doit être exécuté plusieurs fois, tandis que la variable de contrôle
suit une progression qui peut être ascendante TO ou descendante DOWNTO, vers la valeur finale..................................31
La variable de contrôle, la valeur initiale et la valeur finale doivent être de même type (de type scalaire). ...................31
La valeur finale est déterminée une seule fois lors de l'entrée dans la construction for.....................................................31
Si la valeur initiale est plus grande que la valeur finale en utilisant TO, ou si la valeur initiale est plus petite que la
valeur finale en utilisant DOWNTO, l'instruction n'est pas exécutée..................................................................................31
EXEMPLES :........................................................................................................................................................................31
For I := 1 To 10 Do If T[I] > Max Then Max := T[I];.........................................................................................................31
For J := 1 to 50 Do.................................................................................................................................................................31
Begin......................................................................................................................................................................................31
Readln(Nombre);..................................................................................................................................................................31
If Nombre < Max .................................................................................................................................................................31
Then.....................................................................................................................................................................................31
Petit := Petit + 1.................................................................................................................................................................31
Else......................................................................................................................................................................................31
Grand := Grand + 1;...........................................................................................................................................................31
End;........................................................................................................................................................................................31
Remarque : à la fin d'une instruction For, la valeur de la variable de contrôle est indéfinie, sauf si la boucle a été
interrompue par un GOTO. ...................................................................................................................................................31
L'expression contrôlant la répétition doit être du type Booléen. L'instruction est exécutée tant que l'expression est vraie.
Si sa valeur est fausse au départ, l'instruction n'est pas exécutée.........................................................................................31
EXEMPLES :........................................................................................................................................................................31
While Nom <> 'fin' Do Readln(nom);..................................................................................................................................31
While T[i] < Max Do ...........................................................................................................................................................31
Begin......................................................................................................................................................................................31
Writeln(T[i],' est plus petit que ',max) ;..............................................................................................................................31
i := i + 1 ;..............................................................................................................................................................................31
End;........................................................................................................................................................................................31
L'expression contrôlant la répétition doit être du type Booléen. La séquence d'instructions entre les mots réservés
REPEAT et UNTIL est exécutée, jusqu'à ce que l'expression devienne vraie. Contrairement à l'instruction while,
l'instruction Repeat est toujours exécutée au moins une fois, car l'évaluation de la condition a lieu à la fin de la boucle.
.................................................................................................................................................................................................32
EXEMPLE :...........................................................................................................................................................................32
Repeat....................................................................................................................................................................................32
Write('Voulez-vous effacer ce texte O/N ');........................................................................................................................32
Rep := ReadKey;..................................................................................................................................................................32
Until UpCase(Rep) in ['O','N'];.............................................................................................................................................32
L’instruction Break provoque la sortie immédiate de la boucle for, while ou repeat englobante de plus haut niveau
d'imbrication...........................................................................................................................................................................32
Break est analogue à une instruction goto vers une étiquette située juste après la fin de la structure itérative englobante
de plus haut niveau d'imbrication..........................................................................................................................................32
Le compilateur renvoie une erreur si Break n'a pas été appelée dans une instruction for, while ou repeat.......................32
L’instruction Continue provoque le passage direct à l'itération suivante dans une boucle for, while ou repeat englobante
de plus haut niveau d'imbrication. ........................................................................................................................................32
Si Continue est appelée en dehors de toute boucle for, while ou repeat, le compilateur signale une erreur.....................32
Exemples :.............................................................................................................................................................................32
For I :=1 To MAX DO Begin..............................................................................................................................................32
If Tablo[I]=0........................................................................................................................................................................32
Then Break ; { Sortie de la boucle si le contenu du tablo = 0 }......................................................................................32
Writeln(Tablo[I]) ;..............................................................................................................................................................32
End ;......................................................................................................................................................................................32
For I :=1 To MAX DO Begin..............................................................................................................................................32
If Tablo[I]=0........................................................................................................................................................................32
Then Continue ; { On ajoute 1 au contenu du Tablo }.........................................................................................................32
Tablo[I] := Tablo[I] + 1 ; { sauf si le Tablo contient 0 }..................................................................................................32
End ; { Le tablo est parcouru en entier }.............................................................................................................................32
VIII TYPES SCALAIRES ENUMERES ET INTERVALLES............................................................................................33
Types scalaires énumérés et intervalles................................................................................................................................33
Les types de données de base du PASCAL sont les types scalaires. Un type scalaire est constitué d'un ensemble fini et
ordonné de valeurs..................................................................................................................................................................33
VIII.1 TYPE SCALAIRE ENUMERE..................................................................................................33
En plus des types scalaires standards (vus au chapitre III), PASCAL supporte les types scalaires définis par l'utilisateur,
également appelés Types scalaires énumérés. La définition d'un type énuméré comprend dans l'ordre toutes ses valeurs
possibles. Les valeurs de ce nouveau type sont représentées par des identificateurs qui doivent être des constantes du
nouveau type...........................................................................................................................................................................33
EXEMPLES :........................................................................................................................................................................33
Type.......................................................................................................................................................................................33
Operateur = (plus, moins, multiplie, divise);.......................................................................................................................33
JourSemaine = (lun, mar, mer, jeu, ven);............................................................................................................................33
Les variables du type JourSemaine peuvent prendre une des cinq valeurs définies ci-dessus...........................................33
Les opérateurs relationnels peuvent s'appliquer à tous les types scalaires tant que les deux opérandes sont du même type
(réels et entiers peuvent être mélangés). La comparaison se fait sur l'ordre dans lequel les valeurs ont été introduites
dans la définition du type. Dans l'exemple JourSemaine, la condition suivante est vraie :.................................................33
lun < mar < mer < jeu < ven.................................................................................................................................................33
Les fonctions standard suivantes peuvent être utilisées avec des arguments de type scalaire énuméré :..........................33
Succ(lun) le successeur de lun : mar.....................................................................................................................................33
Pred(mer) le prédécesseur de mer : mar...............................................................................................................................33
Ord(jeu) la valeur ordinale de jeu : 3...................................................................................................................................33
La valeur ordinale du premier élément est 0........................................................................................................................33
Le type du résultat de Succ et Pred est du même type que l'argument................................................................................33
Le type du résultat de Ord est un entier................................................................................................................................33
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................33
VIII.2 TYPE INTERVALLE.................................................................................................................34
Un type de données peut être défini comme un intervalle d'un autre type scalaire déjà défini. Ces types sont appelés
Intervalle. La définition d'un intervalle donne simplement la plus petite et la plus grande valeur de l'intervalle. ............34
EXEMPLES :........................................................................................................................................................................34
Type.......................................................................................................................................................................................34
HemiSphere = (Nord, Sud, Est, Ouest);...............................................................................................................................34
Monde = Est..Ouest;.............................................................................................................................................................34
Majuscules = 'A'..'Z';............................................................................................................................................................34
Minuscules = 'a'..'z';.............................................................................................................................................................34
Le type Monde est un intervalle de type scalaire Hemisphere appelé Type scalaire associé.............................................34
Le type scalaire associé de Majuscules et de Minuscules est Char.....................................................................................34
Un type intervalle conserve toutes les propriétés du type scalaire associé et n'est restreint que dans l'échelle de ses
valeurs.....................................................................................................................................................................................34
AVANTAGES DE L'EMPLOI DES TYPES.......................................................................................................................34
Améliorer la lisibilité des programmes.................................................................................................................................34
Vérifications possibles de compatibilité entre les valeurs affectées à des variables scalaires définies ou à des variables
intervalles................................................................................................................................................................................34
Economie de place mémoire. TURBO PASCAL alloue un seul octet de mémoire pour des variables d'un type défini ou
un intervalle ayant un nombre d'éléments inférieur à 256. De même, les intervalles de type Entier dont les bornes
inférieure et supérieure sont comprises entre 0 et 255, n'occupent qu'un octet en mémoire...............................................34
VIII.3 CONVERSION DE TYPE.........................................................................................................34
La fonction Ord peut être utilisée pour convertir des types scalaires en valeur entières. Le PASCAL STANDARD ne
permet pas l'opération inverse c'est-à-dire, de convertir un Entier en une valeur scalaire..................................................34
En TURBO PASCAL, une valeur de type scalaire peut être convertie en une valeur d'un autre type scalaire ayant la
même valeur ordinale, par la possibilité Retype. Le changement de type se fait en utilisant l'identificateur du type désiré
comme un identificateur de fonction suivi par un paramètre entre parenthèses. Le paramètre peut être une valeur de tout
type scalaire............................................................................................................................................................................34
EXEMPLES:..........................................................................................................................................................................34
Avec les exemples des paragraphes précédents :................................................................................................................34
Integer(mar) = 1...................................................................................................................................................................34
Hemisphere(2) = Est.............................................................................................................................................................34
VIII.4 VERIFICATION D'ECHELLE..................................................................................................35
La directive de compilation R permet de générer le code effectuant des vérifications sur les variables scalaires et les
types intervalles. La valeur par défaut est {$R-} c'est-à-dire qu'il n'y a pas de vérification effectuée. Lorsque la directive
est active, {$R+}, une vérification est effectuée lors d'une affectation à une variable scalaire ou à un intervalle, pour
s'assurer que la valeur affectée est comprise dans l'intervalle autorisé................................................................................35
EXEMPLES:..........................................................................................................................................................................35
Type.......................................................................................................................................................................................35
Digit = 0..9;..........................................................................................................................................................................35
Var.........................................................................................................................................................................................35
Dig1, Dig2, Dig3 : Digit;....................................................................................................................................................35
Begin......................................................................................................................................................................................35
Dig1 := 5; valide...................................................................................................................................................................35
Dig2 := Dig1 + 3; valide tant que Dig1 + 3 <= ..................................................................................................................35
Dig3 := 47; erreur à la compilation.....................................................................................................................................35
CONSTANT OUT OF RANGE .........................................................................................................................................35
Dig3 := 8 ;.............................................................................................................................................................................35
{$R-} Dig3 := Dig3 + Dig3; pas d'erreur à la compilation................................................................................................35
ni à l'exécution.....................................................................................................................................................................35
{$R+} Dig3 := 8;..................................................................................................................................................................35
Dig3 := Dig3 + Dig3; pas d'erreur à la compilation...........................................................................................................35
erreur à l'exécution..............................................................................................................................................................35
RANGE CHECK ERROR..................................................................................................................................................35
End.........................................................................................................................................................................................35
Remarque : la directive R est également utilisée pour vérifier la validité des index des tableaux....................................35
IX TYPE CHAINE.................................................................................................................................................................36
En TURBO PASCAL, le type chaîne (String) est pré-défini pour le traitement des chaînes de caractères, c'est-à-dire
toute séquence de caractères. Les types chaînes sont des types structurés et ressemblent beaucoup aux types tableaux
(voir chapitre X).....................................................................................................................................................................36
IX.1 DEFINITION DU TYPE CHAINE (chaîne PASCAL)................................................................36
Une valeur de type chaîne de caractères (String) est une séquence de caractères de taille variable. Pour déclarer un type
chaîne de caractères, on spécifie la taille (attribut constant dont la valeur varie entre 1 et 255). Par défaut, l'attribut de
taille est 255............................................................................................................................................................................36
EXEMPLES :........................................................................................................................................................................36
Type.......................................................................................................................................................................................36
NomFichier = String[14];.....................................................................................................................................................36
LigneEcran = String[80];.....................................................................................................................................................36
LigneEdit = String;...............................................................................................................................................................36
Les variables chaînes occupent en mémoire la longueur maximum définie plus un octet qui contient la longueur
courante de la chaîne..............................................................................................................................................................36
IX.2 CHAINES AZT (à zéro terminal).................................................................................................36
Depuis la version TP 7.0, le Turbo PASCAL accepte les chaînes dites à Zéro Terminal (AZT). ....................................36
Une chaîne à zéro terminal est constituée ainsi:..................................................................................................................36
une séquence de caractères différents de 0 se terminant par un caractère NULL (#0) ......................................................36
une limite de longueur de 65535 caractères.........................................................................................................................36
Utilisation des chaînes AZT:.................................................................................................................................................36
Une chaîne AZT est stockée comme un tableau de caractères avec un type d'indice entier à base zéro du style suivant:
.................................................................................................................................................................................................36
array[0..X] of Char..............................................................................................................................................................36
avec X = un entier positif différent de zéro..........................................................................................................................36
Cela se nomme un tableau de caractères à base zéro...........................................................................................................36
La directive d'extension de syntaxe ($X ) doit être activée pour pouvoir utiliser l'unité Strings dans vos programmes...36
IX.3 LE TYPE PCHAR.........................................................................................................................37
Le type prédéfini PCHAR indique un pointeur sur une chaîne AZT..................................................................................37
Le type PCHAR est déclaré de la façon suivante :..............................................................................................................37
Type......................................................................................................................................................................................37
PCHAR = ^Char ; { Soit un pointeur sur un caractère }.................................................................................................37
Le type Pointeur sera étudié au cours du chapitre XVIII.....................................................................................................37
IX.4 OPERATIONS SUR LES CHAINES PASCAL...........................................................................37
Les chaînes sont manipulées par l'emploi des expressions chaînes. Les expressions chaînes sont constituées de
constantes chaînes, de variables chaînes, de noms de fonctions et d'opérateurs..................................................................37
Le signe '+' peut être utilisé pour la concaténation des chaînes. Si la longueur dépasse 255, une erreur survient à
l'exécution...............................................................................................................................................................................37
EXEMPLES :........................................................................................................................................................................37
'TURBO ' + 'PASCAL' = 'TURBO PASCAL'.....................................................................................................................37
'123' + '.' + '456' = '123.456'.................................................................................................................................................37
Les opérateurs relationnels ont une préséance inférieure à la concaténation. En comparant deux chaînes, les caractères
sont comparés un à un de la gauche vers la droite selon leur valeur ASCII. Si les chaînes sont de longueurs différentes
mais égales jusqu'au dernier caractère de la chaîne la plus courte, celle-ci est alors considérée la plus petite. Deux
chaînes sont égales si et seulement si leur contenu et leur longueur sont égaux..................................................................37
EXEMPLES :........................................................................................................................................................................37
'A' < 'B' vrai...........................................................................................................................................................................37
'A' > 'b' faux...........................................................................................................................................................................37
IX.4.1 AFFECTATION DE CHAINES................................................................................................37
L'opérateur d'affectation est utilisé pour affecter la valeur d'une expression à une variable chaîne..................................37
EXEMPLES :........................................................................................................................................................................37
Age := 'quinze';......................................................................................................................................................................37
Ligne := 'Bon anniversaire pour vos ' + age + ' ans';............................................................................................................37
Si la longueur maximum de la variable chaîne est dépassée, les caractères en trop seront éliminés.................................37
IX.4.2 PROCEDURES SUR LES CHAINES PASCAL.......................................................................38
Dans les définitions suivantes :.............................................................................................................................................38
St, Target désignent des variables chaînes...........................................................................................................................38
Obj désigne une expression chaîne.......................................................................................................................................38
Pos et Num désignent des expressions entières dans l'intervalle 1 à 255............................................................................38
Value désigne une valeur numérique....................................................................................................................................38
Les procédures standard suivantes sont définies en TURBO PASCAL:.............................................................................38
Delete Procedure Delete (Var St: String; Pos, Num : Integer);...........................................................................................38
Delete supprime dans St une sous-chaîne contenant Num caractères en commençant à Pos.............................................38
St := 'ABCDEFG';.................................................................................................................................................................38
Delete (St, 2, 4); St a pour valeur 'AFG'...............................................................................................................................38
Delete (St, 2, 10); St a pour valeur 'A'..................................................................................................................................38
Insert Procedure Insert (Obj: String; Var Target: String; Pos: Integer);..............................................................................38
Insert insère la chaîne Obj dans la chaîne Target, à la position Pos....................................................................................38
St := 'ABCDEFG';.................................................................................................................................................................38
Insert ('XX', St, 3); St a pour valeur 'ABXXCDEFG'..........................................................................................................38
Str Procedure Str (Value [:Taille[: NbDec]]; Var St: String);.............................................................................................38
Str convertit la valeur numérique de Value en une chaîne, et range le résultat dans St. Taille et Nbdec sont des
expressions de type entier......................................................................................................................................................38
I := 1234;...............................................................................................................................................................................38
Str (I, St); St a pour valeur '1234'.......................................................................................................................................38
X := 2.5E4;............................................................................................................................................................................38
Str (X, St); St a pour valeur ' 2.5000000000E+04'..............................................................................................................38
Str (X:10:0, St); St a pour valeur ' 25000'....................................................................................................................38
Val Procedure Val (St: String; Var V; Var Code: Integer);.................................................................................................39
Val convertit l'expression chaîne St en une valeur entière ou réelle, (en fonction du type de Var) et range la valeur dans
V. Les espaces au début et à la fin ne sont pas autorisés. V doit être une variable entière ou réelle et Code doit être une
variable entière. Si aucune erreur n'est détectée, Code est mis à 0, sinon Code a la valeur de la position du premier
caractère en erreur et la valeur de Var est indéfinie..............................................................................................................39
St := '234';..............................................................................................................................................................................39
Val (St, I, Code); I a pour valeur 234...................................................................................................................................39
Code a pour valeur 0 { = Conversion OK pas d’erreur }....................................................................................................39
St := '12X';.............................................................................................................................................................................39
Val (St, I, Code); I a une valeur indéfinie............................................................................................................................39
Code a pour valeur 3............................................................................................................................................................39
St := ''; { chaîne vide }..........................................................................................................................................................39
Val (St, I, Code); I a une valeur indéfinie...........................................................................................................................39
Code a pour valeur 1............................................................................................................................................................39
Remarque : si le contrôle du domaine de validité est activé ({$R+}, une valeur hors domaine provoque toujours une
erreur d'exécution...................................................................................................................................................................39
IX.4.3 FONCTIONS SUR LES CHAINES PASCAL..........................................................................39
Les fonctions standard suivantes sont définies en TURBO PASCAL :...............................................................................39
Copy Function Copy (St: String; Pos, Num: Integer) : String ;...........................................................................................39
Copy retourne une sous-chaîne contenant Num caractères en commençant à la position Pos...........................................39
St := 'ABCDEFG';.................................................................................................................................................................39
St1 := Copy (St, 3, 2); St1 a pour valeur 'CD'......................................................................................................................39
St2 := Copy (St, 4, 10); St2 a pour valeur 'DEFG'...............................................................................................................39
Concat Function Concat (St1 [, St2, ... StN] : String) : String ;...........................................................................................39
Concat retourne une chaîne qui est la concaténation de ses arguments dans l'ordre où ils sont déclarés. La liste des
arguments peut contenir tout nombre d'expressions chaînes séparées par des virgules. Comme vu au paragraphe IX-2,
l'opérateur + peut être utilisé pour obtenir le même résultat................................................................................................39
St1 := 'TURBO ';...................................................................................................................................................................39
St2 := 'est le plus rapide';......................................................................................................................................................39
St3 := Concat (St1,'PASCAL ',St2);.....................................................................................................................................39
St3 a pour valeur 'TURBO PASCAL est le plus rapide'......................................................................................................39
Length Function Length (St: String) : Integer ;....................................................................................................................40
Length retourne la longueur d'une expression chaîne St, c'est-à-dire le nombre de caractères dans St. ...........................40
St := 'BONJOUR';.................................................................................................................................................................40
I := Length (St); I a pour valeur 7.........................................................................................................................................40
Pos Function Pos (Obj, Target: String) : Byte ;....................................................................................................................40
Pos recherche dans Target la première occurrence de Obj. Le résultat est un entier sur un octet donnant la position dans
Target du premier caractère de Obj. Si Obj n'est pas trouvé, Pos retourne 0.......................................................................40
St := 'ABCDEFG';.................................................................................................................................................................40
I := Pos ('DE', St); I a pour valeur 4......................................................................................................................................40
I := Pos ('H', St); I a pour valeur 0........................................................................................................................................40
IX.5 OPERATIONS SUR LES CHAINES AZT - L'UNITE STRINGS..............................................40
Pour utiliser les fonctions de gestion des chaînes AZT, il est nécessaire d’indiquer dans la clause USES l’unité Strings
de la façon suivante :..............................................................................................................................................................40
Uses Strings ;........................................................................................................................................................................40
Cette unité Strings assure le support de la classe de chaînes de caractères dites chaînes AZT (à zéro terminal ou encore
null-terminated strings)..........................................................................................................................................................40
Grâce à l'extension de syntaxe de Turbo Pascal et à cette unité Strings, un programme peut manipuler des chaînes dans
le style du C............................................................................................................................................................................40
C'est le format de chaîne requis par l'interface de développement API de Windows (Application Programming
Interface).................................................................................................................................................................................40
IX.5.1 FONCTIONS DE L'UNITÉ STRINGS:....................................................................................40
Les identificateurs de ces fonctions commencent par str (comme en langage C)...............................................................40
StrCat Function StrCat(Dest, Source : PChar) : PChar ;......................................................................................................40
Concatène une copie d'une chaîne au bout d'une autre et renvoie un pointeur sur la chaîne concaténée..........................40
StrComp Function StrComp(Str1, Str2 : PChar) : Integer ;.................................................................................................40
Compare deux chaînes Str1 et Str2 et renvoie .....................................................................................................................40
une valeur inférieure à 0 si Str1 < Str2.................................................................................................................................40
0 si Str1 = Str2.......................................................................................................................................................................40
une valeur supérieure à 0 si Str1 > Str2................................................................................................................................40
StrCopy Function StrCopy(Dest, Source : PChar) : PChar ;...............................................................................................41
Copie la chaîne Source dans Dest et renvoie Dest. Elle ne fait aucun test de dépassement de longueur..........................41
StrDispose Function StrDispose(Str : PChar) ;....................................................................................................................41
Restitue au système l’espace mémoire occupé par une chaîne et réservé au préalable par StrNew. Si Str vaut NIL,
StrDispose n’a aucun effet. Ne renvoie rien..........................................................................................................................41
StrECopy Function StrECopy (Dest, Source : PChar) : PChar ; .........................................................................................41
Copie la chaîne Source dans Dest puis renvoie StrEnd(Dest) (=pointeur sur la fin du résultat)........................................41
StrEnd Function StrEnd(Str : Pchar) : PChar ; ....................................................................................................................41
Renvoie un pointeur sur le caractère nul qui marque la fin d'une chaîne............................................................................41
StrIComp Function StrIcomp(Str1, Str2 : Pchar) : Integer ;................................................................................................41
Compare deux chaînes (sans diff MAJ/min). La valeur renvoyée est identique à celle renvoyée par la fonction
StrComp..................................................................................................................................................................................41
StrLCat Function StrLCat(Dest, Source : PChar ; lngMax : Word) :PChar ;......................................................................41
Ajoute une chaîne Source à la fin d’une chaîne Dest et renvoie un pointeur sur la chaîne concaténée resultante. .........41
StrLComp Function StrLComp(Str1, Str2 : PChar ; lngMax : Word) :PChar ;..................................................................41
Compare deux chaînes, sur une longueur spécifiée lngMax. La valeur renvoyée est identique à celle renvoyée par la
fonction StrComp...................................................................................................................................................................41
StrLCopy Function StrLCopy(Dest, Source : PChar ; lngMax : Word) :PChar ;.............................................................41
Copie un nombre de caractères spécifié d'une chaîne Source dans une chaîne Dest..........................................................41
StrLen Function StrLen(Str : PChar) : Word........................................................................................................................41
Renvoie le nombre de caractères de la chaîne Str. ..............................................................................................................41
StrLIComp Function StrLIComp(Str1, Str2 : PChar ; lngMax : Word) :PChar ;................................................................41
Compare deux chaînes, sur une longueur spécifiée lngMax sans différencier les majuscules des minuscules. La valeur
renvoyée est identique à celle renvoyée par la fonction StrComp........................................................................................41
StrLower Function StrLower(Str : PCHar) : PChar ;...........................................................................................................42
Type chaine...........................................................................................................................................................................36
Convertit une chaîne en minuscules.....................................................................................................................................42
StrMove Function StrMove(Dest, Source : PChar ; Cpt : Word) : PChar ;.........................................................................42
Copie Cpt caractères d'une chaîne Source dans une chaîne Dest........................................................................................42
StrNew Function StrNew(Str : PChar) : PChar ;..................................................................................................................42
Alloue l’espace mémoire nécessaire pour une chaîne dans la zone du tas (heap). StrNew crée une copie de Str et
demande de l’espace en appelant GetMem, puis renvoie un pointeur sur la copie. L’espace réservé a une longueur de
StrLen(Str) + 1 octets.............................................................................................................................................................42
StrPas Function StrPas(Str : PChar) : String ;......................................................................................................................42
Convertit une chaîne AZT (style C) en chaîne Pascal.........................................................................................................42
StrPCopy Function StrPCopy(Dest : PChar ; Source : String) : PChar ;............................................................................42
Copie une chaîne Pascal Source vers une chaîne AZT Dest et renvoie Dest......................................................................42
StrPos Function StrPos(Str1, Str2 : PChar) : PChar ;...........................................................................................................42
Renvoie un pointeur sur la 1ère occurrence d'une sous-chaîne à l’intérieur d’une chaîne.................................................42
StrRScan Function StrRScan(Str : PChar ; Car : Char) : PChar;.........................................................................................42
Renvoie un pointeur sur la dernière occurrence du caractère Car dans la chaîne Str.........................................................42
Si le caractère n’est pas trouvé, renvoie NIL.......................................................................................................................42
StrScan Function StrScan(Str : PChar ; Car : Char) : PChar;..............................................................................................42
Renvoie un pointeur sur la 1ère occurrence d'un caractère dans une chaîne......................................................................42
Si le caractère n’est pas trouvé, renvoie NIL.......................................................................................................................42
StrUpper Function StrUpper(Str : PCHar) : PChar ;............................................................................................................42
Convertit une chaîne en majuscules.....................................................................................................................................42
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................36
IX.6 CHAINES ET CARACTERES.....................................................................................................43
Les types chaînes et le type scalaire Char sont compatibles. Chaque fois qu'une valeur chaîne est attendue une valeur
caractère peut être spécifiée et vice-versa.............................................................................................................................43
Lorsqu'un caractère est assigné à une chaîne, la longueur de celle-ci doit être 1 sinon il y aura erreur à l'exécution......43
Les caractères d'une variable chaîne peuvent être atteints individuellement par indexation.............................................43
Le premier caractère d'une chaîne (à la position 0) contient la longueur de la chaîne et Length (Chaine) est identique à
Ord (Chaine[0])......................................................................................................................................................................43
X TYPE TABLEAU...............................................................................................................................................................44
Un tableau est un type structuré constitué d'un nombre fixe de composants qui sont tous du même type appelé le type du
composant ou le type de base. Chaque composant peut être atteint individuellement par un index dans le tableau. Les
index sont des expressions de tout type scalaire....................................................................................................................44
X.1 DEFINITION DES TABLEAUX...................................................................................................44
EXEMPLES :........................................................................................................................................................................44
Type.......................................................................................................................................................................................44
Jour = (Lun, Mar, Mer, Jeu, Ven, Sam, Dim);....................................................................................................................44
Var.........................................................................................................................................................................................44
HeuresTravail : Array[1..8] of Integer;................................................................................................................................44
Semaine : Array[1..7] of Jour;.............................................................................................................................................44
Type.......................................................................................................................................................................................44
Joueurs = (Joueur1, Joueur2, Joueur3, Joueur4);.................................................................................................................44
Main = (Paire, DoublePaire, Brelan, Quinte, Couleur, Full, Carre, Quinte_Flush,...........................................................44
Poker);.................................................................................................................................................................................44
Legales = 1..500;..................................................................................................................................................................44
Encheres = Array[Joueurs] of Legales;...............................................................................................................................44
Var.........................................................................................................................................................................................44
Joueur : Array[Joueurs] of Main;.........................................................................................................................................44
Pot : Encheres;......................................................................................................................................................................44
On accède à un composant du tableau en ajoutant un index entre crochets, à l'identificateur de la variable tableau.......44
Joueur[Joueur3] := Full;......................................................................................................................................................44
Pot[Joueur3] := 100;............................................................................................................................................................44
Une affectation étant permise entre deux variables de type identique, des tableaux entiers peuvent être recopiés avec
une seule instruction d'affectation..........................................................................................................................................44
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................44
X.2 TABLEAUX MULTIDIMENSIONNELS.....................................................................................45
Type tableau..........................................................................................................................................................................44
Le type de composants d'un tableau peut être de tout type y compris un autre tableau. Cette structure est appelée un
tableau multidimensionnel.....................................................................................................................................................45
EXEMPLE :...........................................................................................................................................................................45
Type.......................................................................................................................................................................................45
Carte = (Deux,Trois,Quatre,Cinq,Six,Sept,Huit,Neuf,Dix,Valet,Dame,Roi,As);...............................................................45
Couleur = (Pique, Coeur, Carreau, Trefle);..........................................................................................................................45
Cartes = Array[Couleur] of Array[1..13] of Carte;..............................................................................................................45
Var.........................................................................................................................................................................................45
C : Cartes;..............................................................................................................................................................................45
Col : Couleur;.......................................................................................................................................................................45
Begin......................................................................................................................................................................................45
C[Col][5] := Valet;................................................................................................................................................................45
...............................................................................................................................................................................................45
End.........................................................................................................................................................................................45
Un tableau multidimensionnel est défini plus simplement en spécifiant des index multiples............................................45
Type.......................................................................................................................................................................................45
Cartes = Array[Couleur,1..13] of Carte;...............................................................................................................................45
Var.........................................................................................................................................................................................45
C : Cartes;..............................................................................................................................................................................45
Col : Couleur;.......................................................................................................................................................................45
Begin......................................................................................................................................................................................45
C[Col,5] := Valet;..................................................................................................................................................................45
...............................................................................................................................................................................................45
Une abréviation similaire peut être utilisée pour choisir le composant du tableau.............................................................45
X.3 TABLEAUX DE CARACTERES..................................................................................................45
Les tableaux de caractères sont des tableaux à une dimension dont les composants sont du type scalaire Char. Les
tableaux de caractères sont identiques à des chaînes ayant une longueur constante............................................................45
X.4 TABLEAUX PRE-DEFINIS..........................................................................................................45
TURBO PASCAL a cinq tableaux pré-définis :...................................................................................................................45
Mem, MemW et MemL sont utilisés pour adresser directement la mémoire. Les éléments de Mem sont des octets, ceux
de MemW sont des mots et ceux de MemL sont des entiers longs. ....................................................................................45
Port et PortW sont des tableaux unidimensionnels où chaque élément représente un port de données du processeur
8Ox86 dont l'adresse est fournie par l'indice de type word. Les éléments de Port sont des octets et ceux de PortW sont
des mots. ................................................................................................................................................................................45
XI TYPE ENREGISTREMENT............................................................................................................................................46
Un enregistrement ou record est une structure constituée d'un nombre fixe de composants appelés champs. Les champs
peuvent être de différents types et chaque champ a un nom qui est l'identificateur de champ et qui est utilisé pour le
sélectionner.............................................................................................................................................................................46
..............................................................................................................................................................................................46
XI.1 DEFINITION D'UN ENREGISTREMENT.................................................................................46
La définition d'un enregistrement est constituée du mot réservé Record suivi d'une liste de champs et terminé par le mot
réservé end. La syntaxe d'un enregistrement est la suivante :...............................................................................................46
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................46
EXEMPLES :.......................................................................................................................................................................47
Type.......................................................................................................................................................................................47
JourDuMois = 1..31;.............................................................................................................................................................47
Date = Record.......................................................................................................................................................................47
Jour : JourDuMois;............................................................................................................................................................47
Mois : (Jan,Fev,Mar,Avr,Mai,Juin,Juil,Aou,Sep,Oct,Nov,Dec);.....................................................................................47
Annee : 1900..1999;...........................................................................................................................................................47
End;.......................................................................................................................................................................................47
Var.........................................................................................................................................................................................47
Anniversaire : Date;.............................................................................................................................................................47
Jour, Mois et Annee sont les identificateurs de champ. Un champ est référencé par l'identificateur de la variable et
l'identificateur de champ séparé par un point........................................................................................................................47
EXEMPLES :........................................................................................................................................................................48
Anniversaire.Mois := Juin;...................................................................................................................................................48
Anniversaire.Annee := 1953;...............................................................................................................................................48
Comme pour les tableaux, les affectations sont autorisées entre deux enregistrements de même type. Les composants
d'un enregistrement peuvent être de tout type. Une construction constituée d'enregistrement d'enregistrement
([d'enregistrement ...]) est possible........................................................................................................................................48
XI.2 INSTRUCTION WITH.................................................................................................................48
L'emploi d'enregistrements donne quelquefois des instructions assez complexes (notamment dans le cas
d'enregistrements d'enregistrements).....................................................................................................................................48
La syntaxe de l'instruction WITH est la suivante :..............................................................................................................48
Dans l'exemple précédent, à chaque fois que l'on souhaite accéder à un composant du RECORD, il faut écrire
Anniversaire suivi d'un point et de l'identificateur du champ...............................................................................................48
Avec l'instruction WITH on peut écrire :.............................................................................................................................48
WITH Anniversaire DO........................................................................................................................................................48
Begin.....................................................................................................................................................................................48
Jour := 17;............................................................................................................................................................................48
Mois := Juin;........................................................................................................................................................................48
Annee := 1953;....................................................................................................................................................................48
End;.......................................................................................................................................................................................48
Les enregistrements peuvent être imbriqués à l'intérieur des instructions WITH, c'est-à-dire que des enregistrements
d'enregistrements peuvent être ouverts..................................................................................................................................48
EXEMPLES :........................................................................................................................................................................49
Type.......................................................................................................................................................................................49
Nom = RECORD.................................................................................................................................................................49
Famille : String[30];...........................................................................................................................................................49
Prenom : Array[1..3] of String[10];...................................................................................................................................49
END;....................................................................................................................................................................................49
Temps = RECORD..............................................................................................................................................................49
HeuresNormales,HeuresSupp,...........................................................................................................................................49
HeuresNuit,WeekEnd : Integer;.........................................................................................................................................49
END;....................................................................................................................................................................................49
Date = RECORD.................................................................................................................................................................49
Jour : JourDuMois;.............................................................................................................................................................49
Mois :(Jan,Fev,Mar,Avr,Mai,Juin, Juil,Aou,Sep,Oct,Nov,Dec);......................................................................................49
Annee : 1900..1999;...........................................................................................................................................................49
END;....................................................................................................................................................................................49
Personne = RECORD..........................................................................................................................................................49
Id : Nom;.............................................................................................................................................................................49
Time : Date;........................................................................................................................................................................49
END;....................................................................................................................................................................................49
Gages = RECORD...............................................................................................................................................................49
Individuel : Personne;........................................................................................................................................................49
Cout : Temps;.....................................................................................................................................................................49
END;....................................................................................................................................................................................49
Var.........................................................................................................................................................................................49
Salaire : Gages;.....................................................................................................................................................................49
Begin......................................................................................................................................................................................49
..............................................................................................................................................................................................49
WITH Salaire, Individuel, Id DO........................................................................................................................................49
Begin.....................................................................................................................................................................................49
Famille := 'DUPONT';........................................................................................................................................................49
Prenom[1] := 'Jules';...........................................................................................................................................................49
End;.......................................................................................................................................................................................49
Ce qui est équivalent à .........................................................................................................................................................49
WITH Salaire DO.................................................................................................................................................................49
WITH Individuel DO..........................................................................................................................................................49
WITH Id DO.....................................................................................................................................................................49
Begin.................................................................................................................................................................................49
Famille := 'DUPONT';....................................................................................................................................................49
Prenom[1] := 'Jules';........................................................................................................................................................49
End;...................................................................................................................................................................................49
XI.3 ENREGISTREMENTS AVEC VARIANTES..............................................................................50
La syntaxe du type enregistrement permet également d'avoir une partie variable, c'est-à-dire une partie dont les champs
sont de types et en nombre différents, dépendant généralement de la valeur du champ discriminant................................50
Une partie variable consiste en un champ discriminant d'un type préalablement défini, dont les valeurs déterminent les
variantes, suivi par des étiquettes correspondant à chaque valeur possible du champ discriminant...................................50
Chaque étiquette précède une liste de champs définissant le type des variantes correspondant à l'étiquette....................50
EXEMPLE :...........................................................................................................................................................................50
Type.......................................................................................................................................................................................50
Forme = (Triangle,Rectangle,Cercle);.................................................................................................................................50
Objet = RECORD................................................................................................................................................................50
X,Y: Integer;.......................................................................................................................................................................50
Surface : Real;....................................................................................................................................................................50
CASE Contour : Forme OF................................................................................................................................................50
Triangle : (Cote : Integer;.................................................................................................................................................50
Angle1,Angle2,Angle3 : 1..180);......................................................................................................................................50
Rectangle : (Cote1,Cote2 : Integer);.................................................................................................................................50
Cercle : (Diametre : Integer).............................................................................................................................................50
END;...................................................................................................................................................................................50
END;....................................................................................................................................................................................50
Var.........................................................................................................................................................................................50
Figure : Objet;......................................................................................................................................................................50
L'accès aux différentes parties du champ variant se fait comme pour un champ fixe........................................................50
IF Figure.Contour = Triangle................................................................................................................................................50
THEN....................................................................................................................................................................................50
Begin....................................................................................................................................................................................50
Figure.Cote := 5;................................................................................................................................................................50
Figure.Angle1 := 45;..........................................................................................................................................................50
............................................................................................................................................................................................50
End;......................................................................................................................................................................................50
La partie fixe d'un enregistrement doit toujours précéder la partie variante.......................................................................50
La mise à jour du sélecteur de champ est de la responsabilité du programmeur................................................................50
EXEMPLE :...........................................................................................................................................................................50
Donner une structure de données décrivant un laboratoire comprenant 100 employés selon les informations suivantes:50
son identité (nom, prénom)...................................................................................................................................................50
son adresse.............................................................................................................................................................................50
sa situation familiale.............................................................................................................................................................50
son grade................................................................................................................................................................................50
son indice...............................................................................................................................................................................50
sa position dans le laboratoire (cadre ou non)......................................................................................................................50
Program Employe;.................................................................................................................................................................51
Const......................................................................................................................................................................................51
Maxmot = 15 ;......................................................................................................................................................................51
Maxsigle = 6 ;.......................................................................................................................................................................51
Maxenfant = 12 ;..................................................................................................................................................................51
Maxindividu = 100 ;.............................................................................................................................................................51
Maxcode = 5 ;.......................................................................................................................................................................51
Type.......................................................................................................................................................................................51
Mot = String [maxmot];......................................................................................................................................................51
Sigle = String [maxsigle];...................................................................................................................................................51
Code = String [maxcode];...................................................................................................................................................51
Situation = (Celibataire, Marie, Divorce, Veuf);...............................................................................................................51
Adresse = RECORD............................................................................................................................................................51
Numerorue : Integer;.........................................................................................................................................................51
Codepostal : Code;............................................................................................................................................................51
Nomrue, Ville : Mot;.........................................................................................................................................................51
END;...................................................................................................................................................................................51
Identite = RECORD............................................................................................................................................................51
Nom,Prenom : Mot;............................................................................................................................................................51
Age : Integer;......................................................................................................................................................................51
Sexe : (Masculin, Feminin);...............................................................................................................................................51
END;....................................................................................................................................................................................51
Famil = RECORD...............................................................................................................................................................51
CASE Situ : Situation OF..................................................................................................................................................51
Celibataire : ();..................................................................................................................................................................51
Marie : (Nbenfant : Integer;..............................................................................................................................................51
Enfant : Array [1..Maxenfant] Of Identite; ....................................................................................................................51
Conjoint : Identite);..........................................................................................................................................................51
Divorce,.............................................................................................................................................................................51
Veuf : (Nbenfant : Integer;...............................................................................................................................................51
Enfant : Array [1..Maxenfant] Of Identite) ....................................................................................................................51
END;...................................................................................................................................................................................51
END;....................................................................................................................................................................................51
Individu = RECORD...........................................................................................................................................................51
Identit : Identite;.................................................................................................................................................................51
Adres : Adresse;.................................................................................................................................................................51
Grade : Sigle;......................................................................................................................................................................51
Indice : Integer;..................................................................................................................................................................51
Posit : (Cadre, PasCadre);..................................................................................................................................................51
Famille : Famil (* champ variant donc dernier champ *).................................................................................................51
END;....................................................................................................................................................................................51
Var.........................................................................................................................................................................................51
Laboratoire : Array [1..MaxIndividu] of Individu;.............................................................................................................51
Cette structure de données s'adapte à chaque employé suivant sa situation familiale........................................................51
Soit Laboratoire[1], un individu marié ayant 3 enfants :.....................................................................................................52
Type enregistrement..............................................................................................................................................................46
-Laboratoire[1].Famille.Situ = Marie..................................................................................................................................52
On accède à ses différents champs :.....................................................................................................................................52
WITH Laboratoire[1] DO.....................................................................................................................................................52
Begin......................................................................................................................................................................................52
WITH Identit DO.................................................................................................................................................................52
Begin....................................................................................................................................................................................52
Nom := 'DUPONT';............................................................................................................................................................52
Prenom := 'Jules';...............................................................................................................................................................52
Age := 30;...........................................................................................................................................................................52
Sexe := Masculin;...............................................................................................................................................................52
End;......................................................................................................................................................................................52
WITH Adres DO..................................................................................................................................................................52
Begin....................................................................................................................................................................................52
Numerorue := 34;...............................................................................................................................................................52
Nomrue := 'SIAM';.............................................................................................................................................................52
Codepostal := '29200';........................................................................................................................................................52
Ville := 'BREST';...............................................................................................................................................................52
End;......................................................................................................................................................................................52
WITH Famille DO................................................................................................................................................................52
Begin....................................................................................................................................................................................52
WITH Conjoint DO............................................................................................................................................................52
Begin..................................................................................................................................................................................52
Nom := 'DUPONT';..........................................................................................................................................................52
Prenom := 'Chantal';.........................................................................................................................................................52
Age := 28;.........................................................................................................................................................................52
Sexe := Feminin;..............................................................................................................................................................52
End;....................................................................................................................................................................................52
Nbenfant := 3;.....................................................................................................................................................................52
WITH Enfant[1] DO..........................................................................................................................................................52
Begin..................................................................................................................................................................................52
Nom := 'DUPONT';..........................................................................................................................................................52
Prenom := 'Herve';............................................................................................................................................................52
Age := 3;...........................................................................................................................................................................52
Sexe := Masculin;.............................................................................................................................................................52
End;....................................................................................................................................................................................52
etc .......................................................................................................................................................................................52
XII TYPE ENSEMBLE.........................................................................................................................................................53
Type ensemble.......................................................................................................................................................................53
Un ensemble est une collection d'objets de même nature. Chaque objet dans un ensemble est appelé un membre ou un
élément de l'ensemble. Deux ensembles sont égaux si et seulement si leurs éléments sont les mêmes. Il n'y a pas de
notion d'ordre et les ensembles [1,3,5], [5,3,1] et [3,5,1] sont tous égaux. Si les membres d'un ensemble sont également
les membres d'un autre ensemble, alors le premier est dit inclus dans le second................................................................53
XII.1 DEFINITION DE TYPE ENSEMBLE........................................................................................53
Les membres d'un ensemble doivent tous être du même type appelé le type de base et le type de base doit être un type
scalaire. Le type ensemble est défini par le mot réservé SET OF suivi d'un type simple...................................................53
EXEMPLES:..........................................................................................................................................................................53
Type......................................................................................................................................................................................53
JourduMois = SET OF 0..31;............................................................................................................................................53
JourSemaine = (Lun,Mar,Mer,Jeu,Ven,Sam,Dim);..........................................................................................................53
JourTravail = SET OF Lun..Ven;......................................................................................................................................53
Lettre = SET OF 'A'..'Z';...................................................................................................................................................53
Dans TURBO PASCAL, le nombre maximum d'éléments d'un ensemble est 256 et les valeurs ordinales de type de base
doivent être comprises entre 0 et 255....................................................................................................................................53
XII.2 EXPRESSIONS ENSEMBLE.....................................................................................................53
Les valeurs de type ensemble peuvent être calculées à partir d'autres valeurs de type ensemble grâce à des expressions
ensemble qui sont constituées de constantes ensemble, de variables ensemble, de constructions d'ensembles et
d'opérateurs sur les ensembles...............................................................................................................................................53
XII.3 CONSTRUCTEURS D'ENSEMBLES........................................................................................53
Un constructeur d'ensemble est constitué d'une ou plusieurs spécifications d'éléments séparées par des virgules et entre
crochets...................................................................................................................................................................................53
Une spécification d'éléments est une expression du même type que le type de base de l'ensemble ou un intervalle
exprimé par deux expressions séparées par deux points.......................................................................................................53
EXEMPLES :........................................................................................................................................................................53
['T','U','R','B','O']..................................................................................................................................................................53
[X,Y].....................................................................................................................................................................................53
['A'..'Z','a'..'z','0'..'9'].............................................................................................................................................................53
[]............................................................................................................................................................................................53
Le dernier exemple montre l'ensemble vide qui n'a pas de type de base et qui est donc compatible avec tous les types
ensemble.................................................................................................................................................................................53
L'ensemble [1..5] est équivalent à [1,2,3,4,5]......................................................................................................................53
Si X > Y, alors [X..Y] dénote l'ensemble vide.....................................................................................................................53
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................53
XII.4 OPERATEURS SUR LES ENSEMBLES...................................................................................54
Les opérateurs sur les ensembles sont dans l'ordre de préséance :......................................................................................54
1-............................................................................................................................................................................................54
*.............................................................................................................................................................................................54
intersection d’ensembles.......................................................................................................................................................54
2-............................................................................................................................................................................................54
+.............................................................................................................................................................................................54
union d’ensembles.................................................................................................................................................................54
-..............................................................................................................................................................................................54
différence d’ensembles..........................................................................................................................................................54
3-............................................................................................................................................................................................54
=.............................................................................................................................................................................................54
test d’égalité..........................................................................................................................................................................54
<>...........................................................................................................................................................................................54
test d’inégalité.......................................................................................................................................................................54
>=...........................................................................................................................................................................................54
vrai si tous les éléments du second opérande sont inclus dans le premier..........................................................................54
<=...........................................................................................................................................................................................54
vrai si tous les éléments du premier opérande sont inclus dans le second..........................................................................54
IN...........................................................................................................................................................................................54
test d'appartenance. Le deuxième opérande est un type d'ensemble et le premier opérande est une expression du même
type que le type de base de l'ensemble. Le résultat est vrai si le premier opérande est un membre du second..................54
XII.5 AFFECTATIONS D'ENSEMBLE...............................................................................................54
Les valeurs résultant des expressions d'ensemble peuvent être affectées à des variables de type ensemble compatible par
l'opérateur :=...........................................................................................................................................................................54
EXEMPLES :........................................................................................................................................................................54
Type.......................................................................................................................................................................................54
Chiffres = Set of 0..9;...........................................................................................................................................................54
Var.........................................................................................................................................................................................54
A,B,C : Chiffres;..................................................................................................................................................................54
Begin......................................................................................................................................................................................54
A := [1,3,5,7];.......................................................................................................................................................................54
B := [2,3,4];..........................................................................................................................................................................54
C := A + B; C vaut [1,2,3,4,5,7]..........................................................................................................................................54
C := A * B; C vaut [3]..........................................................................................................................................................54
C := A - B; C vaut [1,5,7]....................................................................................................................................................54
Type.......................................................................................................................................................................................54
ASCII = Set of 0..127;..........................................................................................................................................................54
Var.........................................................................................................................................................................................54
NonImprimables,Imprimables,TousCaracteres : ASCII;....................................................................................................54
Begin......................................................................................................................................................................................54
TousCaracteres := [0..127];..................................................................................................................................................54
NonImprimables := [0..31,127];..........................................................................................................................................54
Imprimables := TousCaracteres - NonImprimables;...........................................................................................................54
End.........................................................................................................................................................................................54
XIII CONSTANTES AVEC TYPE.......................................................................................................................................55
Les constantes avec type sont une spécialité de TURBO PASCAL. Une constante avec type peut être utilisée
exactement comme une variable du même type. .................................................................................................................55
Les constantes avec type s'utilisent donc comme des variables initialisées, car la valeur d'une constante typée est définie
alors que la valeur d'une variable est indéfinie jusqu'à ce qu'une affectation soit faite. ....................................................55
L'emploi d'une constante avec type permet d'économiser du code car la constante typée n'est incluse dans le programme
qu'une seule fois alors qu'une constante sans type est incluse chaque fois qu'elle est utilisée. ..........................................55
Les constantes typées ne sont initialisées qu'une seule fois lors du démarrage du programme..........................................55
Les constantes avec type sont définies comme les constantes sans type. La définition spécifie non seulement la valeur
mais aussi le type de cette constante.....................................................................................................................................55
XIII.1 CONSTANTES DE TYPE SIMPLE..........................................................................................55
Une constante typée de type simple est une constante définie avec l'un des types scalaires..............................................55
Const.....................................................................................................................................................................................55
Nombre : Integer = 1234;...................................................................................................................................................55
Interet : Real = 10.5;...........................................................................................................................................................55
EnTete : String[7] = 'SECTION';.......................................................................................................................................55
Xon : Char = ^Q;.................................................................................................................................................................55
Une constante avec type peut être utilisée à la place d'une variable comme paramètre pour une procédure ou une
fonction. Une constante avec type est en fait une variable avec une valeur constante. Elle ne peut pas être utilisée dans
la définition d'autres constantes ou types..............................................................................................................................55
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................55
XIII.2 CONSTANTES AVEC TYPE STRUCTUREES......................................................................56
Constantes avec type.............................................................................................................................................................55
Les constantes structurées sont les constantes tableaux, les constantes enregistrements et les constantes ensembles. Leur
emploi permet d'initialiser facilement des tableaux et des ensembles.................................................................................56
XIII.2.1 CONSTANTES TABLEAUX.................................................................................................56
La définition d'une constante tableau est constituée de l'identificateur de la constante, suivi du signe = et de la constante
exprimée par un ensemble de constantes séparées par des virgules et entre parenthèses. Les constantes tableaux de
caractères peuvent être spécifiées soit par des caractères soit par des chaînes. La définition :...........................................56
Const......................................................................................................................................................................................56
Chiffres : Array [0..9] of char = ('0','1','2','3','4','5','6','7','8','9');........................................................................................56
peut s'écrire............................................................................................................................................................................56
Const......................................................................................................................................................................................56
Chiffres : Array [0..9] of char = '0123456789';...................................................................................................................56
XIII.2.2 CONSTANTES TABLEAUX MULTI-DIMENSIONNELS.................................................56
Les constantes tableaux multi-dimensionnels sont définies en entourant les constantes de chaque dimension entre
parenthèses, séparées par des virgules...................................................................................................................................56
EXEMPLE :...........................................................................................................................................................................56
Type.......................................................................................................................................................................................56
Cube = Array[0..1,0..1,0..1] of Integer;...............................................................................................................................56
Const......................................................................................................................................................................................56
GrandCube : Cube =(((0,1),(2,3)),((4,5),(6,7)));.................................................................................................................56
GrandCube [0,0,0] a pour valeur 0.....................................................................................................................................56
GrandCube [1,0,0] a pour valeur 4.....................................................................................................................................56
GrandCube [1,1,1] a pour valeur 7.....................................................................................................................................56
XIII.2.3 CONSTANTES ENREGISTREMENTS................................................................................57
Une constante enregistrement est définie par l'identificateur de constante, suivi du signe : et de l'identificateur d'un type
enregistrement préalablement défini suivi du signe = et de la valeur constante exprimée par une liste des constantes
champs, séparées par des ; et entre parenthèses....................................................................................................................57
EXEMPLES :........................................................................................................................................................................57
Type.......................................................................................................................................................................................57
Point = Record.....................................................................................................................................................................57
X, Y, Z : Integer;................................................................................................................................................................57
End;......................................................................................................................................................................................57
OS = (CPM80, CPM86, MSDOS, UNIX);.........................................................................................................................57
UI = (CCP, SomethingElse, MenuMaster);........................................................................................................................57
Computer = Record.............................................................................................................................................................57
OperatingSystems : Array [1..4] of OS;...........................................................................................................................57
UserInterface : UI;............................................................................................................................................................57
End;......................................................................................................................................................................................57
Const......................................................................................................................................................................................57
Origin : Point = (X:0; Y:0; Z:0);..........................................................................................................................................57
SuperComputer : Computer = .............................................................................................................................................57
(OperatingSystems : (CPM80, CPM86, MSDOS,UNIX);.................................................................................................57
UserInterface : MenuMaster);.............................................................................................................................................57
Plane1 : Array [1..3] of Point =...........................................................................................................................................57
((X:1;Y:4;Z:5),(X:10;Y:78;Z:45),(X:100;Y:10;Z:7));.......................................................................................................57
Si une constante enregistrement contient une partie variable, le programmeur doit spécifier seulement les champs de la
partie valide. Si la partie variante contient un sélecteur de champ, sa valeur doit être spécifiée........................................57
XIII.2.4 CONSTANTES ENSEMBLE.................................................................................................57
Une constante ensemble est constituée d'une ou plusieurs spécifications d'éléments séparées par des virgules et entre
crochets. La spécification d'un élément doit être une constante ou un intervalle exprimé par deux constantes séparées par
deux points..............................................................................................................................................................................57
EXEMPLES :........................................................................................................................................................................57
Type.......................................................................................................................................................................................57
Up = set of 'A'..'Z';...............................................................................................................................................................57
Low = set of 'a'..'z';..............................................................................................................................................................57
Const......................................................................................................................................................................................57
UpperCase : Up = ['A'..'Z'];..................................................................................................................................................57
Voyelles : Low = ['a','e','i','o','u','y'];....................................................................................................................................57
XIV PROCEDURES ET FONCTIONS.................................................................................................................................58
Un programme comprend une suite d'actions plus ou moins indépendantes. Un regroupement de certaines actions dans
des blocs permet de structurer un programme, ces blocs pouvant être exécutés sur demande. Cette structuration offre
deux avantages:......................................................................................................................................................................58
Le bloc ainsi défini correspond à une fonction bien précise qui est apparue lors de l'analyse du problème. Il peut donc
être écrit séparément, et au besoin se diviser lui-même en sous-blocs si son analyse fait apparaître d'autres fonctions
distinctes.................................................................................................................................................................................58
La fonction réalisée par un bloc peut être demandée en différents points du programme. Il est inutile de la réécrire
autant de fois que nécessaire, il suffit de demander l'exécution du bloc correspondant......................................................58
En PASCAL, ces blocs se réalisent par des sous-programmes que l'on nomme Procédure ou Fonction...........................58
Une procédure est activée dans un programme par un appel de procédure.........................................................................58
Une fonction est semblable à une procédure mais elle calcule et retourne une valeur lorsque son identificateur est
rencontré durant l'exécution...................................................................................................................................................58
XIV.1 LES PARAMETRES..................................................................................................................58
Des valeurs peuvent être passées à des procédures ou des fonctions par des paramètres. Les paramètres fournissent un
mécanisme de substitution permettant à la logique d'un sous-programme d'être utilisée avec différentes valeurs initiales,
donnant ainsi des résultats différents.....................................................................................................................................58
Un appel de procédure ou de fonction peut contenir une liste de paramètres, appelés les paramètres réels. Ils sont
substitués aux paramètres formels spécifiés dans l'en-tête du sous-programme..................................................................58
L'ordre des paramètres passés est l'ordre d'apparition dans la liste des paramètres............................................................58
Il existe trois sortes de paramètres en PASCAL classés suivant leur mode de transmission : par valeur, par adresse et par
adresse sans type. ...................................................................................................................................................................58
La syntaxe des listes de paramètres est la suivante:.............................................................................................................58
XIV.1.1 PARAMETRES PAR VALEUR.............................................................................................59
Lorsque les paramètres sont passés par valeur, le paramètre formel représente une variable locale au sous-programme et
tout changement du paramètre formel n'a pas d'effet sur le paramètre réel. Les types des paramètres formels et des
paramètres réels doivent correspondre..................................................................................................................................59
Ces paramètres sont déclarés dans l'en-tête du sous-programme comme dans l'exemple suivant:....................................59
Procedure Exemple(Nb1,Nb2:Nombre ; Ch1,Ch2:Txt);.....................................................................................................59
Nombre et Txt sont des types préalablement définis..........................................................................................................59
XIV.1.2 PARAMETRES PAR ADRESSE...........................................................................................59
Lorsqu'un paramètre est passé par adresse (on dit aussi par référence ou par variable), le paramètre formel représente en
fait le paramètre réel durant l'exécution du sous-programme. Toute modification apportée au paramètre formel affecte
donc le paramètre réel qui doit être une variable..................................................................................................................59
Les paramètres passés par référence sont déclarés précédés du mot réservé Var..............................................................59
Procedure Exemple(Var Resul1,Resul2:Integer);................................................................................................................59
Les paramètres par valeur et les paramètres variables peuvent être utilisés ensemble dans la même procédure..............59
Procedure Exemple(Var Resul1:Integer;Don1,Don2:integer);............................................................................................59
Tous les calculs d'adresses sont faits à l'appel de la procédure. Si une variable est un composant d'un tableau, ses
expressions d'index sont calculées lorsque le sous-programme est appelé...........................................................................59
Lorsque l'on veut passer une importante structure de données comme paramètre, par exemple un tableau, l'utilisation
d'un paramètre variable permet d'économiser de l'espace et du temps car la seule information passée au sous-programme
est l'adresse du paramètre réel...............................................................................................................................................59
XIV.1.3 PARAMETRES PAR ADRESSE SANS TYPE.....................................................................60
Si le type d'un paramètre formel n'est pas défini, c'est-à-dire si l'on omet la définition du type dans l'en-tête du sous-
programme, le paramètre est dit sans type. Le paramètre réel correspondant peut alors être de tout type. .......................60
Au sein de la procédure ou de la fonction, le paramètre est réellement sans type, donc il n'est compatible avec aucune
variable. La seule méthode pour briser son isolement est de lui appliquer un transtypage.................................................60
Exemple :...............................................................................................................................................................................60
Function Egal(Var Source,Dest ; Taille : Word) : Boolean;................................................................................................60
TYPE.....................................................................................................................................................................................60
Octets = Array[0..Maxint] of Byte;.....................................................................................................................................60
VAR.......................................................................................................................................................................................60
N : Integer;............................................................................................................................................................................60
Begin......................................................................................................................................................................................60
N := 0;...................................................................................................................................................................................60
While (N < Taille) And ( (Octets(Dest)[N]) = (Octets(Source)[N]) ) Do Inc(N);..............................................................60
Egal := N = Taille;...............................................................................................................................................................60
End;........................................................................................................................................................................................60
Cette fonction peut être utilisée pour comparer deux variables de toute taille et de tout type...........................................60
XIV.2 LE TYPE SOUS-PROGRAMME..............................................................................................60
Turbo Pascal autorise le type sous-programme grâce auquel on peut traiter des procédures et des fonctions comme des
objets.......................................................................................................................................................................................60
Type.......................................................................................................................................................................................60
Proc = Procedure;.................................................................................................................................................................60
Echange = Procedure(Var X, Y : Integer);..........................................................................................................................60
Var.........................................................................................................................................................................................60
P : Proc;................................................................................................................................................................................60
Q : Echange; ......................................................................................................................................................................60
Ces variables sous-programmes peuvent être l'objet d'affectations en respectant la compatibilité au niveau des
affectations (même nombre de paramètres, de mêmes type). De plus, il faut que la procédure (ou la fonction) devant être
affectée soit compilée avec la directive {$F+}, et que cette procédure (ou cette fonction) ne soit ni standard, ni
imbriquée, ni inline, ni interrupt. ..........................................................................................................................................60
Il est possible de déclarer des procédures et des fonctions utilisant des procédures et des fonctions en tant que
paramètres en respectant les mêmes règles de compatibilité que pour l'affectation............................................................60
XIV.3 LES PROCEDURES..................................................................................................................61
Une procédure peut être soit pré-déclarée, dite alors procédure standard, soit définie par l'utilisateur.............................61
Une déclaration de procédure est constituée d'un en-tête de procédure, suivie d'un bloc constitué d'une partie
déclaration et d'une partie instruction....................................................................................................................................61
L'en-tête de procédure est constitué du mot réservé Procedure suivi de l'identificateur de la procédure et des paramètres
éventuels.................................................................................................................................................................................62
La directive Interrupt insérée juste avant le début du corps de procédure transforme cette dernière en procédure
d'Interruption qui doit comporter la liste de paramètres suivante:........................................................................................62
Procedure Inter (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);..........................................................................62
La partie déclaration d'une procédure a la même forme que celle d'un programme..........................................................62
Tous les identificateurs déclarés dans la liste des paramètres formels et dans la partie déclaration sont locaux à cette
procédure et à toute procédure à l'intérieur de celle-ci.........................................................................................................62
La partie instruction indique l'action à exécuter lorsque la procédure est appelée, et elle a la forme d'une instruction
composée................................................................................................................................................................................62
EXEMPLE DE PROCEDURE:............................................................................................................................................63
Procédures et fonctions.........................................................................................................................................................58
Program Parametre;...............................................................................................................................................................63
Var.........................................................................................................................................................................................63
A,B :Integer;.........................................................................................................................................................................63
Procedure H(X:Integer;Var Y:Integer);................................................................................................................................63
Begin......................................................................................................................................................................................63
X := X + 1;............................................................................................................................................................................63
Y := Y + 1;............................................................................................................................................................................63
Writeln(X,Y);.......................................................................................................................................................................63
End; { of procedure H }........................................................................................................................................................63
Begin { Programme principal }..........................................................................................................................................63
A := 0; ..................................................................................................................................................................................63
B := 0;...................................................................................................................................................................................63
H(A,B);.................................................................................................................................................................................63
Writeln(A,B);........................................................................................................................................................................63
End.........................................................................................................................................................................................63
A l'exécution, on obtient : 1 1..............................................................................................................................................63
0 1........................................................................................................................................................................................63
XIV.4 LES FONCTIONS......................................................................................................................64
Les fonctions sont comme les procédures, soit standards, soit définies par le programmeur.............................................64
..............................................................................................................................................................................................64
La déclaration de fonction est constituée de l'en-tête de la fonction et d'un bloc, lui-même constitué d'une partie
déclaration suivie d'une partie instruction.............................................................................................................................64
L'en-tête de fonction est constitué du mot réservé Function suivi de l'identificateur de la fonction, suivi des paramètres
éventuels, suivi du signe : et du type du résultat de la fonction...........................................................................................64
Function KeyHit:Boolean;....................................................................................................................................................64
Function Puiss(X:real;N:Integer):Real;...............................................................................................................................64
Function Compute(Var Value:Integer):Real;......................................................................................................................64
Le type du résultat d'une fonction doit être un type simple (Integer, Real, Boolean, Char, Type scalaire déclaré ou
Intervalle), un type chaîne ou un type pointeur ....................................................................................................................64
EXEMPLES DE FONCTIONS:............................................................................................................................................65
Program Puissance;...............................................................................................................................................................65
Var.........................................................................................................................................................................................65
A : Real;................................................................................................................................................................................65
N : Integer;............................................................................................................................................................................65
Function Puiss(X : Real; N : Integer) : Real;........................................................................................................................65
Var.........................................................................................................................................................................................65
P : Real;................................................................................................................................................................................65
I : Integer;.............................................................................................................................................................................65
Begin......................................................................................................................................................................................65
P := 1;....................................................................................................................................................................................65
If N > 0 ................................................................................................................................................................................65
Then......................................................................................................................................................................................65
For I := 1 to N do P := P * X...............................................................................................................................................65
Else.......................................................................................................................................................................................65
For I := -1 Downto N Do P := P / X;..................................................................................................................................65
Puiss := P;.............................................................................................................................................................................65
End;........................................................................................................................................................................................65
Begin......................................................................................................................................................................................65
Write('Entrer un nombre : );.................................................................................................................................................65
Readln(A);............................................................................................................................................................................65
Write('Entrer son exposant : ');............................................................................................................................................65
Readln(N);............................................................................................................................................................................65
Writeln(A:10:2,Puiss(A,N));................................................................................................................................................65
End.........................................................................................................................................................................................65
Remarque : l'exemple suivant nécessite un examen approfondi pour sa bonne compréhension:.......................................65
Program Test;........................................................................................................................................................................65
Var.........................................................................................................................................................................................65
A, Z : Integer;.....................................................................................................................................................................65
Function Carre(X:Integer):Integer;.......................................................................................................................................65
Begin......................................................................................................................................................................................65
Z := Z - X;............................................................................................................................................................................65
Carre := Sqr(X);....................................................................................................................................................................65
End; { of Function Carre }....................................................................................................................................................65
Begin { Programme Principal }...........................................................................................................................................65
Z := 10; A := Carre(Z); Writeln(A,Z);.................................................................................................................................65
Z := 10; A := Carre(10) * Carre(Z); Writeln(A,Z);.............................................................................................................65
Z := 10; A := Carre(Z) * Carre(10); Writeln(A,Z);.............................................................................................................65
End.........................................................................................................................................................................................65
Le résultat de l'exécution est sous TP6 et TP7: 100 0..........................................................................................................65
10000 -10..............................................................................................................................................................................65
0 0.........................................................................................................................................................................................65
Attention : le résultat dépend de la version de TPascal (Différences avec les versions 5 et précédentes).........................65
XIV.5 DESCRIPTION DU PLAN DE LA MEMOIRE D'UN PROGRAMME TURBO PASCAL. . .65
Limite supérieure de la mémoire gérée par le DOS.............................................................................................................66
FreePtr....................................................................................................................................................................................66
Table des fragments..............................................................................................................................................................66
( croît vers le bas ).................................................................................................................................................................66
HeapPtr..................................................................................................................................................................................66
Mémoire disponible...............................................................................................................................................................66
HeapOrg.................................................................................................................................................................................66
Tas..........................................................................................................................................................................................66
( croît vers le haut )...............................................................................................................................................................66
OvrHeapEnd..........................................................................................................................................................................66
Tampon de recouvrement......................................................................................................................................................66
des partiels.............................................................................................................................................................................66
OvrHeapOrg..........................................................................................................................................................................66
SSeg:SPtr...............................................................................................................................................................................66
Pile.........................................................................................................................................................................................66
( croît vers le bas ).................................................................................................................................................................66
SSeg:0000..............................................................................................................................................................................66
Pile disponible.......................................................................................................................................................................66
Variables globales.................................................................................................................................................................66
DSeg:0000.............................................................................................................................................................................66
Constantes typées..................................................................................................................................................................66
Segment de code de...............................................................................................................................................................66
l’unité System........................................................................................................................................................................66
Contenu..................................................................................................................................................................................66
Segment de code de la...........................................................................................................................................................66
première unité........................................................................................................................................................................66
d’un........................................................................................................................................................................................66
Segment de code des.............................................................................................................................................................66
autres unités...........................................................................................................................................................................66
fichier.....................................................................................................................................................................................66
Segment de code du...............................................................................................................................................................66
programme principal.............................................................................................................................................................66
.EXE.......................................................................................................................................................................................66
PrefixSeg................................................................................................................................................................................66
Préfixe de segment de...........................................................................................................................................................66
programme.............................................................................................................................................................................66
Le Préfixe de Segment de Programme (PSP) est une zone de 256 octets créée par MS-DOS lors du chargement du
fichier .EXE............................................................................................................................................................................66
Chaque module (programme principal et les unités) possède son propre segment de code. La taille d'un segment de code
ne peut dépasser 64 Ko...........................................................................................................................................................66
Le segment de données (accessible par DS) contient toutes les constantes typées suivies par toutes les variables
globales. Le registre DS n'est jamais modifié pendant l'exécution du programme. Sa taille maximale est de 64 Ko........67
Les variables locales aux procédures et fonctions sont créées et stockées dans la pile (accessible par SS). Les
paramètres sont transmis aux procédures et fonctions par l'intermédiaire de la pile. Avant l'appel, les paramètres sont
placés sur la pile en suivant l'ordre de leur déclaration. Avant de s'achever, la procédure ou la fonction supprime les
paramètres de la pile...............................................................................................................................................................67
Les paramètres sont transmis par adresse ou par valeur. Quand un paramètre est transmis par adresse (référence), un
pointeur sur l'emplacement réel de stockage est placé sur la pile. Avec une transmission par valeur, c'est la valeur réelle
qui est placée sur la pile.........................................................................................................................................................67
La taille du segment de pile ne peut dépasser 64 Ko, sa taille par défaut (16 Ko) est modifiable grâce à la directive de
compilation {$M}...................................................................................................................................................................67
Le Tas (Heap) stocke les variables dynamiques (voir chapitre XVIII). Il occupe tout ou partie de la mémoire libre. La
taille réelle dépend des valeurs minimale et maximale qui peuvent être fixées par la directive de compilation {$M}.....67
XIV.6 PROCEDURES ET FONCTIONS STANDARD......................................................................67
En plus des procédures et des fonctions standards déjà décrites dans les chapitres précédents (manipulation de chaînes
ou de fichiers, allocations des variables dynamiques (Chapitre XVIII), procédures d'entrée/sortie), les procédures
suivantes sont disponibles. ....................................................................................................................................................67
XIV.6.1 PROCEDURES DE CONTROLE GENERAL.......................................................................67
EXIT Exit; .........................................................................................................................................................................67
Sortie immédiate du bloc courant (procédure ou fonction).................................................................................................67
HALT Halt [ (CodeSortie : Word)];...................................................................................................................................67
Arrêt de l'exécution du programme et retour au système d'exploitation. CodeSortie est une expression facultative qui
précise le code de sortie du programme................................................................................................................................67
RUNERROR RunError [ (ErreurCode : Byte)];..................................................................................................................67
Permet comme Halt de stopper l'exécution d'un programme, mais renvoie un code erreur d'exécution (ErreurCode, 0 s'il
est omis)..................................................................................................................................................................................67
XIV.6.2 PROCEDURES ET FONCTIONS D'ALLOCATION DYNAMIQUE DE MEMOIRE........68
DISPOSE Dispose(Var P : Pointer);....................................................................................................................................68
Libération d'une variable dynamique...................................................................................................................................68
FREEMEM FreeMem(Var P : Pointer; Taille : Word);......................................................................................................68
Libération d'une variable dynamique dont la taille est spécifiée lors de l'appel.................................................................68
GETMEM GetMem(Var P : Pointer; Taille : Word);.........................................................................................................68
Création d'une variable dynamique de taille spécifiée et affectation d'un pointeur sur cette variable...............................68
MARK Mark(Var P : Pointer);.............................................................................................................................................68
Mémorisation de l'adresse courante du pointeur de tas........................................................................................................68
MAXAVAIL MaxAvail: LongInt........................................................................................................................................68
Renvoie la taille du plus grand bloc contigu de mémoire disponible dans le tas au moment de l'appel............................68
MEMAVAIL MemAvail : LongInt.....................................................................................................................................68
Renvoie le nombre d'octets disponibles dans le tas, quel que soit son état de fragmentation............................................68
NEW New(Var P : Pointer);...............................................................................................................................................68
Création d'une variable dynamique et affectation d'un pointeur sur celle-ci......................................................................68
New(TypePointeur, Init(Liste Paramètres));.....................................................................................................................68
Création et Initialisation d'un objet créé dans le tas et renvoie un pointeur du type indiqué. Dans ce cas d'utilisation,
New attend le constructeur de l'objet en second paramètre..................................................................................................68
Ptr := New (T_Ptr, Init(5))); ...............................................................................................................................................68
New(T_Ptr(Ptr),Init(5));.......................................................................................................................................................68
RELEASE Release(Var P : Pointer);...................................................................................................................................68
Libération de l'espace mémoire situé au-dessus de l'adresse spécifiée...............................................................................68
XIV.6.3 FONCTIONS DE TRANSFERT.............................................................................................69
CHR Chr(Num) : Char........................................................................................................................................................69
Retourne le caractère dont la valeur ordinale est donnée par l'expression entière Num. ...................................................69
Exemple: Chr(65) retourne le caractère 'A'..........................................................................................................................69
ORD Ord(Var) : LongInt.....................................................................................................................................................69
Retourne la valeur ordinale de la valeur Var dans l'ensemble défini par le type Var. Var peut être de tout type scalaire
sauf réel et le résultat est du type entier................................................................................................................................69
ROUND Round(Num) : LongInt.........................................................................................................................................69
Retourne la valeur de Num arrondie à l'entier le plus proche selon les règles suivantes....................................................69
Si Num >= 0 alors Round(Num) = Trunc(Num + 0.5) ....................................................................................................69
sinon Round(Num) = Trunc(Num - 0.5). .......................................................................................................................69
Num doit être du type réel et le résultat est du type entier.................................................................................................69
TRUNC Trunc(Num) : LongInt...........................................................................................................................................69
Retourne le plus grand entier plus petit que ou égal à Num si Num >= 0 et le plus petit entier plus grand que ou égal à
Num dans le cas contraire. Num doit être du type réel et le résultat est du type entier.......................................................69
XIV.6.4 FONCTIONS ARITHMETIQUES.........................................................................................70
ABS Abs(Num) : Même type que Num..............................................................................................................................70
Retourne la valeur absolue de Num. L'argument Num doit être soit un réel soit un entier et le résultat est de même type
que l'argument........................................................................................................................................................................70
ARCTAN ArcTan(Num : Real) : Real................................................................................................................................70
Retourne l'angle en radians dont la tangente est Num. .......................................................................................................70
COS Cos(Num : Real) : Real..............................................................................................................................................70
Retourne le cosinus de Num. L'argument Num est exprimé en radians. ............................................................................70
EXP Exp(Num : Real) : Real..............................................................................................................................................70
Retourne l'exponentielle de Num. ........................................................................................................................................70
FRAC Frac(Num : Real) : Real..........................................................................................................................................70
Retourne la partie fractionnaire de Num, c'est-à-dire Frac(Num) = Num - Int(Num). ......................................................70
INT Int(Num : Real) : Real.................................................................................................................................................70
Retourne la partie entière de Num, c'est-à-dire Num sans aucune décimale. ....................................................................70
LN Ln(Num : Real) : Real..................................................................................................................................................70
Retourne le logarithme népérien de Num. ...........................................................................................................................70
PI Pi : Real...........................................................................................................................................................................70
Valeur de Pi (3.1415926535897935385)..............................................................................................................................70
SIN Sin(Num : Real) : Real................................................................................................................................................70
Retourne le sinus de Num. Num est exprimé en radians. ...................................................................................................70
SQR Sqr(Num) : Même type que Num...............................................................................................................................70
Retourne le carré de Num. Num doit être soit un réel soit un entier. .................................................................................70
SQRT Sqrt(Num : Real) : Real...........................................................................................................................................70
Retourne la racine carrée de Num. ......................................................................................................................................70
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................58
XIV.6.5 PROCEDURES ET FONCTIONS SCALAIRES...................................................................71
DEC Dec(Var X [; N : LongInt]);.......................................................................................................................................71
Décrément d'une variable scalaire........................................................................................................................................71
Dec(X) correspond à X := X - 1...........................................................................................................................................71
Dec(X,N) correspond à X := X – N.....................................................................................................................................71
INC Inc(Var X [; N : LongInt]);.........................................................................................................................................71
Incrément d'une variable scalaire..........................................................................................................................................71
Inc(X) correspond à X := X + 1...........................................................................................................................................71
Inc(X,N) correspond à X := X + N......................................................................................................................................71
ODD Odd(Num : LongInt) : Boolean.................................................................................................................................71
Retourne la valeur booléenne TRUE si Num est un nombre impair et FALSE si Num est un nombre pair......................71
PRED Pred(Num) : Même type que Num..........................................................................................................................71
Retourne le prédécesseur de Num s'il existe. Num peut être de tout type scalaire.............................................................71
SUCC Succ(Num) : Même type que Num..........................................................................................................................71
Retourne le successeur de Num s'il existe. Num peut être de tout type scalaire.................................................................71
XIV.6.6 FONCTIONS DE POINTEUR ET D'ADRESSE...................................................................72
ADDR Addr(X) : Pointer....................................................................................................................................................72
Renvoie l'adresse en mémoire de l'objet spécifié. X peut être une variable, une fonction ou une procédure....................72
CSEG Cseg : Word..............................................................................................................................................................72
Renvoie le contenu actuel du registre CS.............................................................................................................................72
DSEG Dseg : Word.............................................................................................................................................................72
Renvoie du contenu actuel du registre DS............................................................................................................................72
OFS Ofs(X) : Word.............................................................................................................................................................72
Renvoie la partie déplacement (offset) de l'adresse de l'objet spécifié. X peut être une variable, une fonction ou une
procédure. ..............................................................................................................................................................................72
PTR Ptr(Seg, Dep : Word) : Pointer...................................................................................................................................72
Conversion d'une adresse spécifiée sous la forme "segment, déplacement" en une valeur de type pointeur. ..................72
SEG Seg(X) : Word.............................................................................................................................................................72
Renvoie la partie segment de l'adresse de l'objet spécifié. X peut être une variable, une fonction ou une procédure......72
SPTR Sptr : Word................................................................................................................................................................72
Renvoie le contenu actuel du registre SP.............................................................................................................................72
SSEG SSeg : Word..............................................................................................................................................................72
Renvoie le contenu actuel du registre SS.............................................................................................................................72
XIV.6.7 PROCEDURES ET FONCTIONS DIVERSES......................................................................73
FILLCHAR FillChar(Var X; Num : Word; Ch : Value);....................................................................................................73
Remplit une partie de la mémoire avec une valeur donnée. X est une variable de n'importe quel type, Num une
expression de type Word et Value un type scalaire quelconque. La procédure FillChar écrit la valeur de Ch dans Num
octets contigus en commençant au premier octet occupé par X...........................................................................................73
HI Hi(I) : Byte.....................................................................................................................................................................73
Renvoie l'octet de poids fort de son argument. I est une expression de type entier ou mot. .............................................73
LO Lo(I) : Byte...................................................................................................................................................................73
Renvoie l'octet de poids faible de son argument. I est une expression de type entier ou mot............................................73
MOVE Move(Var Source, Dest ; Nombre : Word);............................................................................................................73
Effectue une copie directe en mémoire du nombre d'octets spécifié. Source et Dest sont des paramètres de tout type
transmis par référence. La procédure recopie un bloc de Nombre octets en commençant au premier octet occupé par
Source, à l'emplacement commençant au premier octet occupé par Dest. La procédure Move gère automatiquement les
recouvrements éventuels durant les processus de recopie.....................................................................................................73
PARAMCOUNT ParamCount : Word..................................................................................................................................73
Renvoie le nombre de paramètres passés au programme dans la ligne de commande. Les espaces et les caractères de
tabulation servent comme séparateurs...................................................................................................................................73
PARAMSTR ParamStr(N : Word) : String..........................................................................................................................73
Cette fonction chaîne retourne le Nième paramètre de la ligne de commande ou une chaîne vide (si N est égal à 0 ou si
N est supérieur à ParamCount)..............................................................................................................................................73
RANDOM Random : Real...................................................................................................................................................73
Retourne un nombre aléatoire plus grand que ou égal à zéro et plus petit que un. ............................................................73
Random(Num : Word) : Word..........................................................................................................................................73
Retourne un nombre aléatoire plus grand que ou égal à zéro et plus petit que Num. ........................................................73
RANDOMIZE Randomize;...................................................................................................................................................73
Initialise le générateur de nombre aléatoire avec une valeur aléatoire................................................................................73
SIZEOF SizeOf(Name) : Word............................................................................................................................................73
Retourne le nombre d'octets occupé en mémoire par la variable ou le type Name............................................................73
SWAP Swap(Num) : même type que Num........................................................................................................................73
Inversion des octets de poids fort et de poids faible de l'argument. Num est une expression de type entier ou mot........74
UPCASE UpCase(Ch : Char) : Char....................................................................................................................................74
Retourne la majuscule équivalente de son argument. Si Ch n'appartient pas à l'intervalle a..z, Ch est retourné inchangé.
.................................................................................................................................................................................................74
XIV.6.8 VARIABLES PREDECLAREES DE L'UNITE SYSTEM....................................................74
Variables non initialisées :....................................................................................................................................................74
Input.......................................................................................................................................................................................74
Text........................................................................................................................................................................................74
Fichier d'entrée standard.......................................................................................................................................................74
OutPut....................................................................................................................................................................................74
Text........................................................................................................................................................................................74
Fichier de sortie standard......................................................................................................................................................74
SaveIntxy...............................................................................................................................................................................74
POINTER...............................................................................................................................................................................74
Sauvegarde de l'interruption $xy où xy peut être 00, 02, 1B, 23, 24, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F, 75
.................................................................................................................................................................................................74
Variables initialisées :...........................................................................................................................................................74
OvrCodeList..........................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Liste des segments du tampon de recouvrement..................................................................................................................74
OvrHeapSize..........................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Taille initiale du tampon de recouvrement...........................................................................................................................74
OvrDebugPtr..........................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Pointeur de débogage............................................................................................................................................................74
OvrHeapOrg..........................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Origine du tampon de recouvrement....................................................................................................................................74
OvrHeapPtr............................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Pointeur de tampon de recouvrement...................................................................................................................................74
OvrHeapEnd..........................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Fin du tampon de recouvrement...........................................................................................................................................74
OvrLoadList...........................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Listes des partiels chargés.....................................................................................................................................................74
OvrDosHandle.......................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Gestionnaire DOS du recouvrement.....................................................................................................................................74
OvrEmsHandle......................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Gestionnaire EMS du recouvrement.....................................................................................................................................74
HeapOrg.................................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Origine du Tas.......................................................................................................................................................................74
HeapPtr..................................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Pointeur du Tas......................................................................................................................................................................74
FreePtr....................................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Pointeur table des fragments.................................................................................................................................................74
FreeMin..................................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Taille minimale table des fragments.....................................................................................................................................74
HeapError..............................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Fonction d'erreur du Tas........................................................................................................................................................74
ExitProc.................................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Procédure de sortie Exit........................................................................................................................................................74
ExitCode................................................................................................................................................................................74
Integer = 0..............................................................................................................................................................................74
Code de sortie........................................................................................................................................................................74
ErrorAddr...............................................................................................................................................................................74
Pointer = NIL.........................................................................................................................................................................74
Adresse erreur d'exécution....................................................................................................................................................74
PrefixSeg................................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Préfixe de segment de programme........................................................................................................................................74
StackLimit.............................................................................................................................................................................74
Word = 0................................................................................................................................................................................74
Limite inférieure du pointeur de pile....................................................................................................................................74
InOutRes................................................................................................................................................................................74
Integer = 0..............................................................................................................................................................................74
Tampon de résultat des E/S...................................................................................................................................................74
RandSeed...............................................................................................................................................................................74
LongInt = 0............................................................................................................................................................................74
Nombre aléatoire initial........................................................................................................................................................74
FileMode................................................................................................................................................................................74
Byte = 2.................................................................................................................................................................................74
Mode d'ouverture fichier.......................................................................................................................................................74
Test87....................................................................................................................................................................................74
Byte = 0.................................................................................................................................................................................74
Résultat du test de présence 80x87.......................................................................................................................................74
XIV.7 DECLARATIONS FORWARD-EXTERNAL-INLINE............................................................75
FORWARD...........................................................................................................................................................................75
Si un sous-programme P doit appeler un autre sous-programme Q, il est nécessaire de déclarer le sous-programme Q
avant le sous-programme P....................................................................................................................................................75
Si P appelle Q Déclaration de Q..........................................................................................................................................75
-............................................................................................................................................................................................75
-............................................................................................................................................................................................75
Déclaration de P..................................................................................................................................................................75
Si un sous-programme P doit appeler un sous-programme Q qui doit lui-même appeler P, il est nécessaire de préciser
que le deuxième sous-programme est déclaré plus loin dans le programme. Ceci est réalisé en spécifiant son en-tête
séparément du bloc. L'en-tête du sous-programme séparé est exactement comme une en-tête normale, sauf qu'elle se
termine par le mot réservé Forward.......................................................................................................................................75
Le bloc se trouve plus loin dans la même partie déclaration et commence par une copie de l'en-tête spécifiant seulement
le nom et sans paramètre ni type............................................................................................................................................75
EXEMPLE:............................................................................................................................................................................75
Program Essai;.......................................................................................................................................................................75
Var.........................................................................................................................................................................................75
I : Integer;............................................................................................................................................................................75
Procedure Q(A:Integer);Forward; {déclaration différée}...................................................................................................75
Procedure P(B:Integer);.........................................................................................................................................................75
Begin......................................................................................................................................................................................75
-.............................................................................................................................................................................................75
Q(B);.....................................................................................................................................................................................75
-.............................................................................................................................................................................................75
End;........................................................................................................................................................................................75
Procedure Q; {déclaration descriptive}................................................................................................................................75
Begin......................................................................................................................................................................................75
-.............................................................................................................................................................................................75
P(A);......................................................................................................................................................................................75
-.............................................................................................................................................................................................75
End;........................................................................................................................................................................................75
Begin { Programme Principal }...........................................................................................................................................75
-.............................................................................................................................................................................................75
I := 3;....................................................................................................................................................................................75
Q(I);......................................................................................................................................................................................75
-.............................................................................................................................................................................................75
End.........................................................................................................................................................................................75
Remarques :...........................................................................................................................................................................76
La partie déclaration descriptive d'une procédure FORWARD peut être une déclaration EXTERNAL; il ne peut, en
revanche, s'agir ni d'une déclaration INLINE ni d'une autre déclaration FORWARD. Elle ne peut pas contenir non plus
la directive INTERRUPT.......................................................................................................................................................76
Les déclarations FORWARD sont interdites dans la partie INTERFACE d'une unité.......................................................76
EXTERNAL..........................................................................................................................................................................76
Le mot réservé External déclare des sous-programmes comme étant externes c'est-à-dire permettant d'interfacer les
programmes avec des procédures ou fonctions écrites en langage d'assemblage (fichiers .OBJ). .....................................76
Un sous-programme externe n'a pas de bloc, seule l'en-tête est spécifiée, suivie du mot réservé External. Le fichier
correspondant doit être lié au programme ou à l'unité par la directive {$L Nom_de_Fichier}...........................................76
EXEMPLE:...........................................................................................................................................................................76
Procedure Deplace(Var Source, Dest: LongInt); External;................................................................................................76
{$L BLOC.OBJ}.................................................................................................................................................................76
ASM.......................................................................................................................................................................................76
Les déclarations assembler permettent d'écrire des procédures entièrement en assembleur..............................................76
EXEMPLE:...........................................................................................................................................................................76
Function LongMul(X, Y : Integer) : LongInt; Assembler ;................................................................................................76
asm........................................................................................................................................................................................76
MOV AX, X.......................................................................................................................................................................76
IMUL Y...............................................................................................................................................................................76
end;.......................................................................................................................................................................................76
L'instruction ASM permet d'insérer une ou plusieurs instructions assembleur séparées par un point-virgule, un saut de
ligne ou un commentaire Pascal............................................................................................................................................76
EXEMPLE:...........................................................................................................................................................................76
If Inter_Autorise ..................................................................................................................................................................76
Then ....................................................................................................................................................................................76
asm STI end.......................................................................................................................................................................76
Else .....................................................................................................................................................................................76
asm CLI end;......................................................................................................................................................................76
INLINE..................................................................................................................................................................................77
La directive INLINE permet d'insérer directement des instructions en code machine au sein d'un flot d'instructions
(l'effet de cette directive est proche des macro-instructions disponibles en langage d'assemblage). .................................77
Ces directives ne contiennent ni déclaration locale ni bloc Begin..End. Leur structure ne comporte que l'en-tête suivi
par une instruction en ligne....................................................................................................................................................77
EXEMPLE : ......................................................................................................................................................................77
Procedure ActvInterr ; INLINE($FA) ; { mnémonique = CLI }.......................................................................................77
L'instruction inline permet d'insérer un ou plusieurs éléments en ligne séparés par une barre (/) et encadrés par des
parenthèses. Les instructions inline peuvent être librement mélées aux autres instructions...............................................77
EXEMPLE:............................................................................................................................................................................77
Function LongMul(X, Y : Integer) : LongInt;......................................................................................................................77
INLINE ( $58 / { POP AX soit POP Y }...........................................................................................................................77
$5A / { POP DX soit POP X }..........................................................................................................................................77
$F7 / $EA ) ; { IMUL DX soit DX:AX = X * Y }.............................................................................................................77
XV LA RECURSIVITE.........................................................................................................................................................78
Le langage PASCAL autorise la récursivité simple et la récursivité croisée. Il y a récursivité simple lorsqu'une fonction
ou une procédure en cours d'exécution s'appelle elle-même, et demande donc une nouvelle activation. Il y a récursivité
croisée entre deux procédures A et B si la procédure A appelle la procédure B qui elle-même appelle la procédure A...78
XV.1 LA RECURSIVITE SIMPLE......................................................................................................78
Un exemple de récursivité simple est le suivant:.................................................................................................................78
Procedure Rec(...);.................................................................................................................................................................78
Begin......................................................................................................................................................................................78
-.............................................................................................................................................................................................78
Rec(...);.................................................................................................................................................................................78
-.............................................................................................................................................................................................78
End;........................................................................................................................................................................................78
L'emploi de la récursivité est pratique pour résoudre les problèmes dont la définition est naturellement récursive.........78
Soit par exemple le calcul de Factorielle N:........................................................................................................................78
N! = N * (N-1) * (N-2) * . . . * 2 * 1....................................................................................................................................78
La fonction suivante permet ce calcul:.................................................................................................................................78
Program Factoriel;.................................................................................................................................................................78
Var.........................................................................................................................................................................................78
N : LongInt;.........................................................................................................................................................................78
Function Fact (M : LongInt):LongInt;..................................................................................................................................78
Begin......................................................................................................................................................................................78
If M > 1 ................................................................................................................................................................................78
Then Fact := M * Fact(M-1)................................................................................................................................................78
Else Fact := 1;......................................................................................................................................................................78
End;........................................................................................................................................................................................78
Begin......................................................................................................................................................................................78
Write('ENTRER UN NOMBRE ENTIER ');......................................................................................................................78
Readln(N);............................................................................................................................................................................78
Writeln('La Factorielle de ',N:5,' EST ',Fact(N):6);............................................................................................................78
End.........................................................................................................................................................................................78
Remarque: il existe bien entendu une méthode plus simple pour résoudre ce problème...................................................78
Pour bien comprendre le fonctionnement de la récursivité, il faut bien connaître comment un sous-programme est
activé.......................................................................................................................................................................................79
La récursivité.........................................................................................................................................................................78
Lors de l'appel, il y a création des variables locales au sous-programme, chaque appel se traduit par une réservation de
mémoire différente pour les variables locales......................................................................................................................79
Les paramètres effectifs sont passés. Il s'agit d'une valeur pour les paramètres par valeur et d'une adresse pour les
paramètres par variables........................................................................................................................................................79
Le sous-programme s'exécute en travaillant avec ses variables locales..............................................................................79
A la fin de l'exécution, il y a restitution de la zone mémoire réservée aux variables locales, donc destruction de celle-
ci. Dans le cas d'une fonction, il y a retour du résultat........................................................................................................79
Dans l'exemple précédent, le calcul de Factorielle 4 se traduit par:...................................................................................79
Première activation de la fonction Fact(M) .........................................................................................................................79
avec la variable locale M = 4 qui calcule 4 * Fact(3).........................................................................................................79
Deuxième activation de la fonction Fact(M)........................................................................................................................79
avec la variable locale M = 3 qui calcule 3 * Fact(2)..........................................................................................................79
Troisième activation de la fonction Fact(M)........................................................................................................................79
avec la variable locale M = 2 qui calcule 2 * Fact(1)..........................................................................................................79
Quatrième activation de la fonction Fact(M).......................................................................................................................79
avec la variable locale M = 1 qui rend la valeur 1...............................................................................................................79
Il n'y a pas d'autre activation, cette fonction se termine en End et rend la valeur 1..........................................................79
Retour à la troisième activation avec la valeur Fact = 1 qui se termine donc avec ...........................................................79
Fact = 2 * Fact(1) = 2 * 1 = 2...............................................................................................................................................79
Cette activation se termine donc en rendant la valeur 2......................................................................................................79
Retour à la deuxième activation avec la valeur Fact = 2 qui se termine par ......................................................................79
Fact = 3 * Fact(2) = 3 * 2 = 6..............................................................................................................................................79
Cette activation se termine donc en rendant la valeur 6.....................................................................................................79
Retour à la première activation avec la valeur Fact = 6 qui se termine par........................................................................79
Fact = 4 * Fact(3) = 4 * 6 = 24.............................................................................................................................................79
L'appel à la fonction rend donc 24........................................................................................................................................79
XV.2 LA RECURSIVITE CROISEE....................................................................................................80
Il y a récursivité croisée lorsqu'un sous-programme A appelle un sous-programme B qui appelle lui-même le sous-
programme A ou lorsqu'un sous-programme A appelle un sous- programme B qui appelle un sous-programme C qui
rappelle le sous-programme A ou le sous-programme B......................................................................................................80
Il faut bien entendu utiliser la déclaration Forward qui permet une déclaration en-avant d'un sous-programme.............80
EXEMPLE:............................................................................................................................................................................80
Procedure Recur2(Paramètres Formels);FORWARD;.........................................................................................................80
Procedure Recur1(Paramètres Formels);..............................................................................................................................80
Begin......................................................................................................................................................................................80
... ..........................................................................................................................................................................................80
Recur2(Paramètres effectifs);..............................................................................................................................................80
... ..........................................................................................................................................................................................80
End;........................................................................................................................................................................................80
...........................................................................................................................................................................................80
Procedure Recur2;.................................................................................................................................................................80
Begin......................................................................................................................................................................................80
... ......................................................................................................................................................................................80
Recur1(Paramètres effectifs);..............................................................................................................................................80
... ..........................................................................................................................................................................................80
End;........................................................................................................................................................................................80
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................78
XVI LES UNITES..................................................................................................................................................................81
Une unité est un ensemble de constantes, types de données, variables, procédures et fonctions.......................................81
Elle peut comporter un point d'entrée principal qui sera appelé avant le début du programme pour exécuter différentes
initialisations...........................................................................................................................................................................81
XVI.1 SYNTAXES RELATIVES AUX UNITES................................................................................81
Le nom de l'unité est celui référencé dans les clauses Uses................................................................................................81
PARTIE INTERFACE..........................................................................................................................................................81
La partie interface ne comporte que l'en-tête de procédure ou de fonction. Le corps de la procédure ou de la fonction se
trouve dans la partie implémentation.....................................................................................................................................81
L'en-tête de procédure ou de fonction peut être mentionné à nouveau dans la partie implémentation mais l'on n'a pas
besoin de spécifier à nouveau la liste des paramètres formels..............................................................................................81
Le Turbo Pascal est livré avec neuf unites :.........................................................................................................................82
CRT........................................................................................................................................................................................82
permet d'exploiter la puissance de l'affichage et du clavier du PC......................................................................................82
DOS........................................................................................................................................................................................82
donne accès à de nombreuses fonctions du DOS.................................................................................................................82
PRINTER...............................................................................................................................................................................82
permet d'accéder à l'imprimante...........................................................................................................................................82
SYSTEM................................................................................................................................................................................82
est la librairie de phase d'exécution de Turbo Pascal. Cette unité est automatiquement référencée..................................82
OVERLAY............................................................................................................................................................................82
contient le mécanisme de gestion des partiels......................................................................................................................82
GRAPH..................................................................................................................................................................................82
est un module graphique acceptant les normes d'affichage CGA, EGA, VGA, Hercules, IBM 3270 PC, MCGA, AT&T
6300 et IBM 8514...................................................................................................................................................................82
GRAPH3................................................................................................................................................................................82
contient les fonctions du graphisme du Turbo Pascal 3.......................................................................................................82
TURBO3................................................................................................................................................................................82
assure la compatibilité ascendante avec la version 3 du Turbo Pascal................................................................................82
WINDOS...............................................................................................................................................................................82
Cette unité rassemble les services liés au système d'exploitation et à la gestion des fichiers............................................82
XVI.2 L'UNITE CRT............................................................................................................................83
L'unité standard CRT contient les variables, procédures et fonctions suivantes :..............................................................83
ASSIGNCRT AssignCrt(Var F : Text);................................................................................................................................83
AssignCrt agit exactement comme la procédure Assign (cf chapitre XIV) à la différence près qu'aucun nom de fichier
disque n'est spécifié. La variable de type fichier texte est associée à l'écran.......................................................................83
CHECKBREAK Variable de type Boolean..........................................................................................................................83
Permet à un programme d'être ou non sensible à la frappe de la séquence d'interruption utilisateur Ctrl-Break au
clavier. CheckBreak est égale à TRUE par défaut................................................................................................................83
CHECKEOF Variable de type Boolean................................................................................................................................83
Active et désactive la génération du marqueur de fin de fichier lors des lectures clavier. CheckEOF est égale à FALSE
par défaut................................................................................................................................................................................83
CHECKSNOW Variable de type Boolean...........................................................................................................................83
Active et désactive le test d'écran neigeux qui peut s'avérer nécessaire lors des écritures directes dans la mémoire vidéo.
CheckSnow est égale à TRUE quand un mode texte couleur est sélectionné......................................................................83
CLREOL ClrEol;...................................................................................................................................................................83
Efface tous les caractères de la position du curseur jusqu'à la fin de la ligne sans changer la position du curseur...........83
CLRSCR ClrScr;...................................................................................................................................................................83
Efface l'écran et place le curseur en haut à gauche de l'écran. Cette procédure agit par rapport à la fenêtre active.........83
DELAY Delay(ms : Word);..................................................................................................................................................83
Attente de ms millisecondes (approximatif).........................................................................................................................83
DELLINE DelLine;...............................................................................................................................................................83
Efface la ligne sur laquelle est positionné le curseur. Toutes les lignes suivantes sont remontées d'une ligne.................83
DIRECTVIDEO Variable de type Boolean..........................................................................................................................83
Active et désactive l'accès direct à la mémoire vidéo pour les instructions Write et Writeln qui affichent des caractères
à l'écran. DirectVideo est égale à TRUE par défaut.............................................................................................................83
GOTOXY GotoXY(X, Y : Byte);.........................................................................................................................................83
Positionne le curseur à la colonne X et à la ligne Y, le coin supérieur gauche étant le point de coordonnées 1,1............83
HIGHVIDEO HighVideo;.....................................................................................................................................................83
Initialise l'affichage des caractères en sur-intensité.............................................................................................................83
INSLINE InsLine;.................................................................................................................................................................84
Insère une ligne vide à la position du curseur......................................................................................................................84
KEYPRESSED KeyPressed : Boolean.................................................................................................................................84
Renvoie la valeur booléenne True si une touche du clavier a été touchée. Le caractère est disponible dans la mémoire
tampon....................................................................................................................................................................................84
LASTMODE variable de type Word....................................................................................................................................84
La variable LastMode mémorise la valeur du mode vidéo courant avant tout changement de mode vidéo......................84
LOWVIDEO LowVideo;......................................................................................................................................................84
Initialise l'affichage des caractères en sous-intensité...........................................................................................................84
NORMVIDEO NormVideo;..................................................................................................................................................84
Restaure l'attribut video du mode texte tel qu'il a été lu à la position du curseur lors de l'entrée dans le programme......84
NOSOUND NoSound;...........................................................................................................................................................84
Désactive le haut-parleur interne..........................................................................................................................................84
READKEY ReadKey : Char.................................................................................................................................................84
Lit un caractère frappé au clavier. Le caractère lu n'est pas visualisé.................................................................................84
SOUND Sound(Hz : Word);.................................................................................................................................................84
Active le haut-parleur interne...............................................................................................................................................84
TEXTATTR Variable de type Byte......................................................................................................................................84
La variable TextAttr mémorise les attributs vidéo courants. Vous pouvez modifier les attributs vidéo en écrivant
directement dans la variable TextAttr dont la structure est donnée ci-dessous:...................................................................84
Bit...........................................................................................................................................................................................84
7.............................................................................................................................................................................................84
6.............................................................................................................................................................................................84
5.............................................................................................................................................................................................84
4.............................................................................................................................................................................................84
3.............................................................................................................................................................................................84
2.............................................................................................................................................................................................84
1.............................................................................................................................................................................................84
0.............................................................................................................................................................................................84
B.............................................................................................................................................................................................84
f..............................................................................................................................................................................................84
f..............................................................................................................................................................................................84
f..............................................................................................................................................................................................84
c..............................................................................................................................................................................................84
c..............................................................................................................................................................................................84
c..............................................................................................................................................................................................84
c..............................................................................................................................................................................................84
où B est le bit de clignotement, fff reçoit les 3 bits de la couleur de fond et cccc reçoit les 4 bits de la couleur du
caractère..................................................................................................................................................................................84
Cf TextColor, TextBackGround...........................................................................................................................................84
TEXTBACKGROUND TextBackGround(Couleur: Byte);.................................................................................................84
Définit la couleur du fond d'affichage. Couleur est une expression choisie dans l'intervalle 0..7.....................................84
Cf TextColor .........................................................................................................................................................................84
TEXTCOLOR TextColor(Couleur : Byte);..........................................................................................................................85
Définit la couleur d'affichage des caractères. Couleur est une expression choisie dans l'intervalle 0..15.........................85
Black = 0 Brown = 6 LightRed = 12............................................................................................................................85
Blue = 1 LightGray = 7 LightMagenta = 13.................................................................................................................85
Green = 2 DarkGray = 8 Yellow = 14....................................................................................................................85
Cyan = 3 LightBlue = 9 White = 15......................................................................................................................85
Red = 4 LightGreen = 10 ...............................................................................................................................................85
Magenta = 5 LightCyan = 11 Blink = 128................................................................................................................85
TEXTMODE TextMode(Mode : Integer);...........................................................................................................................85
Définit un mode texte spécifique..........................................................................................................................................85
BW40 = 0 CO80 = 3.............................................................................................................................................................85
CO40 = 1 Mono = 4..............................................................................................................................................................85
BW80 = 2 Font8x8 = 256.....................................................................................................................................................85
WHEREX WhereX : Byte.....................................................................................................................................................85
Renvoie l'abscisse X de la position courante du curseur .....................................................................................................85
WHEREY WhereY : Byte.....................................................................................................................................................85
Renvoie l'ordonnée Y de la position courante du curseur ...................................................................................................85
WINDMIN, WINDMAX Variables de type Word...............................................................................................................85
Les variables WindMin et WindMax mémorisent les coordonnées écran de la fenêtre active. L'abscisse X est rangée
dans l'octet de poids faible et l'ordonnée Y dans l'octet de poids fort..................................................................................85
WINDOW Window(x1, y1, x2, y2 : Byte);..........................................................................................................................85
Définit une fenêtre d'affichage dans un écran texte. X1 et Y1 sont les coordonnées du coin supérieur gauche, X2 et Y2
les coordonnées du coin inférieur droit..................................................................................................................................85
XVI.3 L'UNITE DOS............................................................................................................................86
L'unité DOS contient un ensemble de sous-programmes liés au système d'exploitation et à la gestion des fichiers........86
Variable DosError.................................................................................................................................................................86
Cette variable est utilisée par de nombreux sous-programmes pour donner des renseignements sur les situations
d'erreurs..................................................................................................................................................................................86
La valeur 0 indique qu'il n'y a pas d'erreur...........................................................................................................................86
Autres codes d'erreurs...........................................................................................................................................................86
2.............................................................................................................................................................................................86
Fichier non trouvé.................................................................................................................................................................86
3.............................................................................................................................................................................................86
Chemin non trouvé................................................................................................................................................................86
5.............................................................................................................................................................................................86
Accès refusé...........................................................................................................................................................................86
6.............................................................................................................................................................................................86
Identificateur de fichier invalide...........................................................................................................................................86
8.............................................................................................................................................................................................86
Mémoire insuffisante.............................................................................................................................................................86
10...........................................................................................................................................................................................86
Environnement invalide........................................................................................................................................................86
11...........................................................................................................................................................................................86
Format invalide......................................................................................................................................................................86
18...........................................................................................................................................................................................86
Plus de fichiers......................................................................................................................................................................86
DISKFREE DiskFree(Disque : Word) : LongInt..................................................................................................................86
Renvoie la quantité d'octets disponibles sur l'unité de disque spécifiée. Disque = 0 signifie le disque courant, Disque =
1 le disqueA, Disque = 2 le disque B, etc..............................................................................................................................86
DISKSIZE DiskSize(Disque : Word) : LongInt...................................................................................................................86
Renvoie la capacité totale du disque spécifié, exprimée en octets......................................................................................86
DOSEXITCODE DosExitCode : Word................................................................................................................................86
Renvoie le code de sortie d'un sous-programme. L'octet de poids faible est le code renvoyé par le sous-programme qui
se termine. ..............................................................................................................................................................................86
L'octet de poids fort est égal à .............................................................................................................................................86
0 dans le cas d'une fin normale............................................................................................................................................86
1 en cas d'une fin provoquée par Ctrl-C..............................................................................................................................86
2 en cas d'erreur causée par un périphérique.......................................................................................................................86
3 en cas d'appel à la procédure Keep....................................................................................................................................86
DOSVERSION DosVersion : Word.....................................................................................................................................86
Renvoie le numéro de la version du DOS utilisé.................................................................................................................86
ENVCOUNT EnvCount : Integer.........................................................................................................................................86
Renvoie le nombre de chaînes de caractères que contient la zone d'environnement du DOS............................................86
ENVSTR EnvStr(I : Integer) : String....................................................................................................................................87
Extrait la Ième chaîne de l'environnement DOS. ................................................................................................................87
EXEC Exec(Chemin, LigneCmd : String);..........................................................................................................................87
Lance l'exécution d'un programme avec une ligne de commande.......................................................................................87
FEXPAND FExpand(chemin : PathStr) : PathStr................................................................................................................87
Perfectionne un nom de fichier en le transformant en spécification absolue d'accès. Le type PathStr est défini dans
l'unité DOS en tant que String[79].........................................................................................................................................87
FINDFIRST FindFirst(Chemin:String;Attr:Word;Var S:SearchRec);.................................................................................87
Cherche dans le répertoire spécifié la première entrée correspondant au nom de fichier et aux attributs indiqués. Chemin
est le masque de recherche. Attr est l'attribut défini dans l'unité DOS.................................................................................87
Constantes..............................................................................................................................................................................87
Valeur....................................................................................................................................................................................87
ReadOnly...............................................................................................................................................................................87
$01.........................................................................................................................................................................................87
Hidden....................................................................................................................................................................................87
$02.........................................................................................................................................................................................87
SysFile...................................................................................................................................................................................87
$04.........................................................................................................................................................................................87
VolumeId...............................................................................................................................................................................87
$08.........................................................................................................................................................................................87
Directory................................................................................................................................................................................87
$10.........................................................................................................................................................................................87
Archive..................................................................................................................................................................................87
$20.........................................................................................................................................................................................87
AnyFile..................................................................................................................................................................................87
$3F.........................................................................................................................................................................................87
SearchRec = RECORD........................................................................................................................................................87
Fill : Array[1..21] Of Byte;.................................................................................................................................................87
Attr : Byte; { Date }.........................................................................................................................................................87
Time : LongInt; { Heure }.................................................................................................................................................87
Size : LongInt; { Taille }....................................................................................................................................................87
Name : String[12]; { Nom_de_Fichier }...........................................................................................................................87
End;........................................................................................................................................................................................87
FINDNEXT FindNext(Var S : SearchRec);.........................................................................................................................87
Renvoie l'entrée suivante correspondant au nom et attributs définis dans un appel préalable à FindFirst.........................87
FSEARCH FSearch(Chemin: PathStr;ListeRep: String) : PathStr......................................................................................87
Recherche un nom de fichier dans une liste.........................................................................................................................87
FSPLIT .................................................................................................................................................................................87
FSplit(Chemin:PathStr;VarRep:DirStr;Var NomFic:NameStr;VarExt:ExtStr);.................................................................87
Subdivise une spécification de fichier en trois composantes: Rep reçoit le nom d'unité logique, NomFic le nom de base
du fichier et Ext l'extension du nom du fichier.....................................................................................................................87
DMSI/PROGRAMMATION - 161 -.....................................................................................................................................81
GETCBREAK GetCBreak(Var Break : Boolean);...............................................................................................................88
Renvoie l'état du mécanisme d'interruption clavier (Ctrl-Break)........................................................................................88
GETDATE GetDate(Var Annee, Mois, Jour, Jour_Sem : Word);.......................................................................................88
Renvoie la date en vigueur dans le système d'exploitation..................................................................................................88
GETENV GetEnv(EnVar : String) : String..........................................................................................................................88
Renvoie la valeur de la variable d'environnement spécifiée................................................................................................88
GETFATTR GetFAttr(Var F; Var Attr : Word);..................................................................................................................88
Renvoie les attributs d'un fichier. F est une variable de type fichier (typé, non-typé ou texte). Cf constantes de FindFirst.
.................................................................................................................................................................................................88
GETFTIME GetFTime(Var F; Var Date_Heure : LongInt);...............................................................................................88
Renvoie la date et l'heure de la dernière mise à jour d'un fichier........................................................................................88
GETINTVEC GetIntVec(IntNo : Byte; Var Vecteur : Pointer);..........................................................................................88
Renvoie l'adresse contenue dans le vecteur d'interruption spécifié.....................................................................................88
GETTIME GetTime(Var Heure, Minute, Seconde, Sec100 : Word);.................................................................................88
Renvoie l'heure en vigueur dans le système d'exploitation..................................................................................................88
GETVERIFY GetVerify(Var Verify : Boolean);.................................................................................................................88
Renvoie l'état de l'indicateur VERIFY du DOS...................................................................................................................88
KEEP Keep(CodeSortie : Word);.........................................................................................................................................88
Arrête le déroulement du programme concerné et rend le contrôle au DOS. Tout le programme reste en mémoire. Le
code de sortie correspond à celui qui est passé à la procédure Halt.....................................................................................88
PACKTIME PackTime(Var DT : DateTime;Var Date_Heure : LongInt);.........................................................................88
Convertit un enregistrement DateTime sous forme compressée dans un entier long Date_Heure utilisable par SetFTime.
.................................................................................................................................................................................................88
DateTime = Record...............................................................................................................................................................88
Year, Month, Day, Hour, Min, Sec : Integer;....................................................................................................................88
End;.......................................................................................................................................................................................88
MSDOS MsDos(Var Regs : Registers);................................................................................................................................88
Exécute une fonction MS-DOS. Equivaut à un appel à Intr avec IntNo égal à $21...........................................................88
SWAPVECTORS SwapVectors;..........................................................................................................................................88
Echange les vecteurs d'interruption (le contenu des pointeurs SaveIntXX de l'unité System avec le contenu des vecteurs
d'interruption en vigueur).......................................................................................................................................................88
INTR Intr(IntNo : Byte; Var Regs : Registers);...................................................................................................................89
IntNo est le numéro du vecteur d'interruption (0..255)........................................................................................................89
Registers est un enregistrement défini dans l'unité DOS:....................................................................................................89
Registers = RECORD............................................................................................................................................................89
Case Integer Of....................................................................................................................................................................89
0 : (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:Word);.........................................................................................................89
1 : (AL,AH,BL,BH,CH,DL,DH : Byte);...........................................................................................................................89
End;......................................................................................................................................................................................89
End;........................................................................................................................................................................................89
Remarquez qu'il s'agit d'un enregistrement à partie variable permettant de manipuler les registres dans le format 8 bits
ou 16 bits................................................................................................................................................................................89
Les constantes suivantes sont utilisées pour tester les bits indicateurs du Flag register.....................................................89
Constante...............................................................................................................................................................................89
Valeur....................................................................................................................................................................................89
Fcarry.....................................................................................................................................................................................89
$0001.....................................................................................................................................................................................89
Fparity....................................................................................................................................................................................89
$0004.....................................................................................................................................................................................89
Fauxiliary...............................................................................................................................................................................89
$0010.....................................................................................................................................................................................89
Fzero......................................................................................................................................................................................89
$0040.....................................................................................................................................................................................89
Fsign.......................................................................................................................................................................................89
$0080.....................................................................................................................................................................................89
Foverflow...............................................................................................................................................................................89
$0800.....................................................................................................................................................................................89
SETCBREAK SetCBreak(Break : Boolean);.......................................................................................................................89
Configure l'état du mécanisme de détection d'interruption clavier du DOS (Ctrl-Break)..................................................89
SETDATE SetDate(Annee, Mois, Jour : Word);.................................................................................................................89
Initialise la date maintenue par le système d'exploitation...................................................................................................89
SETFATTR SetFAttr(Var F; Attr : Word);..........................................................................................................................89
Définit les attributs d'un fichier. F est une variable fichier (typé, non-typé ou texte), Attr est la valeur de l'attribut (cf
FindFirst).Cf constantes de FindFirst.....................................................................................................................................89
SETFTIME SetFTime(Var F; Date_Heure : LongInt);........................................................................................................89
Ecrit la date et l'heure de la dernière mise à jour d'un fichier.............................................................................................89
SETINTVEC SetIntVec(IntNo : Byte; Vecteur : Pointer);..................................................................................................89
Affecte une adresse au vecteur d'interruption spécifié.........................................................................................................89
SETTIME SetTime(heure, minute, seconde, sec100 : Word);............................................................................................89
Initialise l'heure courante du système d'exploitation............................................................................................................89
SETVERIFY SetVerify(Var Verify : Boolean);...................................................................................................................89
Configure l'état de l'indicateur VERIFY du DOS................................................................................................................89
UNPACKTIME ....................................................................................................................................................................90
UnPackTime(Pack_D_H : LongInt;Var UnPack_D_H : DateTime);..................................................................................90
Convertit un entier long représentant une date compactée en une variable de type DateTime.Cf PackTime...................90
XVI.4 L’UNITE WINDOS....................................................................................................................90
Elle fournit une interface de type PChar pour les fonctions de gestion fichier de l'unité Dos. Dans la mesure MS-DOS
nécessite des chaînes AZT (à zéro terminal), l'unité WinDos est plus efficace dans les relations avec le MS-DOS que
l'unité Dos...............................................................................................................................................................................90
Aucune des routines de WinDos n'est définie par le standard Pascal..................................................................................90
Un certain nombre de constantes, procédures, fonctions, types et variables de l’unité WINDOS existent et ont déjà été
décrites dans la partie consacrée à l’unité DOS....................................................................................................................90
XVI.4.1 CONSTANTES DE L’UNITE WINDOS...............................................................................90
Constantes fXXXX utilisées pour tester les bits indicateurs du Flag Register (cf unité Dos)............................................90
Constantes de modes fichier (unités WinDos et Dos).........................................................................................................90
Les procédures de gestion de fichier utilisent les constantes du groupe fmXXXX lors de l'ouverture et de la fermeture
des fichiers disque..................................................................................................................................................................90
Les champs de mode de TFileRec et TtextRec contiennent une des valeurs suivantes:.....................................................90
Constante...............................................................................................................................................................................90
Valeur....................................................................................................................................................................................90
fmClosed................................................................................................................................................................................90
$D7B0....................................................................................................................................................................................90
fmInput..................................................................................................................................................................................90
$D7B1....................................................................................................................................................................................90
fmOutput................................................................................................................................................................................90
$D7B2....................................................................................................................................................................................90
fmInOut..................................................................................................................................................................................90
$D7B3....................................................................................................................................................................................90
Constantes d'attributs fichiers (unités WinDos et Dos)......................................................................................................90
Le groupe de constantes faXXXX contrôle les bits d'attributs utilisés avec GetFAttr, SetFAttr, FindFirst et FindNext . 90
Ces constantes s'additionnent. faAnyFile est la somme de tous les attributs......................................................................90
Constante WinDos.................................................................................................................................................................90
Valeur....................................................................................................................................................................................90
Constantes Dos......................................................................................................................................................................90
Valeur....................................................................................................................................................................................90
faReadOnly............................................................................................................................................................................90
$01.........................................................................................................................................................................................90
ReadOnly...............................................................................................................................................................................90
$01.........................................................................................................................................................................................90
faHidden................................................................................................................................................................................90
$02.........................................................................................................................................................................................90
Hidden....................................................................................................................................................................................90
$02.........................................................................................................................................................................................90
faSysFile................................................................................................................................................................................90
$04.........................................................................................................................................................................................90
SysFile...................................................................................................................................................................................90
$04.........................................................................................................................................................................................90
faVolumeID...........................................................................................................................................................................90
$08.........................................................................................................................................................................................90
VolumeId...............................................................................................................................................................................90
$08.........................................................................................................................................................................................90
faDirectory.............................................................................................................................................................................90
$10.........................................................................................................................................................................................90
Directory................................................................................................................................................................................90
$10.........................................................................................................................................................................................90
faArchive...............................................................................................................................................................................90
$20.........................................................................................................................................................................................90
Archive..................................................................................................................................................................................90
$20.........................................................................................................................................................................................90
faAnyFile...............................................................................................................................................................................90
$3F.........................................................................................................................................................................................90
AnyFile..................................................................................................................................................................................90
$3F.........................................................................................................................................................................................90
Constantes de longueurs de membres de nom de fichier (unités WinDos et Dos).............................................................91
Le groupe de constantes fsXXXX détermine les longueurs autorisées pour chaque chaîne composant un nom de fichier
(racine, extension, chemin, répertoire). Elles servent à FileSearch et à FileExpand..........................................................91
WinDos..................................................................................................................................................................................91
Valeur....................................................................................................................................................................................91
Dos.........................................................................................................................................................................................91
Valeur....................................................................................................................................................................................91
fsPathName............................................................................................................................................................................91
79...........................................................................................................................................................................................91
PathStr....................................................................................................................................................................................91
string [79}..............................................................................................................................................................................91
fsDirectory.............................................................................................................................................................................91
67...........................................................................................................................................................................................91
fsDirectory.............................................................................................................................................................................91
string [67]...............................................................................................................................................................................91
fsFileName.............................................................................................................................................................................91
8.............................................................................................................................................................................................91
fsFileName.............................................................................................................................................................................91
string [8].................................................................................................................................................................................91
fsExtension............................................................................................................................................................................91
4.............................................................................................................................................................................................91
fsExtension............................................................................................................................................................................91
string [4].................................................................................................................................................................................91
ComStr...................................................................................................................................................................................91
string [127].............................................................................................................................................................................91
Constantes renvoyées par FileSplit (unité WinDos).............................................................................................................91
Le groupe de constantes fcXXXX sert à la fonction FileSplit.............................................................................................91
La valeur renvoyée est une combinaison des champs binaires fcDirectory, fcFileName et fcExtension . Elle décrit les
composants présents dans la spécification.............................................................................................................................91
Si le nom ou l'extension contiennent un caractère générique (* ou ?), fcWildcards est armé...........................................91
Constante...............................................................................................................................................................................91
Valeur....................................................................................................................................................................................91
fcExtension............................................................................................................................................................................91
$0001.....................................................................................................................................................................................91
fcFileName............................................................................................................................................................................91
$0002.....................................................................................................................................................................................91
fcDirectory.............................................................................................................................................................................91
$0004.....................................................................................................................................................................................91
fcWildcards............................................................................................................................................................................91
$0008.....................................................................................................................................................................................91
XVI.4.2 ROUTINES DE L’UNITE WINDOS (par catégories)...........................................................91
CreateDir CreateDir(Dir: PChar)..........................................................................................................................................91
Réalise le même travail que MkDir, mais en manipulant des chaînes AZT (à zéro terminal) et non des chaînes Pascal
standard...................................................................................................................................................................................91
GetCurDir GetCurDir(Rep: PChar; Unite: Byte): PChar;....................................................................................................91
La chaîne renvoyée dans Rep commence toujours par une lettre d'unité de disque, un symbole : et une barre oblique
inverse. Pour Unite, la valeur 0 représente l'unité courante, la valeur 1 représente l'unité A, la valeur 2 l'unité B, et ainsi
de suite. La valeur renvoyée est identique à Rep. Les erreurs sont renvoyées dans DosError............................................91
RemoveDir RemoveDir(Rep: PChar);..................................................................................................................................92
Le sous-répertoire désigné par le chemin d'accès Rep est supprimé. Les erreurs éventuelles...........................................92
(sous-répertoire inexistant ou non vide) sont signalées dans DosError...............................................................................92
SetCurDir SetCurDir(Rep: PChar).......................................................................................................................................92
Si le paramètre Rep comporte une lettre d'unité de disque, celle-ci est également adoptée comme nouvelle unité
courante..................................................................................................................................................................................92
GetArgCount GetArgCount :Integer ;................................................................................................................................92
Renvoie le nombre de paramètres transmis au programme sur la ligne de commande......................................................92
GetArgStr GetArgStr(Dest: PChar; Numero: Integer;LongMax: Word): PChar;...............................................................92
Renvoie le paramètre de la ligne de commande désigné par Numero.................................................................................92
Si Numero est inférieur à zéro ou supérieur à la valeur de GetArgCount, GetArgStr renvoie une chaîne vide. Si Numero
est égal à zéro, GetArgStr renvoie le nom de fichier du module courant. La valeur est renvoyée dans Dest et sa longueur
maximum est LongMax.........................................................................................................................................................92
GetEnvVar GetEnvVar(NomVar: PChar): PChar;..............................................................................................................92
Renvoie un pointeur sur la valeur de la variable d'environnement spécifiée.....................................................................92
Si la variable d'environnement spécifiée n'existe pas, GetEnvVar renvoie nil...................................................................92
FileExpand FileExpand(Dest, Source: PChar): PChar;........................................................................................................92
Etend un nom de fichier en le transformant en spécification absolue d'accès....................................................................92
Convertit le nom de fichier indiqué dans Source en une spécification absolue d'accès, écrite en.....................................92
lettres majuscules. Cette spécification se compose d'une lettre d'unité logique, d'un signe :, d'une suite de noms de
répertoires (séparés par des barres obliques inverses \) et d'un nom de fichier. Les références relatives spéciales '.' et '..'
éventuellement présentes sont supprimées. Les noms ont au maximum 8 caractères et les extensions 3 caractères. Le
résultat est renvoyé dans Dest. Les paramètres Dest et Source peuvent pointer sur le même emplacement en mémoire. 92
La fonction FileSplit peut être utilisée ensuite pour subdiviser le résultat renvoyé par FileExpand en 3 chaînes, l'une
pour l'unité et les répertoires, une autre pour le nom du fichier et une dernière pour l'extension.......................................92
FileSearch FileSearch(Dest, Nom, Liste: PChar): PChar;...................................................................................................93
Recherche le fichier spécifié par Nom dans la liste de répertoires. Les répertoires doivent être séparés les uns des autres
par des points-virgules............................................................................................................................................................93
FileSplit FileSplit(Chemin, Rep, Nom, Ext: PChar): Word.................................................................................................93
Cette procédure subdivise la spécification complète d'accès à un fichier désignée par Chemin en ses trois composantes.
.................................................................................................................................................................................................93
Rep reçoit le nom d'unité logique (disque) et la suite de répertoires menant au fichier, barres obliques inverses (\)
initiales et finales comprises..................................................................................................................................................93
Nom reçoit le nom de base du fichier...................................................................................................................................93
Ext son extension précédée d'un point..................................................................................................................................93
Si l'un des paramètres chaîne élément vaut nil, la partie correspondante du chemin n'est pas mémorisée. Si le chemin ne
contient pas l'une des composantes, la chaîne correspondante est renvoyée à vide. Les longueurs maximales des chaînes
composantes renvoyées dans Rep, Nom et Ext sont définies par les trois constantes fsDirectory, fsFileName et
fsExtension.............................................................................................................................................................................93
La valeur renvoyée par la fonction est une combinaison des masques binaires fcDirectory, fcFileName et fcExtension
indiquant quelles composantes ont été trouvées dans le chemin. Si le nom ou l'extension contient des caractères
génériques (* ou ?), l'indicateur binaire fcWildcards est également positionné dans la valeur renvoyée...........................93
XVI.4.3 LES TYPES DE L’UNITE WINDOS....................................................................................93
Structures fichier (types) (unités WinDos et Dos)..........................................................................................................93
Les définitions de structures RECORD internes à Turbo Pascal sont déclarées aussi dans WinDos.................................93
TFileRec s'applique aux fichiers typés et non typés............................................................................................................93
TTextRec s'applique aux fichiers texte.................................................................................................................................93
TYPE.....................................................................................................................................................................................93
{ Fichiers typés et non typés }..............................................................................................................................................93
TFileRec = record.................................................................................................................................................................93
Handle: Word;.....................................................................................................................................................................93
Mode: Word;.......................................................................................................................................................................93
RecSize: Word;...................................................................................................................................................................93
Private: array[1..26] of Byte;..............................................................................................................................................93
UserData: array[1..16] of Byte;..........................................................................................................................................93
Name: array[0..79] of Char;................................................................................................................................................93
end;.........................................................................................................................................................................................93
{ Fichiers texte Textfile record }..........................................................................................................................................94
PTextBuf = ^TTextBuf;........................................................................................................................................................94
TTextBuf = array[0..127] of Char;.......................................................................................................................................94
TTextRec = record................................................................................................................................................................94
Handle: Word;......................................................................................................................................................................94
Mode: Word;........................................................................................................................................................................94
BufSize: Word;.....................................................................................................................................................................94
Private: Word;......................................................................................................................................................................94
BufPos: Word;......................................................................................................................................................................94
BufEnd: Word;.....................................................................................................................................................................94
BufPtr: PTextBuf;.................................................................................................................................................................94
OpenFunc: Pointer;...............................................................................................................................................................94
InOutFunc: Pointer;..............................................................................................................................................................94
FlushFunc: Pointer;..............................................................................................................................................................94
CloseFunc: Pointer;..............................................................................................................................................................94
UserData: array[1..16] of Byte;...........................................................................................................................................94
Name: array[0..79] of Char;.................................................................................................................................................94
Buffer: TTextBuf;.................................................................................................................................................................94
end;.........................................................................................................................................................................................94
TRegisters (type) (unité WinDos).....................................................................................................................................94
Les procédures Intr et MsDos se servent de variables de type TRegisters pour indiquer le contenu des registres en entrée
et lire le contenu des registres en sortie d'une interruption logicielle...................................................................................94
TYPE.....................................................................................................................................................................................94
TRegisters = RECORD........................................................................................................................................................94
CASE Integer OF.................................................................................................................................................................94
0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);................................................................................................94
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);................................................................................................................94
END ;....................................................................................................................................................................................94
END ;....................................................................................................................................................................................94
Notez la partie variante du RECORD pour recadrer les registres sur 8 bits avec ceux sur 16 bits....................................94
TDateTime (type) (unité WinDos)...................................................................................................................................95
Les unités...............................................................................................................................................................................81
Les variables du type TDateTime servent avec UnpackTime et PackTime pour analyser et construire des valeurs
compactées sur 4 octets pour GetFTime, SetFTime, FindFirst et FindNext........................................................................95
TYPE.....................................................................................................................................................................................95
TDateTime = RECORD.......................................................................................................................................................95
Year,Month,Day,Hour,Min,Sec: Word;.............................................................................................................................95
END;.....................................................................................................................................................................................95
TSearchRec (type) (unité WinDos)..................................................................................................................................95
Les routines FindFirst et FindNext se basent sur des variables du type TSearchRec pour scruter les répertoires.............95
TYPE.....................................................................................................................................................................................95
TSearchRec = RECORD......................................................................................................................................................95
Fill: array[1..21] of Byte;....................................................................................................................................................95
Attr: Byte;............................................................................................................................................................................95
Time: Longint;.....................................................................................................................................................................95
Size: Longint;......................................................................................................................................................................95
Name: array[0..12] of Char;................................................................................................................................................95
END;.....................................................................................................................................................................................95
Les informations pour chaque fichier trouvé sont renvoyées dans TSearchRec.................................................................95
Attr contient les attributs (construits avec les constantes adéquates) - Time contient la date et l'heure compactés
(UnpackTime décompacte)....................................................................................................................................................95
Size contient la taille en octets.............................................................................................................................................95
Name contient le nom...........................................................................................................................................................95
Fill est réservé par le DOS et ne doit jamais être altéré.......................................................................................................95
XVI.5 L'UNITE GRAPH.......................................................................................................................96
L'unité GRAPH est une bibliothèque complète comportant plus de 50 routines graphiques.............................................96
ARC Arc(X, Y :Integer; AngleDep, AngleFin, Rayon : Word);.........................................................................................96
Dessine un arc de cercle par rapport au centre de coordonnées X,Y...................................................................................96
BAR Bar(X1, Y1, X2, Y2 : Integer);....................................................................................................................................96
Dessine une barre dans le style et la couleur de remplissage courants................................................................................96
BAR3D Bar3D(X1, Y1, X2, Y2: Integer; Profond : Word;Top: Boolean);........................................................................96
Dessine une pile en 3 dimensions.........................................................................................................................................96
TopOn : Boolean = TRUE { si le haut de l'histogramme doit être en relief }..............................................................96
TopOff : Boolean = FALSE..............................................................................................................................................96
CIRCLE Circle(X, Y: Integer; Rayon: Word);....................................................................................................................96
Dessine un cercle de centre X,Y et de rayon Rayon............................................................................................................96
CLEARDEVICE ClearDevice;.............................................................................................................................................96
Initialise le périphérique graphique de sortie courant et le prépare.....................................................................................96
CLEARVIEWPORT ClearViewPort;...................................................................................................................................96
Efface la fenêtre graphique courante....................................................................................................................................96
DRAWPOLY DrawPoly(NbPoints: Word; Var PolyPoints);..............................................................................................96
Dessine les contours d'un polygone. PolyPoints est un paramètre sans type contenant les coordonnées de chaque
intersection du polygone........................................................................................................................................................96
ELLIPSE Ellipse(X,Y: Integer; AngleDeb, AngleFin:Word; XRayon,YRayon:Word);....................................................96
Dessine un arc elliptique.......................................................................................................................................................96
FILLELLIPSE FillEllipse(X, Y: Integer; XRayon, YRayon: Word);.................................................................................96
Trace une surface elliptique..................................................................................................................................................96
FILLPOLY FillPoly(NbPoints: word; Var PolyPoints);......................................................................................................96
Remplit un polygone.............................................................................................................................................................96
CLOSEGRAPH CloseGraph;................................................................................................................................................96
Désactive le mode graphique................................................................................................................................................96
FLOODFILL FloodFill(X, Y, Border: Word);....................................................................................................................96
Peint une surface délimitée avec le motif de remplissage courant......................................................................................96
DETECTGRAPH DetectGraph(Var Pilote, GraphMode : Integer);....................................................................................96
Vérifie la configuration matérielle et détermine quels sont le pilote et le mode graphique courants................................96
Constante...............................................................................................................................................................................97
Valeur....................................................................................................................................................................................97
Detect.....................................................................................................................................................................................97
0.............................................................................................................................................................................................97
Demande d'auto détection.....................................................................................................................................................97
CGA.......................................................................................................................................................................................97
1.............................................................................................................................................................................................97
MGCA....................................................................................................................................................................................97
2.............................................................................................................................................................................................97
EGA.......................................................................................................................................................................................97
3.............................................................................................................................................................................................97
EGA64...................................................................................................................................................................................97
4.............................................................................................................................................................................................97
EGAMono..............................................................................................................................................................................97
5.............................................................................................................................................................................................97
IBM8514................................................................................................................................................................................97
6.............................................................................................................................................................................................97
HercMono..............................................................................................................................................................................97
7.............................................................................................................................................................................................97
ATT400..................................................................................................................................................................................97
8.............................................................................................................................................................................................97
VGA.......................................................................................................................................................................................97
9.............................................................................................................................................................................................97
PC3270...................................................................................................................................................................................97
10...........................................................................................................................................................................................97
Currentdriver.........................................................................................................................................................................97
-128........................................................................................................................................................................................97
Passé à GetModeRange.........................................................................................................................................................97
CGAC0..................................................................................................................................................................................97
0.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 0 : vert, rouge, jaune; 1 page.....................................................................................................................................97
CGAC1..................................................................................................................................................................................97
1.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 1 : rouge, jaune, vert; 1 page.....................................................................................................................................97
CGAC2..................................................................................................................................................................................97
2.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 2 : vert, rouge, marron; 1 page..................................................................................................................................97
CGAC3..................................................................................................................................................................................97
3.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 3 : cyan, magenta, gris; 1 page.................................................................................................................................97
MCGAC0...............................................................................................................................................................................97
0.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 0 : vert, rouge, jaune; 1 page.....................................................................................................................................97
MCGAC1...............................................................................................................................................................................97
1.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 1 : cyan, magenta, blanc; 1 page...............................................................................................................................97
MCGAC2...............................................................................................................................................................................97
2.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 2 : vert, rouge, marron; 1 page..................................................................................................................................97
MCGAC3...............................................................................................................................................................................97
3.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 3 : vert, rouge, gris; 1 page.......................................................................................................................................97
MCGAMed ...........................................................................................................................................................................97
2.............................................................................................................................................................................................97
640x200.................................................................................................................................................................................97
1 page.....................................................................................................................................................................................97
MCGAHi ..............................................................................................................................................................................97
3.............................................................................................................................................................................................97
640x480 ................................................................................................................................................................................97
1 page.....................................................................................................................................................................................97
EGALo...................................................................................................................................................................................97
0.............................................................................................................................................................................................97
640x200 ................................................................................................................................................................................97
4 pages...................................................................................................................................................................................97
EGAHi...................................................................................................................................................................................97
1.............................................................................................................................................................................................97
640x350 ................................................................................................................................................................................97
16 couleurs; 2 pages ............................................................................................................................................................97
EGA64Lo...............................................................................................................................................................................97
0.............................................................................................................................................................................................97
640x200 ................................................................................................................................................................................97
16 couleurs; 1 page................................................................................................................................................................97
EGA64Hi ..............................................................................................................................................................................97
1.............................................................................................................................................................................................97
640x350 ...............................................................................................................................................................................97
4 couleurs; 1 page..................................................................................................................................................................97
EGAMonoHi .........................................................................................................................................................................97
3.............................................................................................................................................................................................97
640x350.................................................................................................................................................................................97
HercMonoHi..........................................................................................................................................................................97
0.............................................................................................................................................................................................97
720x348 ...............................................................................................................................................................................97
2 pages...................................................................................................................................................................................97
ATT400C0.............................................................................................................................................................................97
0.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 0 : vert, rouge, jaune; 1 page.....................................................................................................................................97
ATT400C1 ...........................................................................................................................................................................97
1.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 1 : rouge, jaune, vert; 1 page.....................................................................................................................................97
ATT400C2.............................................................................................................................................................................97
2.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 2 : vert, rouge, marron; 1 page..................................................................................................................................97
ATT400C3.............................................................................................................................................................................97
3.............................................................................................................................................................................................97
320x200 ................................................................................................................................................................................97
palette 3 : cyan, magenta, gris; 1 page.................................................................................................................................97
ATT400Med .........................................................................................................................................................................97
2.............................................................................................................................................................................................97
640x200.................................................................................................................................................................................97
ATT400Hi..............................................................................................................................................................................97
3.............................................................................................................................................................................................97
640x400.................................................................................................................................................................................97
VGALo..................................................................................................................................................................................97
0.............................................................................................................................................................................................97
640x200 ................................................................................................................................................................................97
16 couleurs 4 pages...............................................................................................................................................................97
VGAMed...............................................................................................................................................................................97
1.............................................................................................................................................................................................97
640x350 ................................................................................................................................................................................97
16 couleurs 2 pages...............................................................................................................................................................97
VGAHi...................................................................................................................................................................................97
2.............................................................................................................................................................................................97
640x480 ................................................................................................................................................................................97
16 couleurs.............................................................................................................................................................................97
VGAHi2.................................................................................................................................................................................97
3.............................................................................................................................................................................................97
640x480 ...............................................................................................................................................................................97
2 couleurs...............................................................................................................................................................................97
PC3270Hi...............................................................................................................................................................................97
0.............................................................................................................................................................................................97
720x350.................................................................................................................................................................................97
IBM8514Lo...........................................................................................................................................................................97
0.............................................................................................................................................................................................97
640x480 ...............................................................................................................................................................................97
256 couleurs; 1 page..............................................................................................................................................................97
IBM8514Hi............................................................................................................................................................................97
0.............................................................................................................................................................................................97
1024x768 ..............................................................................................................................................................................97
256 couleurs; 1 page..............................................................................................................................................................97
GETCOLOR GetColor : Word;............................................................................................................................................98
Renvoie la valeur de la couleur transmise lors du précédent appel àSetColor....................................................................98
GETARCCOORDS GetArcCoords(Var ArcCoords : ArcCoordsType);.............................................................................98
Permet de récupérer les coordonnées utilisées lors du précedent appel à la procédure Arc...............................................98
ArcCoordsType = Record.....................................................................................................................................................98
X, Y : Integer;.......................................................................................................................................................................98
Xs, Ys, Xend, Yend : Word;................................................................................................................................................98
End;........................................................................................................................................................................................98
GETASPECTRATIO GetAspectRatio(Var XAsp, YAsp : Word); ...................................................................................98
Donne la résolution de l'écran graphique à partir de laquelle peut être calculé l'allongement des formes ciculaires (XAsp
/ YAsp)....................................................................................................................................................................................98
GETBKCOLOR GetBkColor : Word;.................................................................................................................................98
Renvoie l'indice dans la palette de la couleur courante du fond d'affichage.......................................................................98
GETDEFAULTPALETTE GetDefaultPalette(Var Pal: PaletteType):PaletteType;...........................................................98
Renvoie l'enregistrement de définition de la palette............................................................................................................98
GETDRIVERNAME GetDriverName : String;...................................................................................................................98
Renvoie une chaîne contenant le nom du pilote graphique courant....................................................................................98
GETFILLPATTERN GetFillPattern(Var FillPattern : FillPaternType);.............................................................................98
Renvoie le dernier motif de remplissage..............................................................................................................................98
FillPatternType = Array[1..8] Of Byte;...............................................................................................................................98
GETFILLSETTINGS GetFillSettings(Var FillInfo: FillSettingsType);.............................................................................98
Permet de récupérer la couleur et le motif de remplissage courants définis par SetFillStyle et SetFillPatern..................98
FillSettingsType = Record....................................................................................................................................................98
Pattern Word;......................................................................................................................................................................98
Color : Word;........................................................................................................................................................................98
End;........................................................................................................................................................................................98
Constante...............................................................................................................................................................................99
Valeur....................................................................................................................................................................................99
EmptyFill...............................................................................................................................................................................99
0.............................................................................................................................................................................................99
{ Couleur de Fond = effacement }.......................................................................................................................................99
SolidFill.................................................................................................................................................................................99
1.............................................................................................................................................................................................99
{Couleur d'avant-plan uniforme }.........................................................................................................................................99
LineFill..................................................................................................................................................................................99
2.............................................................................................................................................................................................99
{ Traits horizontaux }............................................................................................................................................................99
LtSlashFill.............................................................................................................................................................................99
3.............................................................................................................................................................................................99
{ Traits Droit fin ..................................................................................................................................................................99
/ / / }.......................................................................................................................................................................................99
SlashFill.................................................................................................................................................................................99
4.............................................................................................................................................................................................99
{ Traits Droit épais ............................................................................................................................................................99
/ / / }.......................................................................................................................................................................................99
BkSlashFill............................................................................................................................................................................99
5.............................................................................................................................................................................................99
{ Traits Gauche épais............................................................................................................................................................99
\ \ \ }.......................................................................................................................................................................................99
LtBkSlashFill.........................................................................................................................................................................99
6.............................................................................................................................................................................................99
{ Traits Gauche fin................................................................................................................................................................99
\ \ \ }......................................................................................................................................................................................99
HatchFill................................................................................................................................................................................99
7.............................................................................................................................................................................................99
{ Trame }...............................................................................................................................................................................99
XHatchFill.............................................................................................................................................................................99
8.............................................................................................................................................................................................99
{ Trame oblique }..................................................................................................................................................................99
InterLeaveFill........................................................................................................................................................................99
9.............................................................................................................................................................................................99
{ Trame serrée }....................................................................................................................................................................99
WideDotFill...........................................................................................................................................................................99
10...........................................................................................................................................................................................99
{ Points espacés }..................................................................................................................................................................99
CloseDotFill...........................................................................................................................................................................99
11...........................................................................................................................................................................................99
{ Points rapprochés }.............................................................................................................................................................99
UserFill..................................................................................................................................................................................99
12...........................................................................................................................................................................................99
{ Défini par le programmeur }..............................................................................................................................................99
GETGRAPHMODE GetGraphMode : Integer;....................................................................................................................99
Renvoie le mode graphique courant (en fonction du pilote graphique courant).................................................................99
Cf DetectGraph......................................................................................................................................................................99
GETIMAGE GetImage(X1, Y1, X2, Y2: Word; Var BitMap);...........................................................................................99
Sauvegarde une partie d'image graphique dans une mémoire tampon. BitMap est un paramètre sans type dont la taille
doit être supérieure ou égale au nombre de pixels inclus dans le rectangle + 4...................................................................99
GETLINESETTINGS GetLineSettings(Var LigneInfo : lineSettingsType);......................................................................99
Renvoie le style, le motif et l'épaisseur de ligne initialisés par SetLineStyle.....................................................................99
LineSettingsType = Record..................................................................................................................................................99
LineStyle : Word;.................................................................................................................................................................99
Pattern : Word;.....................................................................................................................................................................99
Thickness : Word;................................................................................................................................................................99
End;........................................................................................................................................................................................99
Constante...............................................................................................................................................................................99
Valeur....................................................................................................................................................................................99
SolidLn..................................................................................................................................................................................99
0.............................................................................................................................................................................................99
DottedLn................................................................................................................................................................................99
1.............................................................................................................................................................................................99
CenterLn................................................................................................................................................................................99
2.............................................................................................................................................................................................99
DashedLn...............................................................................................................................................................................99
3.............................................................................................................................................................................................99
UserBitLn..............................................................................................................................................................................99
4.............................................................................................................................................................................................99
Style défini par l'utilisateur...................................................................................................................................................99
NormWidth............................................................................................................................................................................99
1.............................................................................................................................................................................................99
ThickWidth............................................................................................................................................................................99
3.............................................................................................................................................................................................99
Triple épaisseur.....................................................................................................................................................................99
GETMAXCOLOR GetMaxColor : Word;..........................................................................................................................100
Renvoie la plus haute valeur de couleur pouvant être transmise à la procédure SetColor...............................................100
GETMAXCODE GetMaxMode : Word;............................................................................................................................100
Renvoie le plus grand numéro de mode supporté par le pilote courant.............................................................................100
GETMAXX GetMaxX : Integer;........................................................................................................................................100
Renvoie le numéro de la colonne la plus à droite..............................................................................................................100
GETMAXY GetMaxY : Integer;........................................................................................................................................100
Renvoie le numéro de la ligne la plus basse. .....................................................................................................................100
GETMODENAME GetModeName(NumeroMode: Word) : String;.................................................................................100
Renvoie une chaîne de caractères contenant le nom du mode graphique spécifié............................................................100
GETMODERANGE............................................................................................................................................................100
GetModeRange(PiloteGrafic: Integer; Var ModeInf, ModeSup: Integer);........................................................................100
Renvoie la plus grande et la plus petite valeur de mode graphique supportées par le pilote spécifié..............................100
Cf DetectGraph....................................................................................................................................................................100
GETPALETTE GetPalette(Var Palette: PaletteType);......................................................................................................100
Renvoie la palette courante et sa taille...............................................................................................................................100
PaletteType = Record..........................................................................................................................................................100
Size : Byte;.........................................................................................................................................................................100
Colors : Array[0..MaxColors] Of Shortint;........................................................................................................................100
End;......................................................................................................................................................................................100
GETPALETTESIZE GetPaletteSize : Word;.....................................................................................................................100
Renvoie la taille de la table de conversion de la palette de couleurs................................................................................100
GETPIXEL GetPixel(X, Y: Integer) : Word;.....................................................................................................................100
Renvoie la valeur du pixel situé en X,Y.............................................................................................................................100
GETTEXTSETTINGS GetTextSettings(Var TextInfo : TextSettingsType);..................................................................101
Renvoie les différentes valeurs courantes de configuration d'affichage de texte : police, taille et justification..............101
TextSettingsType = Record................................................................................................................................................101
Font : Word;.......................................................................................................................................................................101
Direction : Word;...............................................................................................................................................................101
CharSize : Word;................................................................................................................................................................101
Horiz : Word;......................................................................................................................................................................101
Vert : Word;........................................................................................................................................................................101
End; .....................................................................................................................................................................................101
Constante.............................................................................................................................................................................101
Valeur..................................................................................................................................................................................101
DefaultFont..........................................................................................................................................................................101
0...........................................................................................................................................................................................101
Police en matrice 8x8 bits...................................................................................................................................................101
TriplexFont..........................................................................................................................................................................101
1...........................................................................................................................................................................................101
Polices vectorielles..............................................................................................................................................................101
SmallFont.............................................................................................................................................................................101
2...........................................................................................................................................................................................101
SansSeriFont........................................................................................................................................................................101
3...........................................................................................................................................................................................101
GothicFont...........................................................................................................................................................................101
4...........................................................................................................................................................................................101
HorizDir...............................................................................................................................................................................101
0...........................................................................................................................................................................................101
De gauche à droite...............................................................................................................................................................101
VertDir.................................................................................................................................................................................101
1...........................................................................................................................................................................................101
De haut en bas.....................................................................................................................................................................101
UserCharSize.......................................................................................................................................................................101
0...........................................................................................................................................................................................101
Taille de caractère modifiable............................................................................................................................................101
GETVIEWSETTINGS GetViewSettings(Var ViewPort: ViewPortType);......................................................................101
Permet de récupérer les coordonnées de la fenêtre graphique active ainsi que les paramètres définis par SetViewPort.
...............................................................................................................................................................................................101
ViewPortType = Record......................................................................................................................................................101
X1, Y1, X2, Y2 : Integer;...................................................................................................................................................101
Clip : Boolean;...................................................................................................................................................................101
End;......................................................................................................................................................................................101
GETX GetX : Integer;.........................................................................................................................................................101
Renvoie la coordonnée X de la position courante..............................................................................................................101
GETY GetY : Integer;.........................................................................................................................................................101
Renvoie la coordonnée Y de la position courante..............................................................................................................101
GRAPHDEFAULTS GraphDefaults;.................................................................................................................................101
Réinitialise la configuration du mode graphique...............................................................................................................101
GRAPHERRORMSG GraphErrorMsg(CodeErreur: Integer) : String;.............................................................................101
Renvoie le message d'erreur correspondant au code d'erreur indiqué...............................................................................101
GRAPHRESULT GraphResult : Integer;...........................................................................................................................101
Renvoie le code d'erreur de la dernière opération graphique.............................................................................................101
Codes d'erreurs renvoyés par la fonction GraphResult......................................................................................................102
GrOk....................................................................................................................................................................................102
0...........................................................................................................................................................................................102
pas d'erreur...........................................................................................................................................................................102
GrNoInitGraph.....................................................................................................................................................................102
-1..........................................................................................................................................................................................102
graphique non installé.........................................................................................................................................................102
GrNotDetected.....................................................................................................................................................................102
-2..........................................................................................................................................................................................102
équipement graphique non détecté.....................................................................................................................................102
GrFileNotFound...................................................................................................................................................................102
-3..........................................................................................................................................................................................102
fichier du pilote graphique introuvable...............................................................................................................................102
GrInvalidDriver...................................................................................................................................................................102
-4..........................................................................................................................................................................................102
fichier du pilote graphique invalide....................................................................................................................................102
GrNoLoadMem...................................................................................................................................................................102
-5..........................................................................................................................................................................................102
mémoire insuffisante pour charger le pilote.......................................................................................................................102
GrNoScanMem....................................................................................................................................................................102
-6..........................................................................................................................................................................................102
dépassement de capacité mémoire (type scan)...................................................................................................................102
GrNoFloodMem..................................................................................................................................................................102
-7..........................................................................................................................................................................................102
dépassement de capacité mémoire (type flood) ................................................................................................................102
GrFontNotFound..................................................................................................................................................................102
-8..........................................................................................................................................................................................102
fichier de police de caractères non trouvé..........................................................................................................................102
GrNoFontMem....................................................................................................................................................................102
-9..........................................................................................................................................................................................102
mémoire insuffisante pour charger la police......................................................................................................................102
GrInvalidMode....................................................................................................................................................................102
-10........................................................................................................................................................................................102
mode graphique invalide pour le pilote sélectionné...........................................................................................................102
GrError.................................................................................................................................................................................102
-11........................................................................................................................................................................................102
erreur graphique...................................................................................................................................................................102
GrIOerror.............................................................................................................................................................................102
-12........................................................................................................................................................................................102
erreur d'entrées/sorties graphique.......................................................................................................................................102
GrInvalidFont......................................................................................................................................................................102
-13........................................................................................................................................................................................102
fichier de police invalide.....................................................................................................................................................102
GrInvalidFontNum..............................................................................................................................................................102
-14........................................................................................................................................................................................102
numéro de police invalide...................................................................................................................................................102
GrInvalidDeviceNum..........................................................................................................................................................102
-15........................................................................................................................................................................................102
erreur de numéro de pilote graphique.................................................................................................................................102
IMAGESIZE ImageSize(X1, Y1, X2, Y2: Integer) : Word;..............................................................................................102
Renvoie le nombre d'octets nécessaires pour stocker une zone rectangulaire de l'écran..................................................102
INITGRAPH .......................................................................................................................................................................102
InitGraph(Var GraphPilote: Integer;Var GraphMode: Integer;CheminPilote : String);...................................................102
Initialise le système graphique et configure le matériel dans un mode graphique............................................................102
Cf DetectGraph....................................................................................................................................................................102
INSTALLUSERDRIVER ..................................................................................................................................................102
InstallUserDriver(Nom:String;AutoDetectPtr:Pointer) : Word;.....................................................................................102
Ajoute un pilote de périphérique supplémentaire dans la table des pilotes de périphériques gérée par le système
graphique BGI. Affecte et renvoie un numéro de pilote.....................................................................................................102
INSTALLUSERFONT InstallUserFont(NomFichierPolice:String):Integer;....................................................................102
Insère une nouvelle police de caractères graphique dans le système BGI........................................................................102
LINE Line(X1, Y1, X2, Y2: Integer);................................................................................................................................102
Trace une ligne du point (X1,Y1) au point (X2,Y2)..........................................................................................................102
LINEREL LineRel(Dx, Dy);...............................................................................................................................................102
Trace une ligne de la position courante (PC) jusqu'à un point dont les coordonnées sont exprimées relativement à cette
position courante..................................................................................................................................................................102
LINETO LineTo(X, Y: Integer);........................................................................................................................................102
Trace une ligne à partir de la position courante jusqu'au point de coordonnées (X, Y)...................................................102
MOVEREL MoveRel(Dx, Dy: Integer);............................................................................................................................103
Déplace le pointeur courant (PC) relativement à sa position courante..............................................................................103
MOVETO MoveTo(X, Y: Integer);....................................................................................................................................103
Place le pointeur courant aux coordonnées (X, Y).............................................................................................................103
OUTTEXT OutText(Texte: String);...................................................................................................................................103
Envoie une chaîne de caractères au périphérique de sortie, à la position courante..........................................................103
Le pointeur courant est modifié en fonction des caractéristiques de la chaîne de caractères (hauteur et largeur)..........103
OUTTEXTXY OutTextXY(X, Y: Integer; Texte: String);................................................................................................103
Envoie une chaîne de caractères au périphérique de sortie aux coordonnées (X, Y)........................................................103
OutTextXY ne met pas à jour le pointeur courant.............................................................................................................103
PIESLICE PieSlice(X, Y: Integer; AngleDeb, AngleFin, Rayon : Word);.......................................................................103
Trace et remplit un diagramme par secteurs......................................................................................................................103
PUTIMAGE PutImage(X, Y: Integer; Var BitMap; BitBlt:Word);..................................................................................103
Affiche une image binaire (par pixels)...............................................................................................................................103
Constante.............................................................................................................................................................................103
Valeur..................................................................................................................................................................................103
CopyPut...............................................................................................................................................................................103
0...........................................................................................................................................................................................103
MOV....................................................................................................................................................................................103
(NormalPut en TP 5.5)........................................................................................................................................................103
XorPut..................................................................................................................................................................................103
1...........................................................................................................................................................................................103
XOR.....................................................................................................................................................................................103
OrPut....................................................................................................................................................................................103
2...........................................................................................................................................................................................103
OR........................................................................................................................................................................................103
AndPut.................................................................................................................................................................................103
3...........................................................................................................................................................................................103
AND.....................................................................................................................................................................................103
NotPut..................................................................................................................................................................................103
4...........................................................................................................................................................................................103
NOT.....................................................................................................................................................................................103
PUTPIXEL PutPixel(X, Y: Integer; PixelCoul: Word);....................................................................................................103
Redessine un pixel en (X, Y)..............................................................................................................................................103
RECTANGLE Rectangle(X1, Y1, X2, Y2: Integer);........................................................................................................103
Dessine un rectangle............................................................................................................................................................103
REGISTERBGIDRIVER ...................................................................................................................................................103
RegisterBGIdriver(Pilote: Pointer): Integer;......................................................................................................................103
Enregistre un fichier pilote graphique. En cas d'erreur, la valeur renvoyée est inférieure à 0, sinon, elle correspond au
numéro de gestion du pilote. ...............................................................................................................................................103
REGISTERBGIFONT RegisterBGIfont(Police: Pointer): Integer;..................................................................................103
Enregistre un fichier de police de caractères. En cas d'erreur, la valeur renvoyée est inférieure à 0, sinon, elle
correspond au numéro assigné à la police...........................................................................................................................103
RESTORECRTMODE RestoreCrtMode;...........................................................................................................................103
Restaure le mode d'affichage dans l'état précédant l'initialisation du mode graphique....................................................103
SECTOR ............................................................................................................................................................................104
Sector(X, Y: Integer;AngleDeb, AngleFin, XRayon, YRayon: Word);...........................................................................104
Dessine et remplit un secteur elliptique..............................................................................................................................104
SETACTIVEPAGE SetActivePage(Page: Word);.............................................................................................................104
Choisit la page active pour les sorties graphiques..............................................................................................................104
SETALLPALETTE SetAllPalette(Var palette);................................................................................................................104
Change toutes les couleurs de la palette spécifiée.............................................................................................................104
SETASPECTRATIO SetAspectRatio(XAsp, YAsp: Word);.............................................................................................104
Modifie le facteur de correction des proportions de l'écran...............................................................................................104
SETBKCOLOR SetBkColor(Couleur: Word);...................................................................................................................104
Définit la couleur de fond en vigueur dans la palette........................................................................................................104
SETCOLOR SetColor(couleur: Word);..............................................................................................................................104
Définit la couleur de dessin courante dans la palette.........................................................................................................104
SETFILLPATTERN SetFillPattern(Pattern: FillPatternType;Couleur: Word);...............................................................104
Sélectionne un motif et une couleur de remplissage définis par le programmeur............................................................104
SETFILLSTYLE SetFillStyle(Pattern: Word; Couleur: Word);.......................................................................................104
Définit la couleur et le motif de remplissage. ...................................................................................................................104
Cf GetFillSettings................................................................................................................................................................104
SETGRAPHBUFSIZE SetGraphBufSize(TailleTampon: Word);....................................................................................104
Permet de modifier la taille du tampon utilisé lors des remplissages de type scan et flood.............................................104
SETGRAPHMODE SetGraphMode(Mode: Integer);........................................................................................................104
Place le système en mode graphique et efface l'écran.......................................................................................................104
SETLINESTYLE SetLineStyle(style, Pattern, Epaisseur: Word);....................................................................................104
Choisit la taille et le style de ligne courants. .....................................................................................................................104
Cf GetLineSettings..............................................................................................................................................................104
SETPALETTE SetPalette(Numcoul: Word; Couleur: ShortInt);......................................................................................104
Modifie une des couleurs de la palette...............................................................................................................................104
SETRGBPALETTE SetRGBPalette(CouleurNum,Rouge,Vert,Bleu: Integer);................................................................104
Permet de modifier la palette de couleurs pour les pilotes VGAet IBM8514...................................................................104
SETTEXTJUSTIFY SetTextJustify(Horiz, Vert: Word);..................................................................................................105
Définit le type de justification utilisé par OutText.............................................................................................................105
Constante.............................................................................................................................................................................105
Valeur..................................................................................................................................................................................105
LeftText...............................................................................................................................................................................105
0...........................................................................................................................................................................................105
Justification à gauche..........................................................................................................................................................105
CenterText...........................................................................................................................................................................105
1...........................................................................................................................................................................................105
RightText.............................................................................................................................................................................105
2...........................................................................................................................................................................................105
Justification à droite............................................................................................................................................................105
BottomText..........................................................................................................................................................................105
0...........................................................................................................................................................................................105
CenterText...........................................................................................................................................................................105
1...........................................................................................................................................................................................105
TopText...............................................................................................................................................................................105
2...........................................................................................................................................................................................105
SETTEXTSTYLE SetTextStyle(Police, Direction: Word; Taille: Word);.......................................................................105
Définit la police, le style et le facteur de grossissement des caractères............................................................................105
Cf GetTextSettings..............................................................................................................................................................105
SETUSERCHARSIZE SetUserCharSize(MultX, DivX, MultY, DivY: Word);..............................................................105
Permet de faire varier la largeur et la hauteur des caractères des polices vectorielles.....................................................105
SETVIEWPORT SetViewPort(X1,Y1,X2,Y2: Word; Lim : Boolean);............................................................................105
Définit la fenêtre courante pour les affichages graphiques................................................................................................105
ClipOn : Boolean = TRUE si les affichages sont limités à la fenêtre active.....................................................................105
ClipOff : Boolean= FALSE ...............................................................................................................................................105
SETVISUALPAGE SetVisualPage(Page: Word);.............................................................................................................105
Définit le numéro de la page graphique active...................................................................................................................105
SETWRITEMODE SetWriteMode(ModeEcriture: Integer); ...........................................................................................105
Configure le mode d'écriture pour le tracé de lignes.........................................................................................................105
Cf constantes de PutImage..................................................................................................................................................105
TEXTHEIGHT TextHeight(Texte: String) : Word;...........................................................................................................105
Renvoie la hauteur d'une chaîne exprimée en pixels.........................................................................................................105
TEXTWIDTH TextWidth(Texte: String) : Word;.............................................................................................................105
Renvoie la largeur d'une chaîne exprimée en pixels..........................................................................................................105
XVI.6 L'UNITE PRINTER..................................................................................................................106
L'unité PRINTER permet de faciliter les communications avec l'imprimante.................................................................106
Printer contient une variable fichier de type texte appelée LST, variable qui est associée au périphérique LPT1.........106
............................................................................................................................................................................................106
Exemple:..............................................................................................................................................................................106
Program Essai_Imprimante;...............................................................................................................................................106
Uses ....................................................................................................................................................................................106
Printer;...............................................................................................................................................................................106
Begin...................................................................................................................................................................................106
Writeln(Lst,'BONJOUR');.................................................................................................................................................106
End......................................................................................................................................................................................106
XVI.7 L'UNITE OVERLAY...............................................................................................................106
Le système de recouvrement permet de créer des programmes plus grands que la mémoire disponible. Cette technique
permet de rassembler des parties de programme appelées partiels dans un fichier séparé du fichier principal. A un
moment donné, ces partiels peuvent occuper l'espace mémoire d'autres routines inutiles à cet instant là. .....................106
Ces recouvrements ont lieu dans une région mémoire appelée tampon de recouvrement................................................106
Turbo Pascal gère les partiels au niveau des unités; une unité est la plus petite partie de programme pouvant être
constituée sous forme de partiel...........................................................................................................................................106
Lors de la construction de l'exécutable, Turbo Pascal, en plus du fichier exécutable (.EXE), génère un fichier de
recouvrement (.OVR). Le fichier .EXE contient le 'noyau' (partie statique du programme non recouvrable) et le
fichier .OVR regroupe tous les partiels qui seront chargés puis recouverts.......................................................................106
Le gestionnaire de recouvrement de partiels est implémenté par l'unité standard Overlay..............................................106
Toutes les unités recouvrables doivent comporter la directive {$O+} indiquant que le code peut être recouvert et la
directive {$F+} indiquant que toutes les procédures et fonctions actives doivent être du type à appel long..................106
OVRINIT OvrInit(File_Name : String);.............................................................................................................................106
Initialise le mécanisme de recouvrement de partiels et ouvre le fichier .OVR. Les erreurs éventuelles sont indiquées par
la variable OvrResult............................................................................................................................................................106
OVRINITEMS OvrInitEMS;..............................................................................................................................................106
Charge le fichier de recouvrement en mémoire EMS, si possible.La variable OvrResult indique une erreur éventuelle.
...............................................................................................................................................................................................106
OVRSETBUF OvrSetBuf(Size : LongInt);........................................................................................................................106
Définit la taille du tampon de recouvrement. La variableOvrResult indique une erreur éventuelle................................106
OVRGETBUF OvrGetBuf : LongInt;.................................................................................................................................106
Renvoie la taille actuelle du tampon de recouvrement departiels.....................................................................................106
OVRCLEARBUF OvrClearBuf;.........................................................................................................................................107
Vide le tampon de recouvrement de partiels......................................................................................................................107
OVRSETRETRY OvrSetRetry(Taille : LongInt);.............................................................................................................107
Permet de spécifier la taille de la zone probatoire au sein du tampon de recouvrement. Un partiel est mis en période
probatoire si l'espace qu'il occupe empiète sur les tailles octets avant la fin du tampon...................................................107
OVRGETRETRY OvrGetRetry : LongInt;........................................................................................................................107
Renvoie la taille actuelle de la zone probatoire (0 s'il n'y a pas eu de création de zone probatoire)...............................107
Exemple:..............................................................................................................................................................................107
Contenu du fichier DEMO.PAS..........................................................................................................................................107
{$F+,O+}.............................................................................................................................................................................107
Program Demonstration_Ovr ;............................................................................................................................................107
Uses......................................................................................................................................................................................107
Overlay,Crt,Demo1,Demo2;..............................................................................................................................................107
{$O Demo1}.......................................................................................................................................................................107
{$O Demo2}.......................................................................................................................................................................107
Begin....................................................................................................................................................................................107
ClrScr;.................................................................................................................................................................................107
OvrInit('Demo.OVR');........................................................................................................................................................107
If OvrResult = 0..................................................................................................................................................................107
Then....................................................................................................................................................................................107
Begin..................................................................................................................................................................................107
Write1;..............................................................................................................................................................................107
Write2;..............................................................................................................................................................................107
End.....................................................................................................................................................................................107
Else.....................................................................................................................................................................................107
Writeln('Overlay Error : ',OvrResult);..............................................................................................................................107
End.......................................................................................................................................................................................107
Contenu du fichier DEMO1.PAS........................................................................................................................................108
{$F+,O+}.............................................................................................................................................................................108
Unit Demo1;........................................................................................................................................................................108
Interface...............................................................................................................................................................................108
Procedure Write1;...............................................................................................................................................................108
Implementation....................................................................................................................................................................108
Procedure Write1;................................................................................................................................................................108
Begin...................................................................................................................................................................................108
Writeln('premier partiel');.................................................................................................................................................108
End;.....................................................................................................................................................................................108
End.......................................................................................................................................................................................108
Contenu du fichier DEMO2.PAS........................................................................................................................................108
{$F+,O+}.............................................................................................................................................................................108
Unit Demo2;........................................................................................................................................................................108
Interface...............................................................................................................................................................................108
Procedure Write2;................................................................................................................................................................108
Implementation....................................................................................................................................................................108
Procedure Write2;................................................................................................................................................................108
Begin....................................................................................................................................................................................108
Writeln('deuxième partiel');...............................................................................................................................................108
End;......................................................................................................................................................................................108
End.......................................................................................................................................................................................108
XVII LES TYPES FICHIERS..............................................................................................................................................109
Un fichier est un canal logique à travers lequel le programme peut passer des données. Un fichier peut être soit un
fichier disque, dans ce cas, lecture et écriture sur un support magnétique, soit un organe logique tel que les fichiers pré-
définis Input et Output, c'est-à-dire le clavier et l'écran.....................................................................................................109
Un fichier est constitué d'une séquence de composants de même type. Le nombre de composants d'un fichier (ou la
taille du fichier) n'est pas déterminé dans la définition du fichier. PASCAL garde la trace des accès au fichier grâce à un
pointeur de fichier. Chaque fois qu'un composant est écrit ou lu dans un fichier, le pointeur de fichier est avancé sur le
composant suivant................................................................................................................................................................109
Tous les composants d'un fichier étant de longueur égale, la position d'un composant particulier peut être calculée. Le
pointeur de fichier peut donc être déplacé vers tout composant dans le fichier, procurant ainsi un accès direct à tout
élément..................................................................................................................................................................................109
XVII.1 DEFINITION DU TYPE FICHIER........................................................................................109
Un type fichier est défini par le mot réservé 'File of' suivi par le type des composants de ce fichier. Un identificateur de
fichier est déclaré également par le mot réservé 'File of' suivi par l'identificateur d'un type fichier préalablement défini.
...............................................................................................................................................................................................109
EXEMPLES :......................................................................................................................................................................109
Type.....................................................................................................................................................................................109
ProductName = String[80];................................................................................................................................................109
Product = Record................................................................................................................................................................109
Name : ProductName;.......................................................................................................................................................109
ItemNumber : Real;..........................................................................................................................................................109
InStock : Real;...............................................................................................................................................................109
MinStock : Real;............................................................................................................................................................109
Supplier : Integer;...........................................................................................................................................................109
End;.....................................................................................................................................................................................109
Var.......................................................................................................................................................................................109
ProductFile : FILE of Product;...........................................................................................................................................109
XVII.2 PROCEDURES STANDARD SUR LES FICHIERS TYPES...............................................110
Les types fichiers.................................................................................................................................................................110
Pour les procédures et fonctions suivantes, FilVar est l'identificateur d'une variable fichier...........................................110
ASSIGN Assign(FilVar,Nom_Fic : String);.......................................................................................................................110
Nom_Fic est une expression de type chaîne (nom de fichier valide). Le nom de fichier est affecté à la variable FilVar et
toutes les opérations suivantes sur FilVar affecteront le fichier disque Nom_Fic. ...........................................................110
Si la chaîne Nom_Fic est une chaîne vide, FilVar est associé au fichier d'entrée ou de sortie standard. .......................110
Assign ne doit jamais être utilisé sur un fichier en cours d'utilisation..............................................................................110
REWRITE Rewrite(FilVar);...............................................................................................................................................110
Un nouveau fichier disque dont le nom est assigné à la variable FilVar est crée et préparé pour le traitement. Le
pointeur de fichier est placé au début de ce fichier, c'est- à-dire sur le composant numéro 0. Tout fichier pré-existant
avec le même nom est détruit. Un fichier disque créé par Rewrite est vide, il ne contient aucun élément......................110
RESET Reset(FilVar);.........................................................................................................................................................110
Le fichier disque affecté à FilVar est préparé pour traitement. Le pointeur du fichier est positionné au début de ce
fichier sur le composant numéro 0. FilVar doit référencer un fichier existant, sinon il se produira une erreur
d'entrée/sortie........................................................................................................................................................................110
READ Read(FilVar,Var);....................................................................................................................................................110
Var représente une ou plusieurs variables du type des éléments de FilVar séparées par des virgules. Chaque variable est
lue sur le fichier disque et après chaque opération de lecture le pointeur de fichier est avancé sur le composant suivant.
...............................................................................................................................................................................................110
WRITE Write(FilVar, Var);................................................................................................................................................110
Var représente une ou plusieurs variables du type des éléments de FilVar séparées par des virgules. Chaque variable est
écrite sur le fichier disque et après chaque opération d'écriture le pointeur de fichier est avancé sur le composant suivant.
...............................................................................................................................................................................................110
SEEK Seek(FilVar, N : LongInt);.......................................................................................................................................110
Seek déplace le pointeur de fichier sur le nième composant du fichier référencé par FilVar. N est une expression de type
entier long. La position du premier composant est 0. Pour pouvoir agrandir un fichier on peut déplacer le pointeur un
élément après le dernier élément.........................................................................................................................................110
CLOSE Close(FilVar);........................................................................................................................................................110
Le fichier disque associé à FilVar est fermé et le répertoire du disque est mis à jour pour tenir compte des modifications
apportées au fichier..............................................................................................................................................................110
Remarque: Il est nécessaire de fermer un fichier même si on n'a fait que des opérations de lecture sinon on aurait
rapidement trop de fichiers ouverts à la fois.......................................................................................................................110
DMSI/PROGRAMMATION - 161 -...................................................................................................................................110
ERASE Erase(FilVar);........................................................................................................................................................111
Le fichier disque associé à FilVar est effacé. Erase ne doit jamais être utilisé sur un fichier ouvert..............................111
RENAME Rename(FilVar,Str : String);.............................................................................................................................111
Le fichier disque associé à FilVar est renommé avec l'expression chaîne Str. Les opérations ultérieures sur FilVar
agiront sur le fichier disque portant le nouveau nom. Le répertoire du disque est mis à jour pour montrer les nouveaux
noms......................................................................................................................................................................................111
TRUNCATE Truncate(FilVar);..........................................................................................................................................111
Tronque le fichier à la position courante du pointeur de fichier. Tous les enregistrements situés après le pointeur de
fichier sont supprimés et la position courante dans le fichier devient la fin de fichier......................................................111
CHDIR ChDir(Str : String);................................................................................................................................................111
Change le répertoire courant. Si Str comporte une spécification d'unité logique (disque, disquette etc.), l'unité logique
courante est également modifiée..........................................................................................................................................111
MKDIR MkDir(Str : String);..............................................................................................................................................111
Crée un sous-répertoire.......................................................................................................................................................111
RMDIR RmDir(Str : String);..............................................................................................................................................111
Supprime un sous-répertoire vide.......................................................................................................................................111
GETDIR GetDir(B : Byte;Var Str : String);.......................................................................................................................111
Renvoie le répertoire courant pour le disque spécifié. B est une expression de type entier spécifiant le disque concerné.
B = 0 indiquele disque courant, B = 1 indique le lecteur A, B = 2 le disque B et ainsi de suite.......................................111
XVII.3 FONCTIONS STANDARD SUR LES FICHIERS TYPES...................................................111
EOF Eof(FilVar) : Boolean;................................................................................................................................................111
Fonction booléenne retournant VRAI si le pointeur de fichier pointe après le dernier élément du fichier ou si le fichier
ne contient aucun élément. ..................................................................................................................................................111
FILEPOS FilePos(FilVar) : LongInt;..................................................................................................................................111
Fonction entière retournant la position courante du pointeur de fichier. Le premier composant d'un fichier a le numéro
0............................................................................................................................................................................................111
FILESIZE FileSize(FilVar) : LongInt;...............................................................................................................................111
Fonction entière retournant la taille d'un fichier disque exprimée en nombre d'éléments de ce fichier. Si
FileSize(FilVar) est égale à 0, le fichier est vide................................................................................................................111
IORESULT IOResult : Word;.............................................................................................................................................112
Renvoie une valeur entière informant sur l'état de la dernière opération d'entrée/sortie exécutée. Le contrôle des
entrées/sortie doit être désactivé ({$I-}) pour pouvoir intercepter un code d'erreur. Les codes d'erreur sont indiqués dans
l'annexe B.............................................................................................................................................................................112
XVII.4 UTILISATION DES FICHIERS............................................................................................112
Avant d'utiliser un fichier, la procédure Assign doit être appelée pour affecter le nom du fichier à une variable fichier.
Avant d'effectuer toute opération de lecture ou d'écriture, le fichier doit être ouvert par un appel à Reset ou Rewrite. Cet
appel place le pointeur de fichier sur le premier élément du fichier disque.......................................................................112
Un fichier disque peut être agrandi seulement en ajoutant des composants à la fin du fichier existant. ........................112
Le pointeur de fichier peut être déplacé à la fin du fichier par l'instruction suivante :.....................................................112
Seek(FilVar,FileSize(FilVar));............................................................................................................................................112
XVII.5 FICHIERS TEXTES...............................................................................................................112
Contrairement aux autres types fichiers, les fichiers textes ne sont pas seulement des suites de valeurs de même type.
Bien que les éléments de base d'un fichier texte soient les caractères, ils sont structurés en lignes, chaque ligne étant
terminée par une marque de fin de ligne (séquence CR/LF). Le fichier est de plus terminé par une marque de fin de
fichier (Ctrl-Z). La longueur des lignes étant variable, la position d'une ligne dans un fichier ne peut pas être calculée.
En conséquence, les fichiers texte ne peuvent être manipulés que séquentiellement........................................................112
Le type TEXT est différent du type File Of Char..............................................................................................................112
Une variable fichier texte est déclarée par le mot réservé Text.........................................................................................112
EXEMPLE:.........................................................................................................................................................................112
Var fichier : Text;..............................................................................................................................................................112
Toute opération sur les fichiers doit être précédée par un appel à la procédure Assign et un appel à Reset ou à Rewrite
doit précéder toute opération d'écriture ou de lecture.........................................................................................................112
Rewrite permet de créer un nouveau fichier texte et la seule opération autorisée est l'écriture. .....................................112
Reset est utilisé pour ouvrir un fichier existant en lecture, la seule opération permise sur ce fichier est la lecture
séquentielle. Lorsqu'un nouveau fichier texte est fermé, une marque de fin de fichier est mise à la fin du fichier.........112
L'entrée et la sortie des caractères dans les fichiers textes s'effectuent par les procédures Read et Write. Les procédures
Readln, Writeln et Eoln permettent le traitement des lignes..............................................................................................112
READLN Readln(FilVarTxt);.............................................................................................................................................112
Va au début de la ligne suivante, c'est-à-dire écarte tous les caractères jusque et y compris la séquence CR/LF..........112
WRITELN Writeln(FilVarTxt);..........................................................................................................................................112
Ecrit une marque de fin de ligne, c'est-à-dire une séquence CR/LF dans le fichier texte................................................113
EOF Eof(FilVarTxt) : Boolean;..........................................................................................................................................113
Fonction booléenne retournant VRAI si le pointeur de fichier pointe après le dernier caractère du fichier ou si le fichier
ne contient aucun caractère. Si FilVarTxt est omis, le fichier d'entrée standard est supposé............................................113
EOLN Eoln(FilVarTxt) : Boolean;.....................................................................................................................................113
Fonction booléenne retournant VRAI si la fin de ligne a été atteinte, c'est-à-dire si le pointeur de fichier est positionné
sur le caractère CR de la séquence CR/LF. Si EOF(FilVarTxt) est vrai, alors Eoln(FilVarTxt) est également vrai. Si
FilVarTxt est omis, le fichier d'entrée standard est supposé...............................................................................................113
SEEKEOF SeekEof(FilVarTxt) : Boolean;........................................................................................................................113
Similaire à EOF, mais écarte les blancs, les TABs et les marques de fin de ligne, avant de tester la marque de fin de
fichier. Le résultat est de type Booléen...............................................................................................................................113
SEEKEOLN SeekEoln(FilVarTxt);....................................................................................................................................113
Similaire à Eoln, mais écarte les espaces et les TABs avant de faire le test. Le résultat est de type Booléen................113
FLUSH Flush(FilVarTxt);...................................................................................................................................................113
Flush vide le buffer interne du fichier disque FilVarTxt et assure que le buffer a été écrit sur le disque si une opération
d'écriture a eu lieu depuis la dernière mise à jour du disque. Flush n'a aucun effet sur les fichiers ouverts en lecture....113
APPEND Append(FilVarTxt);............................................................................................................................................113
Procédure ouvrant un fichier texte en mode Ajout. Si FilVarTxt est déjà ouvert, le fichier est d'abord fermé puis ouvert
de nouveau. Le pointeur de fichier est positionné en fin de fichier....................................................................................113
SETTEXTBUF SetTextBuf(FilVarTxt;Var Tamp[;Taille: Word]);..................................................................................113
Procédure permettant d'affecter à la variable FilVarTxt le tampon identifié par la variable Tamp et non plus le tampon
affecté par défaut à FilVarTxt. Taille (de type Word) spécifie la taille du tampon en octets. Si Taille est omis,
SizeOf(Tamp) est présumée.................................................................................................................................................113
XVII.6 FICHIERS NON TYPES........................................................................................................114
Les fichiers non typés sont des canaux d'entrée/sortie de bas niveau, utilisés principalement pour l'accès direct à tout
fichier disque. ......................................................................................................................................................................114
Un fichier sans type est compatible avec tout autre fichier. Dans les opérations d'entrée/sortie sur des fichiers sans type,
les données sont transférées directement entre le fichier disque et la variable, économisant ainsi l'espace nécessaire du
buffer requis pour les fichiers avec type. Un fichier sans type est déclaré avec le mot réservé file.................................114
Var.......................................................................................................................................................................................114
DataFile : file;...................................................................................................................................................................114
Dans le cas des fichiers non typés, les procédures RESET et REWRITE acceptent un paramètre supplémentaire
permettant de spécifier la taille de l'enregistrement utilisé pour les transferts..................................................................114
Reset(FilVar,Taille: Word) et Rewrite(FilVar,Taille: Word);.........................................................................................114
Si Taille est omis, la taille de l'enregistrement est de 128 octets......................................................................................114
BLOCKREAD / BLOCKWRITE.......................................................................................................................................114
Toutes les procédures et les fonctions standards de manipulation de fichiers, excepté Read, Write et Flush sont
autorisées sur les fichiers sans type. Read et Write sont remplacées par deux procédures de transfert à haute vitesse :
BlockRead et BlockWrite....................................................................................................................................................114
BlockRead(FilVar,Var Buf; Quanti: Word);.....................................................................................................................114
BlockWrite(FilVar,Var Buf; Quanti: Word);....................................................................................................................114
ou.........................................................................................................................................................................................114
BlockRead(FilVar,Var Buf; Quanti: Word; Var Result: Word);......................................................................................114
BlockWrite(FilVar,Var Buf; Quanti: Word; Var Result: Word);.....................................................................................114
où Buf est toute variable et Quanti est une expression entière donnant le nombre d'enregistrements de Taille octets à
transférer entre le fichier disque et la variable. Le bloc transféré aura au maximum la taille de Quanti * Taille. Le
paramètre facultatif Result retourne le nombre d'enregistrements réellement transféré. Si Result n'est pas précisé, une
erreur d'entrée/sortie surviendra si le nombre d'enregistrements lus n'est pas égal à Quanti............................................114
Un appel à BlockRead ou BlockWrite avance le pointeur de fichier de Result enregistrements.....................................114
XVII.7 PERIPHERIQUES DANS TURBO PASCAL........................................................................115
TURBO PASCAL et le MS/PC-DOS considèrent les équipements externes tels que le clavier, l'écran et l'imprimante
comme des périphériques. Au niveau programmation, ces périphériques sont traités comme des fichiers......................115
Le périphérique CON..........................................................................................................................................................115
CON se rapporte au périphérique CONsole qui permet d'envoyer des informations vers l'écran et d'en recevoir à partir
du clavier. Les entrées depuis CON sont 'orientées ligne'. Un caractère de fin de fichier est généré en frappant la
séquence Ctrl-Z....................................................................................................................................................................115
Les périphériques LPT1, LPT2 et LPT3.............................................................................................................................115
La famille LPTx concerne les trois imprimantes que l'on peut utiliser sur le système. Si une seule imprimante est
connectée, elle est référencée LPT1 (synonyme PRN).......................................................................................................115
L'unité standard PRINTER contient la déclaration d'une variable de fichier texte appelée Lst qu'elle associe au
périphérique LPT1................................................................................................................................................................115
Les périphériques COM1 et COM2....................................................................................................................................115
Ces périphériques de communication concernent les deux ports de communication série. Le synonyme de COM1 est
AUX......................................................................................................................................................................................115
Le périphérique NUL..........................................................................................................................................................115
Ce périphérique ignore toute écriture et génère une fin de fichier immédiate. Il peut être utilisé lorsque l'on ne veut pas
créer de fichier particulier....................................................................................................................................................115
Les variables de fichiers texte INPUT et OUTPUT...........................................................................................................115
Ces variables sont disponibles dès le démarrage de tout programme PASCAL. Input correspond à un fichier en lecture
seule associé au clavier et Output à un fichier en écriture seule associé à l'écran.............................................................115
Write(Ch) équivalent à Write(Output,Ch)..........................................................................................................................115
Read(Ch) équivalent à Read(Input,Ch)..............................................................................................................................115
Writeln équivalent à Writeln(Output).................................................................................................................................115
Readln équivalent à Readln(Input).....................................................................................................................................115
Eof équivalent à Eof(Input).................................................................................................................................................115
Eoln équivalent à Eoln(Input).............................................................................................................................................115
XVII.8 ENTREE ET SORTIE DE TEXTE........................................................................................116
Si le premier paramètre d'une procédure d'entrée/sortie est l'identificateur d'une variable représentant un fichier,
l'opération d'entrée/sortie aura lieu sur ce fichier. Dans le cas contraire, l'opération se fera sur les fichiers standards Input
et Output...............................................................................................................................................................................116
PROCEDURE READ..........................................................................................................................................................116
La procédure READ permet l'entrée de caractères, chaînes et de données numériques...................................................116
Read(Var1,Var2,...,VarN).................................................................................................................................................116
ou........................................................................................................................................................................................116
Read(FilVar,Var1,Var2,...,VarN).....................................................................................................................................116
où Var1,Var2,...,VarN sont des variables de type Caractère, Chaîne, Entier, ou Réel....................................................116
Avec une variable de type Char, Read lit un caractère dans le fichier et affecte ce caractère à la variable....................116
Avec une variable de type Chaîne, Read lit tous les caractères jusqu'au prochain indicateur de fin de ligne (ce dernier
exclus). Si cette chaîne est plus longue que la chaîne destinataire, la chaîne est tronquée. .............................................116
Avec une variable numérique, Read attend une chaîne de caractères se conformant au format d'une constante numérique
du type adéquat. Tous les caractères délimiteurs (espaces, tabulation ou indicateur de fin de ligne) sont ignorés. La
lecture s'arrête soit au premier caractère délimiteur soit lorsque Eof(FilVar) devient vrai. .............................................116
PROCEDURE READLN....................................................................................................................................................116
La procédure Readln est identique à la procédure Read, excepté que lorsque la dernière variabl