Pas compris les arguments

cs_Bog Messages postés 29 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 28 janvier 2003 - 26 déc. 2001 à 18:39
cs_Bog Messages postés 29 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 28 janvier 2003 - 28 janv. 2002 à 13:03
Bonjour.
Voila à chaque fois que je me lance dans un projet de programmation C++, je suis tjrs bloqué par certaines choses, surtout les arguments, et cela m'embête terriblement car je ne comprend tjrs pas.

Alors prenons un exemple plus concret, voici un source que j'ai fait, et avec lequel je rencontre des erreurs.

==============================================
// au cas où le header est pris comme balise HTML: il s'agit de iostream.h
#include
using std::cout;
using std::cin;

int def_func()
{
int a;
int b;
cout<<"Choisisez deux nombres:\n";
cin>>a;
cin>>b;
cout<<"La valeur de a est:\n"<<a"\n";
cout<<"La valeur de b est:\n"<<b"\n";
int produit=a*b;
cout <<"produit des nombres:\n"<<produit"\n";
return produit;
}

int values()
{
int Exemple1=def_func(4,8);
int Exemple2=def_func(3,9);
int Exemple3=def_func(7.8,12); // a=7 !
cout<<Exemple1;
cout<<Exemple2;
cout<<Exemple3;
return 0;
}
========================================

Voila, alors je préviens, ce n'est certes pas un programme complet à cause de l'absence de fonction main() , mais je voudrais que vous m'aidiez precisement, c'est pourquoi je prefererais qu'on se focalise sur cette portion.

Alors, en fait, les calculs et les variables principales sont définies dans ma fonction def_func().
Une question se pose: Faut-il que je passe a et b en arguments puisqu'ils sont choisis et utilisés dans le calcul ?

Ensuite, la fonction int values(int) , qui, dans le programme est traitée juste apres la fonction def_func().
Le but: je voulais definir des variables Exemple1 , 2 et 3 qui contiendraient le résultat du traitement de la fonction def_func() avec les valeurs passées:
pour Exemple1: valeurs: 4 , 8
pour Exemple2: valeurs: 3 , 9
pour Exemple3: valeurs: 7 , 12
Voila, donc, ici mes questions & mes interrogations :
j'obtiens toute sorte d'erreurs sur le passage d'arguments à la fonction def_func , est ce que cela provient du fait qu'il n'y ait aucun argument definit pour def_func ? cad devrais-je faire int def_func(int a,int b) ?
Dans ce cas ce serait une erreur de surcharge?
Bon, et ce que je n'arrive pas à faire, c'est récuperer la valeur de la variable "produit" définie à la fonction def_func() pour chaque cas d'exemple de la fonction int values() et afficher ces résultats à l'ecran, depuis la fonction values() !
Referez vous au code , car même s'il est faux vous y comprendrez sûrement mon intention.

Voila, c'est un peu long, mais je remercie d'avance les personnes qui accepteront de prendre du temps pour m'aider.
P.S: Une simple correction du script ne me conviendrait pas, comprenez que je suis débutant et il me serait necessaire d'avoir des explications (en particulier sur les deux notions: recuperation de valeurs de retour, et passage/definition d'arguments).

Merci.

3 réponses

cs_Bog Messages postés 29 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 28 janvier 2003
26 déc. 2001 à 20:06
bon pour les "cout" de la fonction def_func(), y'a quelques trucs qui vont pas , virez le "\n" de fin mais sinon c'est pas grave le probleme réside pas de là.
Donc svp soyez solidaires et j'attend votre aide.
0
Croqmort Messages postés 95 Date d'inscription mercredi 5 décembre 2001 Statut Membre Dernière intervention 27 juin 2006
28 janv. 2002 à 10:10
> Une question se pose: Faut-il que je passe a et b en arguments puisqu'ils sont choisis et utilisés dans le calcul ?
ta maniere de programmer me deconcerte quelque peu
si tu veux pouvoir faire def_func( 4 , 8);
il faut que ta definition de la fonction def_func soit :
int def_func(int a,int b);
perso je ferai :
int def_func(int a,int b){
return a*b;
}

car tu as 2 choix soit tu demande les valeurs de a et de b a l'interieur de ta fonction (cin>>a;cin>>b;)
soit tu les demandes en argument, dans ce cas là tu n'as plus besoin de mettre cin>>a et cin>>b

je vais mettre un petit prog d'exemple :

int func(int a,int b){
return a+b;
}

void main(){
int r;
r = func(1,2);
}
lorsque tu va faire func(1,2); la fonction func va etre appelé et a aura pour valeur 1 et b aura pour valeur 2
le calcul a+b aura donc pour valeur 3 et cet valeur va etre renvoyer par la fonction (return)
donc la fonction func(1,2); va avoir la valeur 3 donc r sera egal à 3;

je vais essayer de t'explique la fonction return au niveau systeme :
le processeur contient des registrre qui lui serve a stocké les variables dont il va s'utiliser un de ces registres à pour nom EAX
quand tu fait "return" suivi de qqchose, il met la valeur de ce qqchose dans EAX; et il retourne dans la partie de programme qui avait appelé la fonction
qiu a appelé "return"
lorsque le programme veux savoir ce que la fonction a retourné, il a juste a regarder dans le registre EAX, c'est ce qui se passe quand tu fait r = func(1,2);
il met dans r la valeur de EAX, est donc il met dans r ce que tu à mis dans EAX lorsque tu a fait "return" et donc il met dans r le resultat de a+b c'est à dire r=3; (vu que a = 1 et b = 2)

