Problème fonction c++
Fermé
dannydouby
Messages postés
139
Date d'inscription
dimanche 7 juin 2009
Statut
Membre
Dernière intervention
1 juin 2013
-
8 mai 2013 à 22:03
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 - 13 mai 2013 à 09:50
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 - 13 mai 2013 à 09:50
A voir également:
- Problème fonction c++
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction remplacer word - Guide
- Fonction miroir - Guide
4 réponses
Gigatrappeur
Messages postés
226
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 juillet 2014
25
13 mai 2013 à 09:50
13 mai 2013 à 09:50
Comme ce que j'ai écrit n'a pas l'air d'être clair, je vais développer.
typedef double (*ptrFonction)(double,double); double add(double add_a, double add_b){ return add_a + add_b; } double mult(double mult_a, double mult_b){ return mult_a * mult_b; } int main() { std::map<std::string, ptrFonction> listFunction; listFunction["add"] = add; listFunction["mult"] = mult; ... cin >> fonction; std::map<std::string, ptrFonction>::iterator iter; iter = listFunction.find(fonction); if (iter != listFunction.end()) cout << ((*iter).second)(val_a, val_b) << endl; else cout << fonction << " introuvalbe !" << endl; }
Gigatrappeur
Messages postés
226
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
3 juillet 2014
25
8 mai 2013 à 23:27
8 mai 2013 à 23:27
Bonjour,
Tu pourrais faire une table de correspondance qui pour une chaine, contient ta fonction.
Exemple :
Tu aurais utilisé un autre langage, je t'aurais dit, utilise la réflexion. Mais je crois que cela n'existe pas en C++
Cordialement,
Gigatrappeur
Tu pourrais faire une table de correspondance qui pour une chaine, contient ta fonction.
Exemple :
cin >> fonction; listeFonction[fonction]();Par contre cela demande un niveau assez haut en C/C++ pour faire ça.
Tu aurais utilisé un autre langage, je t'aurais dit, utilise la réflexion. Mais je crois que cela n'existe pas en C++
Cordialement,
Gigatrappeur
Salut, ça va être difficile de se débarrasser des if mais si tu veux juste rendre plus lisible tu peux par exemple faire:
ça ne fait que déplacer le problème mais au moins tu n'auras pas à réécrire les ifs si tu dois les utiliser ailleurs....
#include <iostream> using namespace std; double megafonction(double operande_a, double operande_b, string operateur){ if(operateur == "add") return(operande_a + operande_b); else if (operateur == "mult") return(operande_a * operande_b); else if (operateur == "minu") return(operande_a - operande_b); else if (operateur == "divi") return(operande_a / operande_b); return 0; } bool val(double& val_a, double& val_b){ cout << "Valeur a:"; cin >> val_a; cout << "Valeur b:"; cin >> val_b; return 1; } int main(){ while(true){ string fonction; cout << "Quel operation voulez-vous effectuer: "; cin >> fonction; double val_a, val_b; if(fonction=="add"||fonction=="mult"||fonction=="minu"||fonction=="divi"){ val(val_a, val_b); cout << megafonction(val_a, val_b, fonction)<<endl; }else{ cout << "operation non connue"<<endl; } } return 0; }
ça ne fait que déplacer le problème mais au moins tu n'auras pas à réécrire les ifs si tu dois les utiliser ailleurs....
dannydouby
Messages postés
139
Date d'inscription
dimanche 7 juin 2009
Statut
Membre
Dernière intervention
1 juin 2013
6
12 mai 2013 à 07:12
12 mai 2013 à 07:12
en effet... mais je ne sais toujours pas comment régler mon prob