Cours NF01
Cours

Exemples de passage par valeur

Nous cherchons à écrire un programme qui échange les valeurs de deux variables saisies par l'utilisateur.

program TEST;

var

    A, B : real;

procedure ECHANGE (X, Y : REAL);

var

    T : real;

begin

    T := X;

    X := Y;

    Y := T;

    Writeln(X,Y);

end;

begin

    readln (A, B);

    ECHANGE (A, B);

    writeln (A, B);

end.

Cette solution est mauvaise. En effet, une simulation de son exécution donnera :

A = 5 B = 7 { saisie }

X = 7 Y = 5

A = 5 B = 7 {A et B restent inchangés !}

Ce programme a pour seul intérêt d'illustrer le passage de paramètres ainsi que la notion d'effet de bord.

program Effet-de_bord;

var

    i,j : integer;

function double (i : integer) : integer;

begin

    double := 2 * i;

end;

function plus_un (j : integer) : integer;

var

    i: integer;

begin

    i := 10;

    plus_un := j + 1;

end;

function moins_un (j : integer) : integer;

begin

    i := 10;

    moins_un := j - 1;

end;

begin { programme principal }

    i := 0; j := 0; {i=0 ; j=0}

    j := plus_un(i); {i=0 ; j=1}

    j := double(j);{i=0 ; j=2}

    j := moins_un(j);{i=10 ; j=1}

end.

La variable i a été modifiée dans la procédure, alors que l'on s'attendait à des modifications sur j. On appelle cela un effet de bord.

Un tel phénomène peut être très gênant (difficulté à retrouver les erreurs).

Passage de paramètre par adressePassage de paramètre par valeur
AccueilRéalisé avec SCENARI