Signaler

Passage par variable [Résolu]

Posez votre question Anna - Dernière réponse le 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.
Afficher la suite 
Utile
+0
moins plus
Bonjour

peux tu mettre un lien d'une ou 2 définitions que tu as vue?
Anna- 30 nov. 2016 à 12:44
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.
Répondre
Whismeril 8459Messages postés mardi 11 mars 2003Date d'inscription 1 décembre 2016 Dernière intervention - 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é
}

Répondre
Anna- 30 nov. 2016 à 15:20
Je m'excuse mais je pense que les définitions sont plus facile que votre explication :/
Répondre
Whismeril 8459Messages postés mardi 11 mars 2003Date d'inscription 1 décembre 2016 Dernière intervention - 30 nov. 2016 à 18:41
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
Répondre
Ajouter un commentaire
Utile
+0
moins plus
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.
Ajouter un commentaire
Utile
+0
moins plus
Whismeril et KX, merci pour vous les deux pour l'explication, l'idée est à sa place maintenant :)
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !