Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

60
Algorithmes et structures de données avancées 6ème cours Patrick Reuter http://www.labri.fr/~preuter

Transcript of Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Page 1: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Algorithmes et structures de données avancées

6ème cours

Patrick Reuter

http://www.labri.fr/~preuter

Page 2: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Ingrédients d’algorithmes

• Affectation (ex. mois := 6, jours[1] := 31)• Condition/Comparaison (ex. mois <= 12)• Appel de fonction (ex. writeln(mois))

• Structure de contrôle– Branchements conditionnels (multiples) (si .. Alors .. Sinon)

– Boucles (tant que..faire, pour.. faire)

• Bloc d’instructions (begin .. end)

Page 3: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Aujourd'hui

TYPES:– tableau 1D– tableau 2D– types énumérés– enregistrements– pointeurs

PORTEE :– variables globales– variables locales

APPEL DE FONCTIONS– appel par valeur– appel par référence

Page 4: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Déclaration de variables

Comme dans un livre de recettes

Ingrédients(pour 8-10 personnes) :

- 1 kg de couscous roulé - 1 kg de mouton - 1 poignée de pois chiches - 2 oignons secs - 3-4 tomates fraîches ou 1 cuillère.à soupe de concentré de tomate - 3-4 pommes de terre - 3-4 navets - 3-4 carottes - 3-4 courgettes - 1 tranche de courge - 4 cuillères à soupe d'huile - 1/2 cuillère à café de cannelle - 1 pincée de poivre noir - 1/2 cuillère à soupe de piment rouge doux ou de paprika - 1/2 cuillère à soupe de ras-el-hanout - 1 piment rouge sec - 100 g de beurre ou 3 cuillères à soupe d'huile - sel

Préparation :

La veille, mettez les pois chiches dans un bol d'eau.

Le jour même, roulez le couscous .Si vous utilisez du couscous roulé et séché, rincez-le à l'eau froide, égouttez-le et laissez-le gonfler pendant 30 mn.

Coupez la viande en morceaux.Pelez les oignons et coupez-en 1 en morceaux.

Lavez et passez les tomates à la moulinette.Mettez la viande dans une marmite et ajoutez les morceaux d'oignon, les tomates ou le concentré de tomate dilué dans 1 verre d'eau, l'huile, le poivre, le piment, la cannelle et du sel.

Faites revenir …..

Page 5: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Déclaration de variables

var compteur : integer;

var diviseur : single;

var c : byte;

var precision : double;

var nom : string;

var masculin : boolean;

var jours : array[1..12] of byte;

diviseur := 1.1; { Affectation }compteur : = 1;Nom := ‘Gerhard’;

Nombre entier

Nombre à virgule flottante

Nombre à virgule flottante avec double précision

Chaîne de caractères

Tableau

TYPE

Page 6: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Déclaration de variables

• Types prédéfinis– Integer, boolean, single, …

• Types que l’on peut définir soi-même

type t_tableau = array[1..12] of byte;

var jours : t_tableau;

au lieu de

var jours : array[1..12] of byte;

Page 7: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Organisation de la mémoiretype t_tableau = array[1..12] of byte;var jours : t_tableau; {12 octets}

#0

jours[1] #2000

...

#536.870.910#536.870.911

...

jours[index] #(2000+index-1)

jours[3] #2002

jours[12] #2011

...

Occupe de la place successivedans la mémoire

jours[2] #2001312831

31

Page 8: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

• Tableau 2D

Page 9: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Motivation

type t_champ =(vide, blanc, noir); type t_ligne = array[1..8] of t_champ;type t_damier = array[1..8] of t_ligne;var damier : t_damier;var i,j : integer;

Pour initialiser un damier vide :

POUR i = 1 à 8 faire POUR j = 1 à 8 faire damier[i][j] := vide; FIN POURFIN POUR

Page 10: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Enregistrements

Page 11: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Déclaration de variables

• Type enregistrement (structure hétérogène)

type t_enregistrement = RECORDnom_de_variable_1 : type1;nom_de_variable_2 : type2;

...nom_de_variable_n : typen;

END;var dossier : t_enregistrement;

- structure hétérogène, les éléments peuvent être d’un type différent- occupe de la place successive dans la mémoire- « random access » = l’ accès aux différents éléments se fait à coût

égal

Page 12: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Type enregistrement (structure hétérogène)

Exemple• Déclaration du type

type t_date = RECORD an : integer;

mois : byte; jour : byte;

END;

• Déclaration d’une variable

var aujourdhui : t_date;

• Affectationaujourdhui.jour = 17;aujourdhui.mois = 10;aujourdhui.an = 2006;

Page 13: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Enregistrements• Motivation (à ne pas faire !)

type t_couleur = (rouge, vert, jaune);

var joueurnom : array[1..n] of string;var joueurscore : array[1..n] of integer;var joueurcouleur : array[1..n] of t_couleur;

joueurnom[1] := " Martin“;joueurscore[1] := 0;joueurcouleur[1] := rouge;

joueurnom[2] := " Romain“;joueurscore[2] := 0;joueurcouleur[2] := vert;

Page 14: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Enregistrements• Motivation (à faire !)

type t_couleur = (rouge, vert, jaune);

type t_joueur = RECORD nom : string;score : integer;couleur : t_couleur;

END;

var joueur : array[1..n] of t_joueur;

joueur[1].nom := " Martin“;joueur[1].score := 0;joueur[1].couleur := rouge;

joueur[2].nom := " Romain“;joueur[2].score := 0;joueur[2].couleur := vert;

Page 15: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

type t_date = RECORD an : integer;

mois : byte; jour : byte;

END;var aujourdhui : t_date;

aujourdhui.an #4000

...

#536.870.910#536.870.911

...

aujourdhui.an; #4002

...

aujourdhui.an; #400121470

17

#0

Occupe de la place successivedans la mémoire

aujourdhui.an; #4003aujourdhui.mois; #4004aujourdhui.jour; #4005

0

10

Page 16: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Type tableaux d’enregistrements

• Déclaration du type enregistrement :

type t_chanson = RECORD titre : string[100];

artiste : string[100];album : string[100];longueur : integer;date : t_date;

END;

• Déclaration du type tableau

type t_tableau_chansons = array[1..n] of t_chanson;

• Déclaration d’une variable de ce type

var collection : t_tableau_chansons;

• Affectation

collection[1].title = ‘Riders on the storm’;collection[1].artiste = ‘The Doors’;...collection[n].title = ‘Talkin Blues’;...

Page 17: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Type tableaux d’enregistrements

• Exercice

type t_chanson = RECORD titre : string[100];

artiste : string[100];album : string[100];longueur : integer;date : t_date;

END;type t_tableau_chansons = array[1..n] of t_chanson;var collection : t_tableau_chansons;

• Trouver l’artiste d’une chanson donnée ‘kaya’

i := 1;tant que i<=n

i := i + 1;fin tant que

Page 18: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Type tableaux d’enregistrements

• Exercice

type t_chanson = RECORD titre : string[100];

artiste : string[100];album : string[100];longueur : integer;date : t_date;

END;type t_tableau_chansons = array[1..n] of t_chanson;var collection : t_tableau_chansons;

• Trouver l’artiste d’une chanson donnée ‘kaya’

i := 1;tant que i<=n

si collection[i].title = ‘kaya’ alorsafficher collection[i].artiste;

i := i + 1;fin tant que

Page 19: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Type tableaux d’enregistrements

• Exercice

type t_chanson = RECORD titre : string[100];

artiste : string[100];album : string[100];longueur : integer;date : t_date;

END;type t_tableau_chansons = array[1..n] of t_chanson;var collection : t_tableau_chansons;

• Trouver l’artiste d’une chanson donnée ‘kaya’trouve := FAUX;i := 1;tant que (i<=n ET trouve = FAUX)

si collection[i].title = ‘kaya’ alorsafficher collection[i].artiste;trouve := VRAI;

i := i + 1;fin tant que

Page 20: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

NOUVEAU : Addressage mémoire

Page 21: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.
Page 22: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.
Page 23: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Adresse d’une variable

• Stocké dans 4 Octets (32 bit), comme ça on peut adresser

232 octets = 4 294 967 296 octes

= 4 GO

Limite bientôt atteint

Page 24: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Organisation de la mémoire

var a : byte; ( 1 octet (byte) )

#0#1#2#3

a #4#5

...

#536.870.910#536.870.911

#1.000

...

Page 25: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Organisation de la mémoirevar a : byte;a := 97;

#0#1#2#3

a #4#5

...

#536.870.910#536.870.911

#1.000

...

97

Page 26: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Organisation de la mémoirevar a : byte;a := 97;

#0#1#2#3

a #4#5

...

#536.870.910#536.870.911

#1.000

...

97

Comment connaître l’adresse de a ? Addr(a)

Page 27: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Organisation de la mémoirevar a : byte;a := 97;p_a := Addr(a); { Sauvegarder l’adresse }

#0#1#2#3

a #4#5

...

#536.870.910#536.870.911

#1.000

...

97

Comment connaître l’adresse de a ? Addr(a)

