pb C++, pour utilisation des references
Dernière réponse : dans Programmation
Bonjour à tous,
J'utilise Dev C++, et j'ai un souci concernant mon programme avec la notion de reference...
mon fichier fonction:
void echange_references(int& w,int& z){
int k;
int j;
k=w;
j=z;
z=k;
w=j;
//Affichage valeurs:
cout<<"Avec la fonction echange references:"<<endl;
cout<<"La nouvelle valeur de a est: "<<j<<endl;
cout<<"La nouvelle valeur de b est: "<<k<<endl;
}
Mon main:
int a;
a=0;
int b;
b=0;
//Entrer valeurs:
cout<<"Veuillez rentrer la valeur de a et de b: ";
cin>>a>>b;
//Affichage valeurs:
cout<<"La valeur de a est: "<<a<<endl;
cout<<"La valeur de b est: "<<b<<endl;
//Appel à la fonction échange par references:
echange_references(a,b);
Entre les deux fichiers un fichier en .h:
void echange_references(int& ,int& );
Voila, donc en faites ce programme est tiré d'un exercice ou l'on doit créer trois fonctions, une par pointeur, une par valeurs et une par references, pour inverser la valeur de a et celle de b.
Pb: Par reference, les valeurs ne s'inverse pas!
Merci pr votre aide.
J'utilise Dev C++, et j'ai un souci concernant mon programme avec la notion de reference...
mon fichier fonction:
void echange_references(int& w,int& z){
int k;
int j;
k=w;
j=z;
z=k;
w=j;
//Affichage valeurs:
cout<<"Avec la fonction echange references:"<<endl;
cout<<"La nouvelle valeur de a est: "<<j<<endl;
cout<<"La nouvelle valeur de b est: "<<k<<endl;
}
Mon main:
int a;
a=0;
int b;
b=0;
//Entrer valeurs:
cout<<"Veuillez rentrer la valeur de a et de b: ";
cin>>a>>b;
//Affichage valeurs:
cout<<"La valeur de a est: "<<a<<endl;
cout<<"La valeur de b est: "<<b<<endl;
//Appel à la fonction échange par references:
echange_references(a,b);
Entre les deux fichiers un fichier en .h:
void echange_references(int& ,int& );
Voila, donc en faites ce programme est tiré d'un exercice ou l'on doit créer trois fonctions, une par pointeur, une par valeurs et une par references, pour inverser la valeur de a et celle de b.
Pb: Par reference, les valeurs ne s'inverse pas!
Merci pr votre aide.
Autres pages sur : utilisation references
Lassé par la pub ? Créez un compte
Citation :
cout<<"Avec la fonction echange references:"<<endl;
cout<<"La nouvelle valeur de a est: "<<j<<endl;
cout<<"La nouvelle valeur de b est: "<<k<<endl;
J'aurais remplacé j et k par w et z...sinon j'ai l'impression que ta fonction inverse toujours a et b (enfin la phrase à l'ecran)...étant donné qu'elle renvoie la valeur d'une variable locale...
Pour tester cela j'aurais juste fait un appel de fonction et j'aurais ajouté dans le main :
cout<<a
cout<<b
En principe ca roue tout seul ça ??? non ?
Si je change j et k par w et z, qu'est que je vais mettre dans ma fonction comme parametre?
Dans mon main j'ai deja a et b qui passe dans la fonction et ensuite j'inverse a et b qui valent w et z dans ma fonction par reference.
Le plus etrange la dedans, est que j'ai déja fait cette fonction par valeurs et par pointeurs...et ca marché nikel.
Et quand par exemple je transforme cette fonction par reference en en valeurs comme fait précedement...et bien ca ne marche pas!!! curieux pourtant c la meme chose mai avec un nom de fonction different ou des arguments differents....
Dans mon main j'ai deja a et b qui passe dans la fonction et ensuite j'inverse a et b qui valent w et z dans ma fonction par reference.
Le plus etrange la dedans, est que j'ai déja fait cette fonction par valeurs et par pointeurs...et ca marché nikel.
Et quand par exemple je transforme cette fonction par reference en en valeurs comme fait précedement...et bien ca ne marche pas!!! curieux pourtant c la meme chose mai avec un nom de fonction different ou des arguments differents....
Et bien moi il ne marche pas!!!! lol
dev c++ me joue des tour pendart...c'est pas la premiere fois.
La derniere fois s'était sur un exo ou il fallait compter les voyelles d'une chaine de caractères rentrer par l'utilisateur! et bien crois moi, crois moi pas, mais tout va bien pour les voyelles a e i o y mais alors pour le u!!! niette keudal...il me fait tout beuguer!!
Bn mais si ma fonction en ref marche....je verrais ca sur un linux je crois.
dev c++ me joue des tour pendart...c'est pas la premiere fois.
La derniere fois s'était sur un exo ou il fallait compter les voyelles d'une chaine de caractères rentrer par l'utilisateur! et bien crois moi, crois moi pas, mais tout va bien pour les voyelles a e i o y mais alors pour le u!!! niette keudal...il me fait tout beuguer!!
Bn mais si ma fonction en ref marche....je verrais ca sur un linux je crois.
je veux bien te croire, mais la machine ne fait que ce qu'on lui demande (pour la majorité des cas en tout cas)
tu peux peut etre expliquer ce que te fais ton programme (enfin ce qui ne marche pas)?
et expliquer pourquoi il y a un cout à l'intérieur de la fonction, le but étant de montrer l'echange après la fonction.
tu peux peut etre expliquer ce que te fais ton programme (enfin ce qui ne marche pas)?
et expliquer pourquoi il y a un cout à l'intérieur de la fonction, le but étant de montrer l'echange après la fonction.
Citation :
je veux bien te croire, mais la machine ne fait que ce qu'on lui demande (pour la majorité des cas en tout cas) Je ne le sais que trop bien....
J'ai modifié un peu mon programme avec le cout en dehors des fonctions: voila le fichier fonctions:
#include <cstdlib>
#include <iostream>
using namespace std;
void echange_valeurs(int x,int y){
int k;
int j;
k=x;
j=y;
x=j;
y=k;
}
void echange_adresses(int* x,int* y){
int k,j;
k=*x;
j=*y;
*x=j;
*y=k;
}
void echange_references(int& x,int& y){
int k;
int j;
k=x;
j=y;
x=j;
y=k;
}
Voila le main:
#include <cstdlib>
#include <iostream>
#include "biblio2.h"
using namespace std;
int main(int argc, char *argv[])
{
int a;
a=0;
int b;
b=0;
//Entrer valeurs:
cout<<"Veuillez rentrer la valeur de a et de b: ";
cin>>a>>b;
//Affichage valeurs:
cout<<"La valeur de a est: "<<a<<endl;
cout<<"La valeur de b est: "<<b<<endl;
cout<<endl;
//Appel à la fonction échange par valeurs:
echange_valeurs(a,b);
cout<<endl;
cout<<"La nouvelle valeur de a est: "<<a<<endl;
cout<<"La nouvelle valeur de b est: "<<b<<endl;
//Appel à la fonction échange par adresses:
echange_adresses(&a,&b); //On passe les adresses de a et b à la fonction.
cout<<endl;
cout<<"La nouvelle valeur de a est: "<<a<<endl;
cout<<"La nouvelle valeur de b est: "<<b<<endl;
//Appel à la fonction échange par references:
echange_references(a,b);
cout<<endl;
cout<<"La nouvelle valeur de a est: "<<a<<endl;
cout<<"La nouvelle valeur de b est: "<<b<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
et le biblio.h:
void echange_valeurs(int ,int );
void echange_adresses(int*,int*);
void echange_references(int& ,int& );
Donc au final, les resultats à l'ecran sont:
si je rentre a=45 et b=70:
j'aurais pour echange_valeurs: a=45 et b=70;
echange_adresses: a=70 et b=45;
echange_ref: a=45 et b=70;
Soit deux sur les toris qui ne fonctionnent pas!!! je dois vraiment faire une erreur de foufou la! merci.
nico27027, parfois c'est tout bête, tellement gros qu'on le voit pas
Quand tu fais appel à echange_references(), a et b sont inversés avant l'appel (car tu avais appelé echange_adresses() avant). Donc, tu échanges à nouveau les valeurs.
2 échanges successifs font revenir à la position initiale. Ce qui montre que ton code marche.
Redemande a et b avant chaque appel de fonction, ou réinitialise a et b par les valeurs initiales (que tu auras donc mémorisé dans d'autres variables).
Quand tu fais appel à echange_references(), a et b sont inversés avant l'appel (car tu avais appelé echange_adresses() avant). Donc, tu échanges à nouveau les valeurs.
2 échanges successifs font revenir à la position initiale. Ce qui montre que ton code marche.
Redemande a et b avant chaque appel de fonction, ou réinitialise a et b par les valeurs initiales (que tu auras donc mémorisé dans d'autres variables).
Sinon, pour info (ouais, parce que certains profs et auteurs de bouquins sont limités dans la connaissance du code généré à la compilation
), la référence et le pointeur se compilent de la même façon : c'est toujours l'adresse qui est donnée en paramètre, sauf qu'avec la référence, on a l'illusion de manipuler la variable (ça simplifie l'écriture en fait).
Lors d'un passage par valeur, c'est la valeur qui est posée sur la pile (en copiant la valeur sur la pile). La fonction utilise cette valeur. Elle utilise donc une adresse temporaire sur la pile. Temporaire, car le paramètre sera dépilé en fin de fonction.
Pour un passage par pointeur ou référence, c'est l'adresse de la variable qui est posée sur la pile (en copiant l'adresse qui pointe vers la zone mémoire contenant la valeur d'origine).
En C++, la référence, c'est en fait de la manipulation de pointeur qui se cache derrière la manipulation de valeur référencée.
), la référence et le pointeur se compilent de la même façon : c'est toujours l'adresse qui est donnée en paramètre, sauf qu'avec la référence, on a l'illusion de manipuler la variable (ça simplifie l'écriture en fait).Lors d'un passage par valeur, c'est la valeur qui est posée sur la pile (en copiant la valeur sur la pile). La fonction utilise cette valeur. Elle utilise donc une adresse temporaire sur la pile. Temporaire, car le paramètre sera dépilé en fin de fonction.
Pour un passage par pointeur ou référence, c'est l'adresse de la variable qui est posée sur la pile (en copiant l'adresse qui pointe vers la zone mémoire contenant la valeur d'origine).
En C++, la référence, c'est en fait de la manipulation de pointeur qui se cache derrière la manipulation de valeur référencée.
Oui, enfin disons 3 ans en IUT (quelques heures)ou je foutais vraiment rien!!!! mais alors rien de chez rien!
1 an en licence (encore quelques heures)ou la j'ai deja un poil mieux bosser, mais bn c maintenant en master que je veux devenir optimum, pr simuler mes petites particules...lol!
J'y arriverais bien en bossant correctement!
1 an en licence (encore quelques heures)ou la j'ai deja un poil mieux bosser, mais bn c maintenant en master que je veux devenir optimum, pr simuler mes petites particules...lol!
J'y arriverais bien en bossant correctement!
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumLatex - pb utilisation subfigure
- ForumPb utilisation souris prog c
- ForumPb utilisation souris optique
- ForumPb utilisation reseau cpl
- ForumPb utilisation du reseau wifi
- ForumPb profil utilisateur windows
- ForumCs 1.6 pb cle cd
- ForumPb ping cs 1.6
- ForumPb espace disque utilise
- ForumPb choke cs
- Voir plus
)