houla je me rend compte que je me suis un peu laissé porté par ma folie :) j'espere ne pas avoir été trop compliquer ! ce que je dit n'est pas tout le temp vrai, mais c'est ce qui ce passe si tu programme sous dos et windows avec les compilateurs bc++ et vc++ pour les autres systemes et compilateur, je sais pas !

> j'obtiens toute sorte d'erreurs sur le passage d'arguments à la fonction def_func , est ce que cela provient du fait qu'il n'y ait aucun argument definit pour def_func ? cad devrais-je faire int def_func(int a,int b) ?
le compilateur ne s'attend pas a recevoir d'argument vu que tu ne lui à pas dit qu'il y en avait ! donc il refuse de compiler lorsqu'il y'as des argument !

>Bon, et ce que je n'arrive pas à faire, c'est récuperer la valeur de la variable "produit" définie à la fonction def_func() pour chaque cas d'exemple de la fonction int values() et afficher ces résultats à l'ecran, depuis la fonction values() !
en fait si tu veux t'utiliser de ta fonction def_func() sans avoir a la modifier, ne met par d'argument fait juste :

int values(){
int Exemple1=def_func();
int Exemple2=def_func();
int Exemple3=def_func();
cout<<Exemple1;
cout<<Exemple2;
cout<<Exemple3;
return 0;
}
mais le programme te demandera les valeur des variables a et b
sinon tu peut juste modifier ta fonction def_func() pour lui permettre de recevoir des arguments :
int def_func(int a,int b){
// on enleve tout les cout et cin pour que la
// fonction ne nous demande pas la valeur de a et b
// on peut laisser qq cout si tu veux que la fonction
// affiche les argument qui lui sont envoyé :
cout<<"La valeur de a est:\n"<
using std::cout;
using std::cin;

int def_func()
{
int a;
int b;
cout<<"Choisisez deux nombres:\n";
cin>>a;
cin>>b;
cout<<"La valeur de a est:\n"<<a"\n";
cout<<"La valeur de b est:\n"<<b"\n";
int produit=a*b;
cout <<"produit des nombres:\n"<<produit"\n";
return produit;
}

int values()
{
int Exemple1=def_func(4,8);
int Exemple2=def_func(3,9);
int Exemple3=def_func(7.8,12); // a=7 !
cout<<Exemple1;
cout<<Exemple2;
cout<<Exemple3;
return 0;
}
========================================

Voila, alors je préviens, ce n'est certes pas un programme complet à cause de l'absence de fonction main() , mais je voudrais que vous m'aidiez precisement, c'est pourquoi je prefererais qu'on se focalise sur cette portion.

Alors, en fait, les calculs et les variables principales sont définies dans ma fonction def_func().
Une question se pose: Faut-il que je passe a et b en arguments puisqu'ils sont choisis et utilisés dans le calcul ?

Ensuite, la fonction int values(int) , qui, dans le programme est traitée juste apres la fonction def_func().
Le but: je voulais definir des variables Exemple1 , 2 et 3 qui contiendraient le résultat du traitement de la fonction def_func() avec les valeurs passées:
pour Exemple1: valeurs: 4 , 8
pour Exemple2: valeurs: 3 , 9
pour Exemple3: valeurs: 7 , 12
Voila, donc, ici mes questions & mes interrogations :
j'obtiens toute sorte d'erreurs sur le passage d'arguments à la fonction def_func , est ce que cela provient du fait qu'il n'y ait aucun argument definit pour def_func ? cad devrais-je faire int def_func(int a,int b) ?
Dans ce cas ce serait une erreur de surcharge?
Bon, et ce que je n'arrive pas à faire, c'est récuperer la valeur de la variable "produit" définie à la fonction def_func() pour chaque cas d'exemple de la fonction int values() et afficher ces résultats à l'ecran, depuis la fonction values() !
Referez vous au code , car même s'il est faux vous y comprendrez sûrement mon intention.

Voila, c'est un peu long, mais je remercie d'avance les personnes qui accepteront de prendre du temps pour m'aider.
P.S: Une simple correction du script ne me conviendrait pas, comprenez que je suis débutant et il me serait necessaire d'avoir des explications (en particulier sur les deux notions: recuperation de valeurs de retour, et passage/definition d'arguments).

Merci.
0
cs_Bog Messages postés 29 Date d'inscription mercredi 26 décembre 2001 Statut Membre Dernière intervention 28 janvier 2003
28 janv. 2002 à 13:03
Ah !
Salut... c'est un post assez ancien!
M'enfin... mieux vaut tard que jamais :)
Depuis malheureusement j'ai pas pu m'investir d'avantage dans mon travail de programmation, mais je te remercie qd même de ta réponse, j'ai compris mes erreurs et ton message m'a réconforté sur quelques points.

Ton idée de faire un projet quasi irréalisable n'est pas si bête, mais ce qui me bloque le plus ce sont les fonctions "définies" , cad celles deja crées et présentes dans les librairies ...
En gros, il me faudrait une fiche imprimable de toute les librairies les plus utilisées avec le detail de syntaxe de chaque fonctions qu'elles contiennent et leur but d'utilisation.

Voila, sans outils , on n'avance pas!
@+

P.S: Croq, je suis sous Win98 , et je possède BC++ Builder 5.
0
Rejoignez-nous