Page 28: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;var p_a : ^byte; {4 octets, lire : pointeur vers a}a := 97;p_a := Addr(a); { Sauvegarder l’adresse }

#0#1#2#3

#4

a #5

...

#536.870.910#536.870.911

p_a #1.0000

97

Comment connaître l’adresse de a ? Addr(a)

p_a #1.001p_a #1.002p_a #1.003

5

00

« p_a pointe vers a »

Page 29: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

var p_a : pointer to byte; {4 octets, lire : pointeur vers a}

a := 97;

p_a := Addr(a); { Sauvegarder l’adresse }

{ p_a est 4, p_a^ est 97)

p_a^ := 10; { Déréférencement }

{ p_a est 4, p_a^ est 10)

#0#1#2#3

p_a^ a #4#5

...

#536.870.910#536.870.911

p_a #1.0000

10

Comment connaître l’adresse de a ? Addr(a)

p_a #1.001p_a #1.002p_a #1.003

4

00

Page 30: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

var p_a : ^byte; {4 octets, lire : pointeur vers a}

a := 97;

p_a := Addr(a); { Sauvegarder l’adresse }

p_a^ := 10; { affectation par déréférencement }

a := 10; { affectation }

Page 31: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

var p_a : ^byte; {4 octets, lire : pointeur vers a}

a := 97;

p_a := Addr(a); { Sauvegarder l’adresse }

p_a^ := 10; { affectation par déréférencement }

a := 10; { affectation }

C’est équivalent !!

Page 32: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Définitions

• Déclaration d’un pointeur vers un byte

var p_a : ^byte;

• Déréférencement d’un pointeur :

p_a^

• Connaître l’adresse d’une variable a

Addr(a); {ou bien }@a;

Page 33: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Fonctions

Page 34: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

type t_tableau = array[1..n] of integer;var tab : t_tableau;

function dedans(quoi : integer, n : integer) : integer;

var position : integer;var i : integer;

débutposition := 0;i := 1;

tant que (i<=n) faire

si (quoi = tab[i]) alors position := i;

fin si

i := i + 1;

fin tant que

result := position;

fin

Page 35: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

type t_tableau = array[1..n] of integer;var tab : t_tableau;

function dedans(quoi : integer, n : integer) : integer;

var position : integer;var i : integer;

débutposition := 0;i := 1;

tant que (i<=n) faire

si (quoi = tab[i]) alors position := i;

fin si

i := i + 1;

fin tant que

result := position;

fin

En-tête de la fonction

Page 36: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

type t_tableau = array[1..n] of integer;var tab : t_tableau;

function dedans(quoi : integer, n : integer) : integer;

var position : integer;var i : integer;

débutposition := 0;i := 1;

tant que (i<=n) faire

si (quoi = tab[i]) alors position := i;

fin si

i := i + 1;

fin tant que

result := position;

fin

Corps de la fonction

Page 37: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

type t_tableau = array[1..n] of integer;var tab : t_tableau;

function dedans(quoi : integer, n : integer) : integer;

var position : integer;var i : integer;

débutposition := 0;i := 1;

tant que (i<=n) faire

si (quoi = tab[i]) alors position :=i;

fin si

i := i + 1;

fin tant que

result := position;

fin

Paramètres de la fonction(arguments)

Page 38: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

type t_tableau = array[1..n] of integer;var tab : t_tableau;

function dedans(quoi : integer, n : integer) : integer;

var position : integer;var i : integer;

débutposition := 0;i := 1;

tant que (i<=n) faire

si (quoi = tab[i]) alors position := i;

fin si

i := i + 1;

fin tant que

result := position;

fin

Type de retourde la fonction

Valeur de retourde la fonction

Page 39: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

La portée :

Page 40: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte;

function somme(n : byte) : byte;var i : byte;begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

Page 41: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte;

function somme(n : byte) : byte;var i : byte;begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

...

...

...

#0

i #100

Page 42: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte;

function somme(n : byte) : byte;var i : byte;begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

...

...

3

...

#0

i #100

n #200i #201

5

Page 43: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte;

function somme(n : byte) : byte;var i : byte;begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

...

...

3

...

#0

i #100

n #200i #201

5

Page 44: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte;

function somme(n : byte) : byte;var i : byte;begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

...

...

3

...

#0

i #100

n #200i #201 1

5

Page 45: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte; { Variable globale }

function somme(n : byte) : byte;var i : byte; { Variable locale }begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

Page 46: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

program portee;

var i : byte; { Variable globale }

function somme(n : byte) : byte;var i : byte; { Variable locale }begin result := 0; for i := 1 to n do begin result := result + i; end;end;

