Cos
Fonction : Real 3, SYS : 4, 5, 6
Syntaxe
Cos(r)
où r est une expression de type Real.
Description
La fonction Cos renvoie le cosinus d'un angle r.
Remarque
Comme dans la plupart des langages de programmation, les fonctions trigonométriques travaillent en radians et non en degrés.
Pour rappel :
angle en degrés = 180 / pi angle en radians
angle en radians = pi / 180 angle en degrés
Exemple
res := Cos ((Pi/180) * angle);
Grâce au facteur de conversion Pi/180, res contiendra le cosinus de angle exprimé en degrés.
CSeg
Fonction : (Integer) Word (3) SYS : 4, 5, 6
Syntaxe
CSeg
Description
La fonction CSeg renvoie le contenu du registre CSeg (Code Segment). Le résultat est l'adresse du segment de code à l'intérieur duquel la fonction a été utilisée. En Turbo Pascal 3, il n'y a qu'un seul segment de code et les programmes ne peuvent dépasser 64 Ko. A partir de la version 4, le programme principal et chaque unité ont leur propre segment de code. Chaque module ne peut dépasser 64 Ko mais la taille totale du programme ( le nombre d'unités utilisées) n'est limitée que par la mémoire disponible.
Remarque
En Turbo Pascal 3 la valeur renvoyée est un Integer. À partir de la version 4, elle est de type Word.
Dec
Fonction : Scalaire SYS : 4, 5, 6
Syntaxe
Dec (s, n);
où s est une expression de type scalaire et n (optionnel) une expression entière.
Description
La fonction Dec a pour effet de décrémenter la variable scalaire qui lui est transmise comme argument. Si le paramètre n est utilisé, la variable sera décrémentée de n unités. Pour rappel, les types scalaires sont : ShortInt, Integer, LongInt, Byte, Word, Char, Boolean, énumérés et les intervalles de ces types. Le résultat de la fonction est du type de l'argument qui lui a été transmis.
Remarque
La fonction Dec est une alternative beaucoup plus rapide à une affectation comme i : = i - 2. En effet, dans ce cas, l'adresse de i est calculée deux fois, tandis qu'à l'aide de Dec elle ne le sera qu'une seule fois. Dans le cas de boucles souvent utilisées, le gain de temps peut être non négligeable.
Exemple
i := 20000;
While i > 3 Do
Begin
WriteLn (i);
Dec (i, 2);
End;
La procédure Dec est utilisée pour décrémenter la valeur de i de 2 à chaque itération de la boucle While.
Delay
Procédure 3, CRT : 4, 5, 6
Syntaxe
Delay (sec_1000);
où sec_1000 est une expression de type Integer en Turbo Pascal 3 et Word à partir de la version 4.
Description
La procédure Delay est utilisée pour introduire une temporisation dans un programme. L'argument transmis en définit la durée, exprimée en principe en millièmes de seconde. Suivant le type particulier du processeur utilisé, le délai effectué réellement peut varier légèrement.
Exemple
Sound (1000);
Delay (2000);
NoSound;
Un son de fréquence 1000 Hz est émis pendant 2 secondes avant qu'il ne soit interrompu par NoSound. La procédure Delay est utilisée ici pour retarder l'exécution de NoSound.
Delete
Procédure 3, SYS : 4, 5, 6
Syntaxe
Delete (ch, pos, nbre);
où ch est une expression de type String, pos et nbre de type Integer.
Description
La procédure Delete permet de détruire une partie d'une chaîne de caractères ch. La partie effacée est constituée de nbre caractères de la chaîne ch à partir du caractère pos.
Remarques
· Si le paramètre pos est plus grand que la longueur de la chaîne ch, aucun caractère n'est détruit.
· Si le paramètre pos additionné de nbre est plus grand que la longueur de la chaîne ch, seuls les caractères à partir de pos jusqu'à la fin de ch sont détruits.
· Si les paramètres pos et nbre sortent de l'intervalle 1..255, on aura une erreur d'exécution.
Exemple
ch := 'ceci est un exemple';
Delete (ch, 5, 4);
Delete (ch, 8, 20 );
Après le premier appel à Delete, ch vaut Ceci un exemple, après le second appel, Ceci un.
DelLine
Procédure 3, CRT : 4, 5, 6
Syntaxe
DelLine;
Description
La procédure DelLine a pour effet de supprimer la ligne en cours dans les limites de la fenêtre qui est actuellement définie. S'il n'y a aucune fenêtre définie, la ligne est supprimée jusqu'au bord droit de l'écran (fenêtre par défaut). Une nouvelle ligne vierge est créée dans le bas de la fenêtre, elle a la couleur du fond. Cette couleur peut être soit celle définie par défaut (Black en général), soit précisée par TextBackGround.
Après l'appel à DelLine, le curseur est placé au début de la ligne.
Exemple
GotoXY (10, 10);
DelLine;
Le curseur est placé sur le dixième caractère de la dixième ligne. Cette ligne est ensuite effacée et le curseur est alors positionné sur le premier caractère de la nouvelle dixième ligne (l'ancienne onzième).
DetectGraph
Procédure GRAPH : 4, 5, 6
Syntaxe
DetectGraph (pilote, mode);
où pilote et mode sont des variables entières.
Description
La procédure DetectGraph renvoie le type de matériel graphique installé (pilote) ainsi que son plus haut mode de résolution possible (mode). Cette procédure est appelée par la procédure InitGraph utilisée en mode automatique. Elle peut être intéressante pour le programmeur qui désire forcer l'utilisation de certains modes dans des cas particuliers.
Remarque
La carte Graphique IBM-8514 n'est pas reconnue par DetectGraph qui croit rencontrer une carte VGA.
Exemple
DetectGraph (pilote, mode);
WriteLn ('Matériel : ', pilote, 'meilleur mode : ', mode );
Le matériel et son mode qui convient le mieux au Turbo Pascal, sont détectés puis affichés.
DiskFree
Fonction : LongInt DOS : 4, 5, 6
Syntaxe
DiskFree (unite)
où unite, de type Byte, est le numéro de l'unité désignée.
Description
Cette fonction de type LongInt renvoie, exprimé en octets, l'espace qui reste libre sur une disquette ou un disque.
L'unité est désignée de la manière suivante :
0 unité par défaut
1 disquette A:
2 disquette B:
3 disque dur C:
4 disque dur D:
etc.
Remarques
· Si le lecteur désigné n'existe pas, la fonction renverra la valeur -1. Cette caractéristique peut, comme DiskFree, être utilisée pour déterminer les unités installées.
· La place utilisée sur l'unité est égale à DiskSize moins DiskFree.
Exemple
Writeln (' Il reste ',DiskFree (3), ' octets sur le disque C:');
La place libre sur le disque C: est affichée à l'écran.
DiskSize
Fonction : LongInt DOS : 4, 5, 6
Syntaxe
DiskSize (unite)
où unite, de type Byte, est le numéro de l'unité désignée.
Description
Cette fonction de type LongInt renvoie, exprimée en octets, la taille totale de l'unité désignée.
L'unité est désignée de la manière suivante :
0 unité par défaut
1 disquette A:
2 disquette B:
3 disque dur C:
4 disque dur D:
etc.
Remarques
· Si le lecteur désigné n'existe pas, la fonction renverra la valeur -1. Cette caractéristique peut être utilisée, comme DiskFree, pour déterminer les unités installées.
· La place utilisée sur l'unité est égale à DiskSize moins DiskFree.
Exemple
Writeln ('la taille de C: est', DiskSize (3), ' octets ');
Writeln (' ', DiskSize (3) – DiskFree (3), ' octets utilisés sur C: ');
La taille totale de l'unité C: est affichée, la place libre est ensuite calculée et affichée.
Dispose
Procédure 3, SYS : 4, 5, 6
Syntaxe
Dispose (p);
où p est une variable pointeur désignant une variable dynamique dans le tas.
Description
La procédure Dispose a pour effet de détruire une variable dynamique créée à l'aide de New. L'espace mémoire est libéré et le pointeur p prend une valeur indéfinie. Après l'appel à Dispose il n'est plus possible d'utiliser la variable pointée par p.
Lorsque la variable dynamique est un objet, il est possible d'utiliser un argument supplémentaire indiquant le nom d'un destructeur à utiliser avant de libérer l'espace mémoire :
Dispose (p, dest);
où dest est le nom du destructeur à utiliser.
Remarque
Comme la variable p doit effectivement pointer vers une variable dynamique, il n'est pas possible de faire deux appels successifs à Dispose avec le même pointeur : Error 204: Invalid pointer operation.
Exemple
Dispose (point_chaine);
La variable point_chaine^ est détruite, son emplacement en mémoire est libéré et la valeur du pointeur point_chaine est indéfinie.
Div
Opérateur 3, 4, 5, 6
Syntaxe
entier1 Div entier2
où entier1 et entier2 sont des expressions de type entier.
Description
L'opérateur Div renvoie le résultat entier de la division de deux entiers. Si le résultat mathématique de la division est un réel, l'entier directement inférieur est le résultat de l'opération.
Remarques
· Cet opérateur ne peut s'appliquer qu'à deux entiers ou apparentés : ShortInt, Integer, LongInt, Byte, Word.
· Une erreur d'opérandes est diagnostiquée lors de la compilation : Error 41 : Operand types do not match operator.
Exemple
a := 7;
b := 4;
c := a Div b;
La variable c recevra la valeur entière 1.
DosExitCode
Fonction : Word DOS : 5, 6
Syntaxe
DosExitCode
Description
Cette fonction retourne le code renvoyé par un sous programme exécuté à l'aide de la fonction Exec. La valeur renvoyée, de type Word comporte deux parties : l'octet de poids faible et l'octet de poids fort.
L'octet de poids faible peut être déterminé par la procédure Halt ou Keep. Bien que le type de l'argument renvoyé par ces procédures soit de type Word, seul le premier octet est pris en considération. En pratique, cela signifie que, si Halt renvoie la valeur 300, DosExitCode ne récupère que 44 soit 300 - 256. Cet octet est accessible par la fonction Hi.
L'octet de poids fort spécifie le code de fin de programme selon la convention suivante :
0 fin normale,
1 fin provoquée par l'utilisateur (Ctrl-Break),
2 erreur d'entrée sur périphérique,
3 programme terminé par Keep.
Cet octet est accessible par la fonction Lo.
Remarques
· Après un appel à un sous-programme externe, la fonction DosExitCode n'est appelable qu'une seule fois. Il sera donc souvent nécessaire de stocker sa valeur dans une variable intermédiaire avant de séparer l'octet de poids fort de l'octet de poids faible.
· Tous les programmes ne renvoient pas nécessairement un code de sortie. Par exemple les programmes Turbo Pascal ne le renvoient que par l'intermédiaire de la procédure Halt.
Exemple
Exec ('prog1.exe','');
rep := DosExitCode;
WriteLn (Hi(rep), ' ', Lo(rep));
Le sous-programme externe prog1.exe est exécuté à l'aide de la procédure Exec; son code de sortie est récupéré par la fonction DosExitCode; les octets de poids fort et de poids faible sont ensuite affichés.
DosVersion
Fonction : Word DOS : 4, 5, 6
Syntaxe
DosVersion
Description
Cette fonction de type Word renvoie la version de Ms-Dos utilisée sur l'ordinateur qui exécute le programme. Cette fonction peut être très utile sur des programmes destinés à être diffusés car certaines procédures et fonctions de l'unité Dos se comportent différemment suivant la version de Ms-Dos, par exemple lors de la recherche de fichiers. La réponse fournie peut être divisée en deux parties : l'octet de poids faible comporte la version majeure (2, 3, 4,...), l'octet de poids fort la sous-version (1,.22,.3,...).
Exemple
WriteLn(Lo(DosVersion), '.', Hi(DosVersion));
Ecrit la version et la sous-version du Dos en cours; par exemple, 3.30.
Double
Identificateur de type 4, 5, 6
Syntaxe
identv1, identv2,... : Double;
ou identt1, identt2,... = Double;
où indentv1, identv2,... sont des identificateurs de variables et identt1, identt2,... sont des identificateurs de types.
Description
Ce mot est utilisé lors de la déclaration de variables ou de types réels doubles, il est compatible avec le coprocesseur arithmétique. Une variable Double est stockée en mémoire dans 8 octets, son domaine de validité est +/-5 x 10-324 à +/-3.4 x 10+308, avec de 15 à 16 décimales exactes. Il est compatible, dans son domaine de définition, avec les autres type réels.
Remarques
· La valeur des variables de ce type doit être comprise entre +/-5.0 x 10-324 et +/-3.4 x 10+308. Sur les nombres de type réel une vérification est effectuée en cas de dépassement de capacité (overflow) mais pas en cas de sous-dépassement de capacité (underflow). Dans ce cas, il n'y a pas d'erreur d'exécution et le programme peut avoir un comportement aberrant.
· En Turbo Pascal 4 vous devez posséder un coprocesseur au moment de la compilation pour accéder au type Double. Dans les versions 5 et 6, vous pouvez utiliser une émulation logicielle, mais celle-ci sera plus lente que les opérations sur les Real et que si le coprocesseur est physiquement présent (directive de compilation $N).
· Ce type est une extension au Pascal standard.
Exemples
Type mesure = Double;
Var longueur, largeur : Double;
Le type mesure est défini comme synonyme du type Double et les variables longueur et largeur sont déclarées de type Double.
DrawPoly
Procédure GRAPH : 4, 5, 6
Syntaxe
DrawPoly(nbre, coord);
où nbre est une expression de type Word et coord n'a pas de type prédéfini.
Description
La procédure DrawPoly permet de dessiner les contours d'un polygone. Le premier paramètre indique le nombre de points à joindre, le second donne les coordonnées de ces points. Il a la forme suivante :
coord : Array [1..nbre] Of PointType;
Le type PointType est défini dans l'unité Graph :
PointType = Record
x : Integer;
y : Integer;
End;
Le type du trait (continu, pointillé,...) et l'épaisseur de la ligne sont définis par SetLineStyle, la couleur par SetColor.
Remarque
Pour dessiner une forme fermée le dernier point doit être le même que le premier. Il est donc nécessaire de fournir 1 point de plus que le nombre de sommets.
Exemple
los [1].x := 150; los [1].y := 200;
los [2].x := 200; los [2].y := 150;
los [3].x := 250; los [3].y := 200;
los [4].x := 200; los [4].y := 250;
los [5].x :m 150; los [5].y := 200;
DrawPoly (5, los);
Dessine un losange dont les coordonnées des sommets se trouvent dans la variable los.
DSeg
Fonction : (Integer) Word (3) SYS : 4, 5, 6
Syntaxe
DSeg
Description
La fonction DSeg renvoie le contenu du registre DSeg (Data Segment). Le résultat est l'adresse de base du segment de donnée, elle n'est pas modifiée durant l'exécution du programme.
Le segment de donnée contient les variables globales et les constantes typées et ne peut dépasser 64 Ko. Il s'étend de DSeg:0000 à SSeg:0000.
Remarque
En Turbo Pascal 3 la valeur renvoyée est un Integer, à partir de la version 4, elle est de type Word.
Ellipse
Procédure GRAPH : 4, 5, 6
Syntaxe
Ellipse(x, y, angle a, angle_b, axe_x, axe_y);
où x et y sont des expressions de type Integer et angle_a, angle_b, axe_x et axe_y de type Word.
Description
La procédure Ellipse dessine un arc d'ellipse dont le centre est le point de coordonnées (x, y). La longueur de l'axe vertical, axe_x, de l'axe horizontal, axe_y, et est compris entre les angles angle_a et angle_b. Les angles sont donnés en degrés de la manière trigonométrique habituelle : dans le sens inverse des aiguilles d'une montre avec le zéro à 3 heures. Le type du trait (continu, pointillé,...) et l'épaisseur de la ligne devraient être définis par SetLineStyle et la couleur par SetColor.
La procédure Circle ne modifie pas la valeur du pointeur courant. Suivant la définition de la fenêtre active donnée par SetViewPort, l'arc peut ne pas être dessiné en entier. Il est possible de connaître les extrémités de l'arc tracé par GetArcCoords.
Remarque
Pour dessiner une ellipse complète, il suffit, par exemple, de spécifier 0 et 360 degrés comme angles.
Exemple
Ellipse (200, 200, 90, 180, 100, 50);
Trace un arc d'ellipse dont le centre est le point (200,200), l'axe X = 100 et Y = 50, entre les angles 90 et 180 degrés.
End
Mot réservé 3, 4, 5, 6
Syntaxe
End
Description
Ce mot réservé marque le plus souvent la fin d'une instruction composée, mais il est également utilisé pour clôturer les structures Case et les déclarations de Record.
Les instructions composées sont des suites d'instructions séparées par le symbole « ; » et encadrées par les mots réservés Begin et End. Les instructions sont de quatre types : affectations, appels de procédures, instructions de contrôle et instructions composées. Remarquons que la partie exécutable des programmes procédures et fonctions a la forme d'une instruction composée.
Remarques
· Les structures Begin..End mal balancées sont repérées lors de la compilation mais le message d'erreur n'est pas toujours explicite (exemple : Error 85: ".", expected ou Error 94 : ". " expected).
· Comme, dans la grande majorité des cas, à un Begin correspond un End, une bonne manière de ne pas en oublier et d'avoir une structure de programme correcte est de les aligner verticalement.
Exemples
If a > 3 Then
Begin
j := Sqr ( 1);
r := r / a;
a := a - 1;
End;
Le mot réservé End est utilisé pour indiquer que trois instructions sont soumises à la condition IF.
Case i Of
1 : prix := prix * 0.95;
2, 3 : prix := prix * 0.90;
4.. 10 : prix := prix * 0.85;
Else
prix := prix * 0.80;
End;
Le mot réservé End est utilisé pour terminer une structure Case.
EnvCount
Fonction : Integer DOS : 5, 6
Syntaxe
EnvCount
Description
Cette fonction renvoie le nombre de lignes de caractères utilisés de la zone environnement de Ms-Dos. C'est dans cette zone que sont stockées un certain nombre de valeurs comme le path, la définition du prompt etc. elle est accessible sous Ms-Dos par la commande Set.
Remarque
La fonction EnvStr permet de lire les lignes de la zone d'environnement.
Exemple
Writeln (' La zone d''environnement de Ms-Dos à ', EnvCount, 'lignes');
Le nombre de lignes de la zone d'environnement est affiché.
EnvStr
Fonction : String DOS : 5, 6
Syntaxe
EnvStr (numero)
où numero est l'indice de la ligne dans la zone d'environnement.
Description
Cette fonction permet de lire une ligne de la zone d'environnement de Ms-Dos. C'est dans cette zone que sont stockées un certain nombre de valeurs comme le path, la définition du prompt, etc. elle est accessible sous Ms-Dos par la commande Set. Le format de chaque ligne est du type variable d'environnement=valeur.
Remarques
· Les lignes sont comptées à partir de 1 pour la première. Si le paramètre transmis est inférieur à 1 la chaîne sera vide.
· La fonction EnvCount permet de connaître le nombre de lignes de la zone d'environnement.
Exemple
WriteLn (' " ',EnvStr(l),, " ');
La première ligne de la zone d'environnement de Ms-Dos est affichée.
Eof
Fonction : Boolean 3, SYS : 4, 5, 6
Syntaxe
Eof (fich)
où fich est une variable de type fichier.
Description
La fonction booléenne Eof envoie vrai si la fenêtre de lecture/écriture est positionnée après la fin du fichier et si le fichier est vide. Elle renvoie faux dans les autres cas. Sur des fichiers typés le pointeur se trouve après le dernier élément, sur des fichiers texte après le dernier caractère, sur la marque de fin de fichier.
Remarques
· Si Eof ne peut effectuer son test, une erreur est renvoyée par l'intermédiaire de IoResult. Toutefois, pour éviter que le programme ne se termine prématurément, la directive de compilation {$I-} doit avoir été spécifiée.
· Avant toute opération de lecture, comme Eof, les fichiers doivent être ouverts avec Assign et Reset ou Rewrite.
Exemple
Reset (fich);
While Not Eof (fich) Do
Begin
Read (fich, elem);
Writeln ( elem.nom, elem.prenom);
End;
Le fichier fich est lu en entier et deux champs nom et prenom sont écrits à l'écran.
Eoln
Fonction : Boolean 3, SYS : 4, 5, 6
Syntaxe
Eoln (fich)
où fich (optionnel) est une variable de type fichier de texte (Text).
Description
La fonction Eoln, lorsqu'elle porte sur un fichier, renvoie vrai si le pointeur de fichier désigne le caractère CR (Carriage Return) ou si Eof est vrai. Dans les autres cas, elle renvoie faux. Lorsque le nom de fichier est omis elle agit sur le clavier en attendant la frappe de Enter.
Remarques
· Si Eof ne peut effectuer son test, une erreur est renvoyée par l'intermédiaire de IoResult. Toutefois, pour éviter que le programme ne se termine prématurément, la directive de compilation {$I-} doit avoir été spécifiée.
· Avant toute opération de lecture, comme Eoln, les fichiers doivent être ouverts avec Assign et Reset ou Rewrite.
Exemple
If Eoln(fich) Then Readln(fich, car) Else Read (fich, car);
Si l'on se trouve en fin de ligne, le caractère lu est le premier de la ligne suivante, sinon c'est le caractère désigné par le pointeur qui est lu.
Erase
Procédure 3, SYS : 4, 5, 6
Syntaxe
Erase (fich);
où fich est une variable de type fichier.
Description
La procédure Erase permet d'effacer un fichier Ms-Dos sur disque. Elle peut porter sur tous les fichiers : texte, typés ou non typés. Les répertoires sont automatiquement mis à jour.
Remarques
· La variable de type fichier doit avoir été mise en relation avec un fichier Ms-Dos à l'aide de Assign. Cependant, le fichier doit impérativement être fermé pour pouvoir être effacé. S'il a été ouvert avec Reset, Rewrite ou Append, il doit être explicitement fermé avec Close.
· Si Erase ne peut être exécuté correctement, une erreur est renvoyée par l'intermédiaire de IoResult. Toutefois, pour éviter que le programme ne se termine prématurément, la directive de compilation { $I-} doit avoir été spécifiée.
Exemple
{$I-}
Assign (fich, 'C:\DATA\CLIENT.BAK');
Erase (fich);
{$I+}
Le fichier C:\DATA\CLIENT.BAK est associé à la variable fich, il est ensuite effacé.
Exec
Procédure DOS : 4, 5, 6
Syntaxe
Exec (chemin, param);
où chemin est un nom de fichier exécutable de type String en Turbo Pascal 4 et de type String [97] en version 5 et 6; param les paramètres de ce programme de type String en version 4 et String [127] au-delà.
Description
La procédure Exec permet à un programme Turbo Pascal
d'exécuter un autre programme d'extension
« .EXE » ou «
.COM ». Le premier paramètre spécifie le nom du programme ainsi que sa position
(nom d'unité et de répertoire). Le second paramètre donne les paramètres
éventuels de la ligne de commande telle qu'elle serait tapée sous Ms-Dos.
Remarques
· Lors du démarrage du sous-programme externe, plusieurs erreurs peuvent se produire, elles sont renvoyées par la variable prédéfinie DosError :
2 fichier introuvable
8 mémoire insuffisante
10 environnement non valide
11 format de fichier non valide
· Le sous-programme exécuté peut renvoyer au programme appelant un message de fin d'exécution. Ce message peut être généré par la procédure Halt et être récupéré par la fonction DosExitCode.
· Il est prudent d'appeler, avant et après l'exécution d'un sous-programme externe, la procédure SwapVectors de manière à éviter les interférences dans les processus de gestion des interruptions.
· Une quantité de mémoire suffisante doit être disponible pour l'exécution du sous-programme externe. Par défaut, un programme Pascal occupe toute la mémoire centrale disponible, afin de pouvoir stocker le maximum de variables dynamiques et d'appels récursifs. Il est donc nécessaire d'utiliser une directive de compilation : {$M} ou de fixer la taille de la pile et du tas par les menus de l'environnement intégré.
Exemple
SwapVectors;
Exec ('C:\DOS\ATTRIB', ' -R *.* /S');
SwapVectors;
La commande, externe du Dos, Attrib est utilisée par le programme en cours; pour éviter que la table des vecteurs d'interruption ne soit modifiée, elle est préservée et rétablie par la procédure SwapVectors.
Exit
Procédure 3, SYS : 4, 5, 6
Syntaxe
Exit
Description
Cette procédure permet d'arrêter l'exécution d'une procédure, d'une fonction, d'un programme ou d'un sous-programme. Elle rend immédiatement le contrôle au bloc appelant.
Remarques
· Si cette procédure est appelée dans un programme principal elle provoque l'arrêt du programme et rend le contrôle à Ms-Dos ou à l'environnement Turbo Pascal.
· Elle agit comme une étiquette placée en fin du bloc où elle se trouve. Elle peut donc être vue comme un Goto fin du bloc qui provoquerait également la fin de l'exécution des instructions du bloc.
· La procédure Halt permet également d'arrêter un programme ou un sous-programme, de plus elle peut renvoyer un code d'erreur, ce que Exit ne permet pas.
Exemple
Exec ('prog1.exe','');
rep := DosExitCode;
If rep <> 0 Then Halt;
Le programme en cours lance l'exécution de prog1.exe. La valeur de DosExitCode est stockée dans la variable rep. Si elle est différente de 0 alors le programme en cours est arrêté.
Exp
Fonction : Real 3, SYS : 4, 5, 6
Syntaxe
Exp(r)
où r est une expression de type Real.
Description
La fonction Exp calcule l'exponentielle de r, c'est-à-dire er où e vaut 2.7182818285... La précision du calcul dépend de l'utilisation éventuelle des directives de compilation {$N} et {$E} et de la présence du coprocesseur arithmétique.
Remarque
La fonction Ln est la fonction inverse de Exp.
Exemple
res := Exp(3);
donne res = 20.085536923.
Extended
Identificateur de type 4, 5, 6
Syntaxe
identv1, identv2,... : Extended;
ou identt1, identt2,... = Extended;
où identv1, identv2,... sont des identificateurs de variables et identt1, identt2,... sont des identificateurs de types.
Description
Ce mot est utilisé lors de la déclaration de variables réelles étendues ou de types réels étendus, il est compatible avec le coprocesseur arithmétique. Une variable Extended est stockée en mémoire dans 10 octets, son domaine de validité est +/-1.9 x 10-4951.. +/-1.7 x 10+4932, avec de 19 à 20 décimales exactes. Il est compatible, dans son domaine de définition, avec les autres types réels.
Remarques
· La valeur des variables de ce type doit être comprise entre +/-1.9 x 10-4951 et +/-3.4 x 10+4932. Sur les nombres de type réel une vérification est effectuée en cas de dépassement de capacité (overflow) mais pas en cas de sous-dépassement de capacité (underflow). Dans ce cas, il n'y a pas d'erreur d'exécution et le programme peut avoir un comportement aberrant.
· En Turbo Pascal 4 vous devez posséder un coprocesseur au moment de la compilation pour accéder au type Extended. Dans les versions 5 et 6, vous pouvez utiliser une émulation logicielle, mais celle-ci sera plus lente que les opérations sur les Real et que si le coprocesseur est physiquement présent (directive de compilation $N).
· Ce type est une extension au Pascal standard.
Exemple
Type mesure = Extended;
Var longueur, largeur : Extended;
Le type mesure est défini comme synonyme du type Extended et les variables longueur et mesure sont déclarées de type Extended.
External
Mot réservé 3, 4, 5, 6
-- Turbo Pascal 4, 5, 6 --
Syntaxe
Procedure idp (par); External;
Function idf (par) : typef; External;
{$L nomfich}
où idp et idf sont des identificateurs de procédures et de fonctions, par les paramètres de celles-ci (optionnels) et nomfich le nom du fichier contenant les sous-programmes externes.
Description
Le mot réservé External apparaît dans la déclaration d'une procédure ou d'une fonction externe généralement écrite en assembleur. La première partie de la déclarative est exactement la même que celle d'une procédure ou d'une fonction habituelle; elle peut, par exemple, comporter ou non un passage de paramètres.
Remarque
Pour quelques lignes de codes machine, il peut être plus pratique de l'insérer directement dans le code source en Pascal à l'aide de InLine ou, à partir de la version 6, de se servir de la clause ASM.
Exemple
Function mult (x, y : Integer) : Integer; External;
Procedure reecrit; External;
{$L ext.obj}
Le code de la fonction mult et de la procédure reecrit sera lu dans le fichier externe ext.obj.
-- Turbo Pascal 3 --
Syntaxe
Procedure idp (par); External 'nomfich';
Function idf (par) : Typef; External 'nomfich';
Exemple
Procedure ligne (x, y : Integer); External 'graphic.com';
La procédure ligne sera lue dans le fichier graphic.com et transférée dans le code du programme.
Function moyenne (a, b : Real) : Real; External moy [125];
Cette fonction sera aussi lue dans le fichier mais l'adresse de son point d'ancrage dans le fichier externe est précisée (cette adresse est en fait l'offset de cette fonction)
FExpand
Fonction : PathStr DOS : 4, 5, 6
Syntaxe
FExpand (nom_fich)
où nom_fich est une variable ou une constante de type PathStr = String [79].
Description
Cette fonction a pour effet de compléter un nom de fichier en éliminant les paramètres relatifs. Par exemple, un nom de fichier se voit rajouter le nom du répertoire dans lequel il se trouve. L'ensemble est mis en majuscules. Les caractères joker (* et ?) ainsi que les symboles comme « .. » sont correctement traités.
Remarques
· II est bien sûr nécessaire que le fichier soit accessible par Turbo Pascal pour que cette fonction soit efficace.
· La procédure FSplit a pour effet de décomposer un nom de fichier en ses éléments constitutifs : nom d'unité de répertoire,...
Exemples
WriteLn (FExpand ('Turbo.exe'));
renvoie, par exemple, E:\TP\TURBO.EXE.
Writeln (FExpand ('C:\WP\*.*'));
renvoie C:\WP\*.* .
File
Identificateur de type 3, 4, 5, 5
Syntaxe
Type nomtyp = File Of ident;
Var nomvar : File Of ident; ou Type nomtyp = File; (possibilité supplémentaire à partir de Turbo 4) Var nomvar : File;
où nomtyp et nomvar sont des identificateurs de type ou de variable et ident un identificateur de type.
Description
Ce mot réservé permet de définir un type ou une variable de type fichier. Un fichier est, en Pascal, une suite ordonnée d'éléments du même type. Ce type peut être n'importe quel type de base sauf un fichier lui-même (les fichiers de fichiers n'existent pas en Ms-Dos). En pratique, le plus souvent le type de base sera un type enregistrement. A partir de Turbo Pascal 4, il est possible de définir des fichiers sans donner de type de base, on parlera de fichiers non typés. Cela sera utile lorsque l'on désire manipuler les fichiers (les copier, les renommer, par exemple) sans se préoccuper de leur structure interne. En Turbo Pascal 3 cette possibilité n'existe pas, mais il est possible de déclarer un fichier comme étant simplement un File OF Byte.
Remarques
· Avant toute utilisation d'une variable de type fichier, celle-ci doit être associée à un fichier sur disque à l'aide de la procédure Assign. Ensuite, il est nécessaire d'initialiser la fenêtre de lecture-écriture à l'aide de Reset ou Rewrite.
· Après l'utilisation d'un fichier, il est conseillé de fermer celui-ci à l'aide de la procédure Close. En effet, lors de l'écriture dans un fichier, le transfère physique des données passe par des tampons en mémoire centrale qui réduisent les accès disque. En cas de fin anormale du programme un partie des données peuvent ne pas avoir été transférées sur disque ce qui provoque donc des pertes de données.
Exemple
Type elem = Record
nom : String [25];
prenom : String [20];
adresse : String [60];
End;
fich = File Of elem;
Var client, fournisseur : fich; correspondant : elem;
Le type fich est défini comme File Of elem, les variables client et fournisseur sont déclarés de type fich et la variable correspondant est déclarée de type elem.
FilePos
Fonction : (Integer) LongInt (3) SYS : 4, 5, 6
Syntaxe
FilePos (fich)
où fich est une variable de type fichier typé ou non typé.
Description
La fonction FilePos renvoie la position du pointeur de fichier dans le fichier fich. Cette position est exprimée en nombre d'enregistrements comptés à partir de 0 pour le premier.
Remarques
· Avant toute opération de lecture, comme FilePos, les fichiers doivent être ouverts avec Assign et Reset ou Rewrite.
· FilePos ne peut être utilisé avec des fichiers Text.
· Si FilePos ne peut calculer la position, une erreur est renvoyée par l'intermédiaire de IoResult. Toutefois, pour éviter que le programme ne se termine prématurément, la directive de compilation {$I-} doit avoir été spécifiée.
· Lorsque Eof est vrai, FilePos renvoie la même valeur que FileSize.
Exemple
Seek (fich, FilePos(fich)-1);
Le pointeur de fichier est reculé d'un élément.
FileSize
Fonction : (Integer) LongInt (3) SYS : 4, 5, 6
Syntaxe
FileSize (fich)
où fich est une variable de type fichier typé ou non typé.
Description
La fonction FileSize renvoie la taille d'un fichier Cette taille est exprimée en nombre d'enregistrements comptés, à partir de 0 pour un fichier vide. Pour connaître la taille en octets, il suffit de définir le fichier comme File 0F Byte.
Remarques
· Avant toute opération de lecture, comme FileSize, les fichiers doivent être ouverts avec Assign et Reset ou Rewrite.
· FileSize ne peut être utilisé avec des fichiers Text.
· Si FileSize ne peut calculer la position, une erreur est renvoyée par l'intermédiaire de IoResult. Toutefois, pour éviter que le programme ne se termine prématurément, la directive de compilation {$I-} doit avoir été spécifiée.
· Lorsque Eof est vrai, FileSize renvoie la même valeur que FilePos.
Exemple
Assign ( fich, 'C :\DATA\CLIENT' );
Writeln (' Le fichier contient ',FileSize(fich), ' enregistrements');
Donne à l'écran le nombre d'enregistrements dans 'C:\DATA\CLIENT'.
FillChar
Procédure 3, SYS : 4, 5, 6
Syntaxe
FillChar (var, nbre, val);
où var est une variable d'un type quelconque, nbre une expression de type Word (Integer en Turbo Pascal 3) et val une valeur de type Byte ou Char.
Description
La procédure FillChar remplit nbre octets en mémoire centrale de la valeur val à partir du premier octet de la variable var. Cette procédure étant typiquement utilisée pour initialiser des variables composées, le nombre d'octets est habituellement SizeOf(var).
Remarques
· Lorsqu'on initialise une variable chaîne de caractères, il est nécessaire d'affecter soi-même la valeur de la longueur, par exemple : Ch [0] := longueur; .
· Si l'on initialise des variables occupant plus d'un octet, comme des Integer, c'est chaque octet de la variable qui est initialisé à la même valeur.
· Aucune vérification n'est faite sur la valeur du nombre d'octets à initialiser
Exemple
Var tab : Array [1..4] Of Integer;
...
FillChar (tab, SizeOf(tab), 0);
Writeln (tab [2]);
Donne la valeur 0 à tous les octets de la variable tab, à titre de contrôle, le deuxième élément est affiché.
FillEllipse
Procédure GRAPH : 5, 6
Syntaxe
FillEllipse(x, y, axe_x, axe_y);
où x et y sont des expressions de type Integer et axe_x et axe_y de type Word.
Description
La procédure FillEllipse dessine une surface elliptique dont le centre est le point de coordonnées (x, y), la longueur de l'axe vertical axe_x et celle de l'axe horizontal axe_y. A la différence de Ellipse, la surface est remplie avec le motif et la couleur définis à l'aide de SetFillStyle et éventuellement de SetFillPattern. De plus, le trait de l'ellipse est dessiné dans la couleur définie par SetColor.
Suivant la définition de la fenêtre active donnée par SetViewPort, l'ellipse peut ne pas être dessinée en entier.
Exemple
SetFillStyle (2, 1);
FillEllipse (200, 200, 150, 50);
Le motif de remplissage est défini comme motif = 2 (ou LineFill) en couleur 1. Une surface elliptique de centre (200, 200), d'axes X = 150 et Y = 50 est dessinée remplie par le motif dans la couleur définie.
FillPoly
Procédure GRAPH : 4, 5, 6
Syntaxe
FillPoly (nbre, coord);
où nbre est une expression de type Word et coord n'a pas de type prédéfini.
Description
La procédure FillPoly permet de dessiner une surface polygonale. Le premier paramètre indique le nombre de points à joindre pour en former les contours, le second donne les coordonnées de ces points. Il a la forme suivante :
coord : Array [1..nbre] Of Pointype;
Le type PointType est défini dans l'unité Graph :
PointType = Record
x : Integer;
y : Integer;
End;
Comme dans le cas de Bar, la surface est remplie avec le motif et la couleur définis à l'aide de SetFillStyle et éventuellement de SetFillPattern. Suivant la définition de la fenêtre active le rectangle peut ne pas être dessiné en entier.
Exemple
los [1].x := 150; los [l].y := 200;
los [2].x := 200; los [2].y := 150;
los [3].x := 250; los [3].y := 200;
los [4].x := 200; los [4].y := 250;
los [5].x := 150; los [5].y := 200;
SetFillStyle (9, 1);
FillPoly (5, carre);
Un losange est défini comme surface, le motif de remplissage est fixé à 9 (InterleaveFill = motif 3) et la couleur à 1. La procédure FillPoly dessine le losange à l'écran.
FindFirst
Procédure DOS : 4, 5, 6
Syntaxe
FindFirst (nom_fich, attr, resul);
où nom_fich est une variable de type String en Turbo Pascal 4 et String [79] en version 5, attr de type Word et resul de type SearchRec.
Le type SearchRec est un type prédéfini de l'unité Dos :
searchRec = Record
fill: Array [1..21] Of Byte; {inutilisé}
attr: Byte; {attribut du fichier}
time: LongInt; {heure}
size: LongInt; {date}
name: String [12]; {nom du fichier}
End;
L'attribut du fichier peut prendre les valeurs (prédéfinies dans l'unité Dos) suivantes :
ReadOnly = $01; {lecture seulement}
Hidden = $02; {caché}
SysFile = $04; {système}
VolumeID = $08; {nom d'unité}
Directory = $10; {nom de répertoire}
Archive = $20; {à archiver}
AnyFile = $3F; {n'importe}
Il est possible de combiner des attributs en les additionnant, par exemple $03 signifie un fichier caché en lecture seulement ($02 + $01).
Description
Cette procédure permet de chercher des fichiers sur le disque. On lui donnera un nom de fichier et une spécification d'attribut. Elle renverra le premier fichier trouvé correspondant aux spécifications données. Le nom de fichier comprenant éventuellement une désignation d'unité et de répertoires. Les caractères joker sont autorisés (exemple : D:\TXT*.EXE ).
Les attributs utilisés doivent correspondre aux valeurs définies par l'unité Dos (voir plus haut); si l'on n'a pas besoin de spécifier un attribut particulier, on utilisera AnyFile ou $3F.
La description du fichier trouvé est renvoyée sous la forme d'un enregistrement de type SearchRec prédéfini dans l'unité Dos.
Remarque
Les erreurs sont accessibles par l'intermédiaire de la variable DosError. Les valeurs possibles sont :
0 : tout s'est bien passé,
2 : répertoire non trouvé,
18 : fichier non trouvé.
Exemple
FindFirst('C:\*.*', $01, resul);
Writeln (resul.name);
Cherche le premier fichier dont l'attribut Read - Only est à On dans la racine de C:.
FindNext
Procédure DOS : 4, 5, 6
Syntaxe
FindNext (resul);
où resul est une variable de type SearchRec prédéfinie par l'unité Dos.
Description
Cette procédure renvoie la description du fichier suivant correspondant à l'appel de FindFirst.
Remarque
Voir aussi FindFirst.
Exemple
FindFirst('C:\*.*', $01, resul);
Writeln (resul.name);
FindNext (resul);
WriteLn (resul.name);
Le premier fichier de l'unité C: dont l'attribut est $01 (lecture seulement) est cherché, son nom est affiché à l'écran. Le fichier suivant, correspondant aux mêmes critères, est recherché et son nom est également affiché.
FloodFill
Procédure GRAPH : 4, 5, 6
Syntaxe
FloodFill (x, y, couleur);
où x, y sont des expressions de type Integer et couleur de type Word.
Description
La procédure FloodFill permet de remplir une surface fermée par le motif courant (déterminé par SetFillStyle ou SetFillPattern) et le paramètre couleur. Si le point de coordonnées (x, y) se trouve à l'intérieur de la figure, la surface sera remplie, s'il est à l'extérieur de celle-ci, c'est l'extérieur de la figure qui sera peint.
Remarque
Depuis son apparition avec la version 4, les manuels successifs de Turbo Pascal déconseillent d'utiliser cette procédure qui devrait être supprimée. De plus, il existe des cas dans lesquels elle fonctionne mal et même pas du tout.
Flush
Procédure 3, SYS : 4, 5, 6
Syntaxe
Flush (fich);
où fich est une variable de type fichier texte (Text).
Description
La procédure Flush a pour effet de vider le tampon d'écriture associé à un fichier texte. Par défaut tout fichier de ce type se voit attribué un tampon de 128 octets, mais ce chiffre peut être modifié par la procédure SetTextBuf à partir de Turbo Pascal 4 ou lors de la déclaration en version 3. Il peut être intéressant de vider le tampon lorsque l'on pense qu'une fin anormale du programme peut avoir lieu.
Remarques
· Le fichier doit être de type texte, en aucun cas typé ou non typé. Il doit avoir été ouvert en écriture à l'aide de Append ou Reset. S'il a été ouvert à l'aide de Rewrite la procédure n'a aucun effet.
· Si Flush ne peut écrire correctement, une erreur est renvoyée par l'intermédiaire de IoResult. Toutefois, pour éviter que le programme ne se termine prématurément, utilisez la directive de compilation {$I-}.
Exemple
Flush (fichier_de_texte);
Les tampons mémoire associés à la variable fichier_de_texte sont vidés et écrits physiquement sur le disque.
For
Mot réservé 3, 4, 5, 6
Syntaxe
For cont := init To fin Do inst;
For cont := init DownTo fin Do inst;
où cont, init et fin sont des variables scalaires (ShortInt, Integer, LongInt, Byte, Word, Boolean, Char ou énumérées) ou des intervalles de variables scalaires et inst est une instruction simple ou composée.
Description
Cette instruction est utilisée lorsque l'on désire qu'une instruction simple ou composée soit répétée un certain nombre de fois. En principe, ce nombre de fois doit être préalablement connu (voir While et Repeat.. Until). Pour ce faire, on utilise un compteur qui sera incrémenté (To) ou décrémenté (DownTo) à chaque tour de boucle depuis une valeur initiale vers la valeur finale.
Remarques
· La variable de contrôle peut être de n'importe quel type scalaire (le Pascal ne permet pas l'utilisation de réels).
· A partir de Turbo Pascal 4, cette variable de contrôle doit être déclarée localement dans le bloc du pro- gramme en cours.
· L'emploi d'une variable de contrôle de type Real donne le message Error 97: Invalid For control variable lors de la compilation. Dans le cas où cela est indispensable, une bonne solution est d'employer la boucle While.
· Les valeurs initiales, finales et la variable de contrôle doivent être compatibles au niveau affectation.
· Suivant les valeurs initiale et finale et l'emploi de To ou de DownTo, une boucle peut ne pas être exécutée en Pascal. En effet le test de fin de répétition à lieu avant l'exécution de l'instruction.
· En Pascal standard et en Turbo Pascal 3, il est interdit de modifier la variable de contrôle à l'intérieur de la boucle. Dans les versions 4, 5 et 6, il est permis de modifier la variable de contrôle.
Exemple
For i := 1 To 24 Do WriteLn ( i );
For car := 'z' DownTo 'a' Do
Begin
Write (car);
chaine := chaine + car;
End;
La première boucle affiche à l'écran le numéro des 24 premières lignes de l'écran. La seconde boucle a pour effet d'afficher dans l'ordre décroissant les lettres minuscules de 'z' à 'a' et de fabriquer la chaîne 'zyxwvutsrqponmlkjihgfedcba'.
Forward
Mot réservé 3, 4, 5, 6
Syntaxe
Procedure identp (param); Forward;
ou Function identf (param) : typefonc; Forward;
où identp et identf sont des identificateurs de procédure et de fonction; param les paramètres de celle-ci et typefonc le type de la fonction.
Description
Ce mot réservé spécifie que l'en-tête d'une procédure ou d'une fonction est déclaré avant la déclaration proprement dite qui comportera un rappel de l'en-tête et la description du corps de celle-ci. Cette seconde déclaration comportera le nom de la procédure ou de la fonction ainsi que son comportement (déclaratives et bloc), mais plus les paramètres.
Le mot réservé Forward permet la récursivité mutuelle entre deux procédures ou deux fonctions. En effet, la règle générale de Pascal est que l'on ne peut se servir d'un objet qu'après l'avoir déclaré. Dès lors, pour qu'une procédure ou une fonction puisse faire appel à une autre procédure ou fonction qui fait appel à la procédure de départ il est nécessaire d'utiliser Forward. On peut considérer qu'elle est annoncée plutôt que déclarée et que cela suffit à permettre de s'en servir.
Exemple
{Déclaration avancée de "premier"}
Function premier (a, b : Integer) : Integer; Forward;
{Déclaration de "second"}
Function second (c, d : Integer) : Integer;
...
Begin
...
l := premier (2, 3);
...
End;
{Déclaration du corps de "premier"}
Function premier;
...
Begin
...
m := second (3, 4);
...
End;
La fonction premier fait appel à la procédure second et inversement. Pour que cela soit possible, il est nécessaire de déclarer premier Forward. Remarquons que les paramètres de premier ne sont plus spécifiés lors de la déclaration effective de la fonction.
Frac
Fonction : Real 3, SYS : 4, 5, 6
Syntaxe
Frac (r)
où r est une expression de type Real.
Description
La fonction Frac renvoie la partie décimale d'une expression réelle. Elle est le complément de la fonction Int qui renvoie la partie entière d'un nombre réel. En fait, un nombre r est égal à la somme de Int(r) et Frac(r).
Exemple
Si res := Frac (23.4) alors res = 0.4
Si res := Frac (-23.4) alors res = -0.4
FreeMem
Procédure 3, SYS : 4, 5, 6
Syntaxe
FreeMem (p, t);
où p est une variable pointeur désignant une variable dynamique dans le tas et t une expression Integer en Turbo Pascal 3 et Word à partir de 4.
Description
La procédure FreeMem a pour effet de détruire une variable dynamique créée à l'aide de GetMem. L'espace mémoire est libéré et le pointeur p prend une valeur indéterminée. Après l'appel à FreeMem il n'est plus possible d'utiliser la variable pointée par p. A la différence de Dispose, FreeMem vous permet de spécifier le nombre d'octets à libérer en mémoire. Celui-ci doit être le même que celui spécifié lors de l'appel à GetMem.
Remarque
Comme la variable p doit effectivement pointer vers une variable dynamique, il n'est pas possible de faire deux appels successifs à Dispose avec le même pointeur : Error 204: Invalid pointer operation.
Exemple
FreeMem (point_ligne, 180);
La variable dynamique pointée par point_ligne est détruite en libérant 180 octets.
FSearch
Fonction : PathStr DOS : 5, 6
Syntaxe
FSearch (nom_fich, liste_rep)
où nom_fich est une variable de type PathStr et liste_rep de type String.
Description
Cette fonction renvoie le nom complet d'un fichier dont la position est a priori inconnue dans une liste de répertoires.
Le type PathStr est défini dans l'unité Dos comme String [79].
Remarques
· Si aucun fichier correspondant au nom n'a été trouvé dans la liste des répertoires, la chaîne retournée est vide.
· FSearch n'accepte pas les caractères joker ni les occurrences multiples d'un fichier puisqu'il s'arrête sur le premier trouvé. Dans ce cas, utilisez plutôt FindFirst et FindNext.
Exemple
n := FSearch ('DISKCOPY.COM','C:\;C:\DOS');
Recherche l'emplacement exact de DISKCOPY.COM dans la racine de C: et dans le répertoire Dos de C:.
FSplit
Procédure DOS : 4, 5, 6
Syntaxe
FSplit (chemin, repertoire, nom, extension)
où chemin, repertoire, nom et extension sont des variables ou des constantes respectivement de type PathStr, DirString, NameString et ExtString.
Ces différents types sont définis par l'unité Dos :
PathStr = String [79]; {Nom complet de fichier}
DirStr = String [67]; {Nom d'unité et de répertoire}
NameStr = String [8]; {Nom de fichier }
ExtStr = String [4]; {Extension du fichier y compris le point de séparation}
Description
Cette procédure permet de décomposer un nom de fichier complet (tel que renvoyé par FExpand, par exemple) en ses différents éléments constitutifs : son nom d'unité et de répertoire, le nom au sens strict du fichier et son extension.
Remarque
Les deux premiers caractères du nom du répertoire sont nécessairement le nom de l'unité. Il est donc assez simple de l'extraire.
Exemple
nomlong := FExpand ('Turbo.exe');
FSplit (nomlong, repertoire, nom, ext);
Writeln (' La séparation de ', nomlong, 'donne ');
Writeln (' unité et répertoire : ', repertoire);
Writeln (' nom au sens strict : ', nom);
Writeln (' extension : '. ext);
Résultat :
La séparation de Turbo.exe donne unité et répertoire : E:\TP\
nom au sens strict : TURBO
extension :.EXE
Function
Mot réservé 3, 4, 5, 6
Syntaxe
Function identf (parm) : typef;
corps de la fonction;
où identf est l'identificateur de la fonction, param la liste des paramètres formels et typef le type du résultat renvoyé par la fonction.
Description
Ce mot réservé est utilisé pour déclarer une fonction définie par l'utilisateur. Il sera suivi par le nom de celle-ci, la liste des paramètres formels nécessaires (avec leur type respectif) placée entre parenthèses, le symbole « : », le type de la fonction, le symbole « ; », le corps de la fonction. La déclaration de la fonction se termine par le symbole « ; ».
Le corps de la fonction a la même structure qu'un programme principal. Cela signifie qu'il comportera une partie déclarative et une partie exécutable et que dans cette partie déclarative on pourra trouver d'autres déclarations de procédures et de fonctions. A la différence d'une procédure, il est nécessaire de trouver, dans la partie exécutable de la fonction, une instruction du type identfonc := valeur sinon la valeur renvoyée par la fonction est indéterminée.
Habituellement, les fonctions sont appelées en tant qu'opérandes d'une expression. En version 6, si la directive de compilation {$X+} a été activée, les fonctions peuvent être appelées comme les procédures, en négligeant le résultat renvoyé par l'identificateur de fonction.
Comme les procédures les fonctions sont récursives, c'est-à-dire qu'elles sont susceptibles de s'appeler elles-mêmes.
Remarques
· En Pascal standard, les fonctions ne peuvent posséder que des paramètres passés par valeur, en Turbo Pascal les paramètres peuvent être passés par valeur ou par variable (précédés du mot réservé VAR).
· Les paramètres de type fichier doivent être transmis par variable.
· Les fonctions peuvent être déclarées Forward, External, ou InLine.
Exemple
Program exemple;
Function racine (nbr : Real) : Real;
Begin
If nbr >=0 Then racine := Sqrt (nombre) Else racine := 1;
End;
Var nbre, resu : Real;
Begin
ReadLn (nbre);
resu := racine (nbre);
If resu >= 0 Then WriteLn ('Racine carrée', resu) Else WriteLn ('nombre négatif');
End.
La fonction racine est déclarée de type réel avec un paramètre réel. Elle est appelée dans le corps du programme et le résultat renvoyé est affecté à la variable resu.
GetArcCoords
Procédure GRAPH : 4, 5, 6
Syntaxe
GetArcCoords (desc);
où desc est une variable du type ArcCoordsType défini par l'unité Graph de la manière suivante :
ArcCoordsType = Record
X, Y : Integer;
Xstart, Ystart : Integer;
Xend, Yend : Integer;
End;
Description
La procédure GetArcCoords renvoie, sous la forme d'un enregistrement, les coordonnées du centre (X, Y), du point de départ (Xstart, Ystart) et d'arrivée (Xend, Yend) d'un arc tracé avec la procédure Arc ou Ellipse. Elle est, par exemple, destinée à joindre des lignes aux extrémités d'un arc.
Remarque
Certains problèmes semblent se poser lorsque l'épaisseur de la ligne déterminée par SetLineStyle vaut 3.
Exemple
Arc (100, 100, 90, 180, 50);
GetArcCoords (dc);
Line (dc.X, dc.Y, dc.Xstart, dc.YStart);
Line (dc.x, dc.Y, dc.xend, dc.Yend);
Crée un quartier de tarte en joignant les extrémités de l'arc tracé au centre du cercle.
GetAspectRatio
Procédure GRAPH : 5, 6
Syntaxe
GetAspectRatio(num, denom);
où num et denom sont des variables de type Word.
Description
La procédure GetAspectRatio renvoie les paramètres de correction de l'écriture des cercles à l'écran. En effet dans certains cas, l'appel à la fonction Circle ne produit pas un cercle parfait au sens mathématique du terme. Les paramètres num et denom permettent d'introduire un facteur de correction remédiant aux imperfections de nos écrans. Ce facteur de correction est donné par ratio = num/denom.
Remarque
La procédure SetAspectRatio permet de modifier le facteur de correction. Celui-ci ne porte que sur les cercles créés par les procédures Circle, Arc et PieSlice et non sur les autres formes comme Rectangle ou Ellipse. Il est toutefois possible de se servir des valeurs renvoyées par GetAspectRatio pour effectuer soi-même une correction.
Exemple
GetAspectRatio (num, denom);
Str (num, st1);
Str (denom, st2);
OutTextXY (300, 150, ' num : '+ st1 + ' denom : ' + st2);
Ce petit morceau de programme lit et écrit les valeurs actuelles du facteur de correction. Les nombres sont convertis en chaînes de caractères pour pouvoir être écrits.