Passage par variable

Résolu/Fermé
Anna - Modifié par Anna le 30/11/2016 à 12:25
 Anna - 1 déc. 2016 à 19:04
Bonjour,

Au niveau de l'algorithmique, j'ai lu plusieurs définitions sur la différence entre le passage par variable et le passage par valeur, mais je n'ai pas arrivée à la comprendre, comme il faut. SVP, qui peut me simplifier l'idée.
Autre question, dans un algorithme qui contient des fonctions et des procédures, pourquoi on doit changer les noms des variables ,autrement dit, les noms des variables qui se trouvent dans le programme principal ne sont pas les mêmes qui se trouvent au niveau des paramètres formels dans la fonction ou bien la procédure du même programme

Merci d'avance.

3 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
30 nov. 2016 à 12:23
Bonjour

peux tu mettre un lien d'une ou 2 définitions que tu as vue?
0
Dans le mode de passage par valeur, les modifications effectuées sur le paramètre formel n’affectent pas la valeur du paramètre effectif (la procédure travaille sur une copie de la variable) alors que dans le mode de passage par variable, toute modification sur le paramètre formel affecte également le paramètre effectif correspondant (la procédure travaille sur la copie originale).
  • Passage par valeur :
    La valeur de l'expression passée en paramètre est copiée dans une variable locale. C'est cette variable qui est utilisée pour faire les calculs dans la fonction appelée.
    Si l'expression passée en paramètre est une variable, son contenu est copié dans la variable locale. Aucune modification de la variable locale dans la fonction appelée ne modifie la variable passée en paramètre, parce que ces modifications ne s'appliquent qu'à une copie de cette dernière.
  • Passage par variable :
    La deuxième technique consiste à passer non plus la valeur des variables comme paramètre, mais à passer les variables elles-mêmes. Il n'y a donc plus de copie, plus de variable locale. Toute modification du paramètre dans la fonction appelée entraîne la modification de la variable passée en paramètre.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
30 nov. 2016 à 13:15
OK, tu trouveras aussi le terme "passage par référence" à la place de passage par variable, c'est peut-être un peu plus compréhensible.

Dans le passage par valeur:
Code Principal
{
    toto est un entier;
    toto = 1

    Appelle de la fonction AjouteUn(toto par valeur)

   toto vaut toujours 1
}


Fonction AjouteUn(MonEntier)'Ici MonEntier est une copie de toto, une nouvelle variable est crée (donc un nouvel espace mémoire dans la RAM) et la valeur de toto est copiée dedans
{
      MonEntier = MonEntier + 1'Ici c'est bien MonEntier qui est incrémentée
}



Dans le passage par variable
Code Principal
{
    toto est un entier;
    toto = 1

    Appelle de la fonction AjouteUn(toto par variable)

    toto 2
}


Fonction AjouteUn(MonEntier)'Ici MonEntier est l'adresse de l'emplacement mémoire de toto, donc c'est toto
{
      MonEntier = MonEntier + 1'Ici c'est bien MonEntier est toto donc c'est toto qui est incrémenté
}

0
Je m'excuse mais je pense que les définitions sont plus facile que votre explication :/
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié par Whismeril le 30/11/2016 à 18:42
On fait se qu'on peut....

Bon chaque donnée est sauvegardée dans la mémoire vive de l'ordinateur (la RAM pour random access memory).
C'est un peu comme une grande armoire à casiers qui ont chacun une adresse (ou référence).

Quand tu passes une donnée à une fonction par valeur, tu copies le contenu du casier dans un nouveau casier et tu donnes l'adresse de ce nouveau casier à la fonction. Toute modification du contenu ne concernera que la copie et sera perdue dès la fin de la fonction.

Quand tu passes par référence, tu donnes à la fonction l'adresse du casier original, et donc toute modification sera valable partout ailleurs dans le code.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 nov. 2016 à 19:30
Bonjour,
Autre question, dans un algorithme qui contient des fonctions et des procédures, pourquoi on doit changer les noms des variables ,autrement dit, les noms des variables qui se trouvent dans le programme principal ne sont pas les mêmes qui se trouvent au niveau des paramètres formels dans la fonction ou bien la procédure du même programme

"on doit changer les noms des variables" : en réalité, cela n'a rien d'obligatoire, on peut utiliser les même noms pour les variables. Il faut cependant bien comprendre que même si elles ont le même nom, ce ne seront pas les même variables.

Exemple :

Entier produit(Entier m, Entier n)
résultat ← m × n

Entier carré(Entier n)
résultat ← produit(n, n)

Ici
m
et
n
sont deux paramètres propres à la fonction
produit
, tandis que
n
est un paramètre propre à la fonction
carré
.
Il y a deux fois le même nom
n
utilisé mais chacun dans un contexte différent, il y a
produit.n
et
carré.n
, ce qui n'a rien voir non plus avec une éventuelle variable
n
que tu utiliserais par ailleurs.
0
Whismeril et KX, merci pour vous les deux pour l'explication, l'idée est à sa place maintenant :)
0