%%%% le source du module ModuleEx.p UNIT ModuleEx; {éventuellement, si ce module s'appuie sur d'autres modules : uses ...} INTERFACE CONST Un = 1; {éventuellement, pour un usage public : type ... var ... } procedure AjouteUn (var i:integer); function Ajoute1(i:integer):integer; IMPLEMENTATION {éventuellement, pour un usage privé dans ce module : const ... type ... var ... } {On ne réécrit pas les paramètres} PROCEDURE AjouteUn; BEGIN i := i + 1; END; {idem} FUNCTION Ajoute1; BEGIN Ajoute1 := i + 1; END; END. %%%% le source du programme Test.p PROGRAM Test; USES ModuleEx; VAR i: INTEGER; BEGIN i := Un; {Un est défini dans le module ModuleEx,} writeln('i = ',i); AjouteUn(i); {la proc AjouteUn aussi} writeln('i = ',i); writeln('i+1 = ',Ajoute1(i)); {et la fonction Ajoute1 également.} writeln('i = ',i); END.
PROGRAM ptr; TYPE PtrSurEntier = ^INTEGER; {rappel : un integer est codé sur 2 octets en Think Pascal} VAR p1: ptrSurEntier; p2: ptrSurEntier; {rappel : opérations possibles sur des pointeurs de même type : new(p1), dispose(p1), p1^, p1 := p2, p1 := NIL, p1 = p2, p1 <> p2} BEGIN writeln(p1); {une adresse indéfinie est affichée} new(p1); {un bloc B1 de 2 octets consécutifs est réservé} writeln(p1); {dont l'adresse en mémoire est la valeur de p1} writeln(p1^); {affichage d'un entier indéfini} p1^:=1; {p1 pointe sur la représentation de l'entier 1} writeln(p1^); {qu'on affiche} writeln(p2); {une autre adresse indéfinie} p2:=p1; {p2 pointe sur le même bloc B1 que p1} p2^:=p2^+1; {l'entier pointé par p2 est incrémenté d'une unité} writeln(p2^); {affiche 2} writeln(p1^); {affiche 2 (précisément le même 2 !)} dispose(p1); {le bloc B1 est rendu au système, qui peut éventuellement l'utiliser pour ses besoins propres ; l'emploi de p1^ et p2^ est à présent une erreur} new(p2); {un nouveau bloc B2 de 2 octets consécutifs est réservé} writeln(p2); {affiche l'adresse de B2} writeln(p2^); {affiche un entier indéfini} p2:=NIL; {les 2 octets consécutifs du bloc B2 sont perdus à jamais !} writeln(p2); {NIL est codé OOOOOOOO par Think Pascal} END.
UNIT unit_liste; INTERFACE TYPE pointeur = ^cellule; cellule = RECORD info: INTEGER; suivant: pointeur; END; PROCEDURE EntreeListe1 (var liste: pointeur); PROCEDURE EntreeListe2 (var liste: pointeur); PROCEDURE AfficheListe (liste: pointeur); IMPLEMENTATION PROCEDURE EntreeListe1; VAR p: pointeur; n: INTEGER; BEGIN liste := NIL; readln(n); WHILE n >= 0 DO BEGIN new(p); p^.info := n; p^.suivant := liste; liste := p; readln(n); END; END; PROCEDURE EntreeListe2; VAR p, der: pointeur; n: INTEGER; BEGIN readln(n); IF n < 0 THEN liste := NIL ELSE BEGIN new(liste); liste^.info := n; der := liste; readln(n); WHILE n >= 0 DO BEGIN new(p); p^.info := n; der^.suivant := p; der := p; readln(n); END; der^.suivant := NIL; END; END; PROCEDURE AfficheListe; BEGIN writeln; WHILE (liste <> NIL) DO BEGIN writeln(liste^.info); liste := liste^.suivant; END; END; END. %%%%%%%%%%%%%%%%%%%%%%%%%% PROGRAM TestModPtr; USES unit_liste; VAR liste1: pointeur; BEGIN EntreeListe1(liste1); AfficheListe(liste1); writeln; EntreeListe2(liste1); AfficheListe(liste1); END. %%%%%%%%%%%%%%%%%%%%%%%%%%
Remarque :
Pour compiler un programme composé de modules :
Si c'est trop tard, utiliser l'item Remove (menu Projet) pour supprimer les fichiers du projet, puis Add File (menu Projet) pour reconstruire le projet avec l'ordre idoine.
This document was generated using the LaTeX2HTML translator Version 96.1 (Feb 5, 1996) Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
The command line arguments were:
latex2html -split 0 pointeurs.tex.
The translation was initiated by Jean-Christophe Soulie on mardi, 4 mai 1999, 17:06:39 GMT+4