begin i:=3; WriteLn(somme(5)); WriteLn('i : ', i);

readln;

end.

Page 47: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Appel des fonctions

• Appel par valeur

• Appel par référence

Page 48: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

procedure ajouter (parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin

Appel par valeur

Page 49: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

procedure ajouter (parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin

Appel par valeur

#0

a #200 #201

#202

#536.870.910#536.870.911

#203

#220#221

...

...

#222

#223...

...

4

Page 50: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

procedure ajouter (parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin #0

a #200 #201

#202

#536.870.910#536.870.911

#203

parametre #220#221

...

...

#222

#223...

...

4

4

Appel par valeur

Page 51: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

#0

a #200 #201

#202

#536.870.910#536.870.911

#203

parametre #220#221

...

...

#222

#223...

...

6

4

Appel par valeur var a : byte;

procedure ajouter (parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin

Page 52: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

#0

a #200 #201

#202

#536.870.910#536.870.911

#203

#220#221

...

...

#222

#223...

...

4

Appel par valeur var a : byte;

procedure ajouter (parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin

Page 53: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

#0

#200 #201

#202

#536.870.910#536.870.911

#203

#220#221

...

...

#222

#223...

...Appel par valeur

var a : byte;

procedure ajouter (parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin

4

Page 54: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Appel par référencevar a : byte;

type t_p_a = ^byte;

procedure ajouter (parametre : t_p_a)begin

WriteLn('parametre^', parametre^);

parametre^ := parametre^ + 2;

WriteLn('parametre^', parametre^);end;

débuta := 4;

WriteLn('a', a);

ajouter(Addr(a));

WriteLn('a', a);fin

Page 55: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

type t_p_a = ^byte;

procedure ajouter (parametre : t_p_a)begin

WriteLn('parametre^', parametre^);

parametre^ := parametre^ + 2;

WriteLn('parametre^', parametre^);end;

débuta := 4;

WriteLn('a', a);

ajouter(Addr(a));

WriteLn('a', a);fin

Appel par référence

Parametre est un pointeur

Appel par référence

Page 56: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

#0

a #200 #201

#202

#536.870.910#536.870.911

#203

...

...

...

...

4

Appel par référencevar a : byte;

type t_p_a = ^byte;

procedure ajouter (parametre : t_p_a);begin

WriteLn('parametre^', parametre^);

parametre^ := parametre^ + 2;

WriteLn('parametre^', parametre^);end;

débuta := 4;

WriteLn('a', a);

ajouter(Addr(a));

WriteLn('a', a);fin

Page 57: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

var a : byte;

type t_p_a = ^byte;

procedure ajouter (parametre : t_p_a);begin

WriteLn('parametre^', parametre^);

parametre^ := parametre^ + 2;

WriteLn('parametre^', parametre^);end;

débuta := 4;

WriteLn('a', a);

ajouter(Addr(a));

WriteLn('a', a);fin #0

a #200 #201

#202

#536.870.910#536.870.911

#203

parametre #240parametre #241

...

...

parametre #242

parametre #243

...

...

4

200000

Appel par référence

Page 58: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

#0

a #200 #201

#202

#536.870.910#536.870.911

#203

parametre #240parametre #241

...

...

parametre #242

parametre #243

...

...

6

200000

Appel par référencevar a : byte;

type t_p_a = ^byte;

procedure ajouter (parametre : t_p_a);begin

WriteLn('parametre^', parametre^);

parametre^ := parametre^ + 2;

WriteLn('parametre^', parametre^);end;

débuta := 4;

WriteLn('a', a);

ajouter(Addr(a));

WriteLn('a', a);fin

Page 59: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

#0

a #200 #201

#202

#536.870.910#536.870.911

#203

#240#241

...

...

#242

#243

...

...

6

Appel par référencevar a : byte;

type t_p_a = ^byte;

procedure ajouter (parametre : t_p_a);begin

WriteLn('parametre^', parametre^);

parametre^ := parametre^ + 2;

WriteLn('parametre^', parametre^);end;

débuta := 4;

WriteLn('a', a);

ajouter(Addr(a));

WriteLn('a', a);fin

Page 60: Algorithmes et structures de données avancées 6ème cours Patrick Reuter preuter.

Appel par référence (2)var a : byte;

procedure ajouter (var parametre : byte)début

WriteLn(‘parametre’, parametre);

parametre := parametre + 2;

WriteLn(‘parametre’, parametre);fin

débuta := 4;

WriteLn(‘a’, a);

ajouter(a);

WriteLn(‘a’, a);fin

Une autre façon d’appeler une fonctionpar référence qui est moins explicite