cricri nature
Messages postés47Date d'inscriptionvendredi 17 décembre 2004StatutMembreDernière intervention 7 janvier 2005
-
24 déc. 2004 à 15:14
cricri nature
Messages postés47Date d'inscriptionvendredi 17 décembre 2004StatutMembreDernière intervention 7 janvier 2005
-
2 janv. 2005 à 18:55
Bonjour, j'ai réussi à finir ma classe monome et doit maintenant créer une classe polynome. Seulement il y a 2 erreurs que je ne comprend pas. Pouvez-vous m'aider?
//poly(cricri.h)
# include
# include <cmath>
using namespace std;
class monome{
float c;
int n;//nombre d'indeterminee
int* tab;
public:
monome(); //constructeur du monome nul
monome(float coefficient,int MAX_IND); //constructeur
float coeff(); //coefficient du monome
int nb_ind(); //nombre d'indeterminees
int deg_max(); //degre maximum parmi les indeterminees du monome
int deg_hom(); //degre homogene (present dans le tableau tab)
int deg_ind(); //degre de la ieme indeterminee
void ind_pres(); //indeterminees effectivement presentes
float evalm(); //evalue un monome a partir des valeurs
//attribuees aux indeterminees
void affichage(); //affichage du monome
};
class polynome{
int nbm; //nombre de monomes
int nbi; //nombre d'indeterminees
monome* poly;
public :
polynome(); //constructeur du monome nul
polynome(int i, int n); //constructeur
polynome operator+(polynome p);
}
//poly(cricri.cpp)
#include "cricri.h"
# include
# include <cmath>
using namespace std;
monome::monome()
{c=0; n=0;}
monome::monome(float coefficient,int MAX_IND)
{c=coefficient; n=MAX_IND;
tab=new int[MAX_IND];
}
float monome::coeff()
{return c;}
int monome::nb_ind()
{return n;}
int monome::deg_max()
{monome m;
cout<<"Le nombre d'indeterminees est : "<<n<<endl;
for(int j=0;j<n;j++)
{cout<<"Le "<<j+1<<"ieme degre est :"<<endl;
cin>>tab[j];}
int max=tab[0];
for(int i=1;i<n;i++)
{if(tab[i]>max)
max=tab[i];}
return max;
}
int monome::deg_hom()
{int somme=0;
for(int i=0;i<n;i++)
{cout<<"Le "<>tab[i];
somme=somme+tab[i];}
return somme;
}
int monome::deg_ind()
{int i;
cout<<"Indeterminee numero :"<<endl;
cin>>i;
for(int j=0;j<n;j++)
{cout<<"Le "<<j+1<<"ieme degre est :"<<endl;
cin>>tab[j];}
if(i>0 && i<=n)
{cout<<"Le degre de l'indeterminee "<>tab[j];}
for(int i=0;i<n;i++)
{if(tab[i]!=0)
cout<<"L'indeterminee "<>val[j];}
for(int i=0;i<n;i++)
{cout<<"Le "<>tab[i];}
cout<<"Le coefficient est : "<<c<<endl;
float f=1;
for(int h=0;h<n;h++)
{f=f*pow(val[h],tab[h]);}
f=f*c;
return f;
cout<<"La valeur du monome est : "<<f<<endl;
}
void monome::affichage()
{monome m;
cout<<"Le nombre d'indeterminees est : "<<n<<endl;
char* ind=new char[n];
for(int j=0;j<n;j++)
{cout<<j+1<<"eme indeterminee ? \n";
cin>>ind[j];}
for(int i=0;i<n;i++)
{cout<<"Le "<>tab[i];}
cout<<"Le coefficient est : "<<c<<endl;
for (int k=0;k<n;k++)
{cout<<"Le monome est : "<
using namespace std;
void main()
{
monome m;
m=monome(6,3);
int choix=-1;
while (choix!=0)
{cout<<"Faites un choix:\n";
cout<<"1. Le coefficient\n";
cout<<"2. Nombre d'indeterminees \n";
cout<<"3. Afficher le degre maximum \n";
cout<<"4. Afficher le degre homogene \n";
cout<<"5. Afficher le degre d'une indeterminee \n";
cout<<"6. Indique les indeterminees presentes \n";
cout<<"7. Evaluer m a partir de valeurs attribuees aux indeterminees\n";
cout<<"8. Afficher le monome\n";
cout<<"0. Quitter \n";
cin>>choix;
switch(choix)
{case 1 : cout<<"Le coefficient est : "<<m.coeff()<<endl; break;
case 2 : cout<<"Le nombre d'indeterminees est : "<<m.nb_ind()<<endl; break;
case 3 : cout<<"Le degre max est : "<<m.deg_max()<<endl; break;
case 4 : cout<<"Le degre homogene est : "<<m.deg_hom()<<endl; break;
case 5 : cout<<m.deg_ind()<<endl; break;
case 6 : m.ind_pres();cout<<endl; break;
case 7 : cout<<"La valeur de l'indeterminee est : "<<m.evalm()<<endl; break;
case 8 : m.affichage();cout<<endl; break;
default : cout<<"Pas le bon cas."<<endl; break;
}
}
}
Ca m'a l'air tres corret. Mais le problème que tu soulèves est le bon. C'est pour ca que je t'avais proposé un autre algorithme pour UN_MONOME.evalm(float *tableau) avec le tableau en argument. C'est pas difficile de le corriger.
Car maintenant ta fonction polynome::evalue() deviendrait un truc du genre:
float polynome::evalue()//.cpp
{
float* tableau = new float[nbi];
for( int i=0; i < nbi ; i++)
{
cout << "Valeur de la " << i << "ème indéterminée : " ;
cin >> tableau[i].
}
float val=0;
for (int i=0;i<nbm;i++)
{
cout<<liste_monome[i].evalm( tableau );
val=val+liste_monome[i].evalm( tableau ); <==== COMME CA ! ^^
}
return val;
}
Il faut donc que tu arranges ta fonction monome::evalm() sur ce modèle. Eventuellement, tu es fait une deuxième (que tu appelles pareil) sauf qu'elle prend ce tableau de float en argument.
"Mais il faut faire attention car a doit toujours avoir la même valeur ainsi que b, c... dans le polynome et ici on peut vite donner deux valeurs différentes."
Et donc ce problème disparait...
Pour la fonction inpoly que tu proposais, ce n'est pas la peine puisque la première marche. Seulement j'espère que tu appelais bien avec UN_MONOME.inpoly('a') sans oublié les ' '.
EH mais attend !!!
c'est pas true ni false qui faut mettre, mais TRUE et FALSE !!
Ce sont des macros, tu peux pas les écrire comme tu veux.
C'est absolument en majuscule !
case 18 : p.inpoly(p.affichage());cout<<endl; break;
Mes erreurs :
Compiling...
test.cpp
C:\Mes documents\école\math\test.cpp(81) : error C2664: 'inpoly' : cannot convert parameter 1 from 'void' to 'char *'
Expressions of type void cannot be converted to other types
Error executing cl.exe.
float polynome::evalu()
{float P=0;
for (int i=0;i<nbm;i++)
{P=P+liste_monome[i].evalm();}
cout<<"La valeur du polynome est :"<<" P = "<<P;
return P;
}
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 28 déc. 2004 à 22:14
Finalement tu rajoutes un tableau membre a la classe monome ?
BOn c'est faisable mais c'est pas tres élégant, mais ca marche, c'est le principal.
Pour la fonction inpoly, j'avais pas réalisé ce problème. Le faire comme tu l'as fait, ca ne marchera pas, car la fonction affichage ne retourne aucune valeur.
NOTE: je change le type de retour, car apparemment tu as des problèmes avec les bool, donc la fonction renvoit 1 si la lettre est trouvé, 0 sinon. Tu comprends bien les deux termes ? Ils sont pas compliqué. Ca a l'avantage d'etre simple et efficace.
En fait, ca test si l'indéterminée est utilisée par un monome.
Voila la fonction qu'il faut mettre dans la classe polynome.
int polynome::inpoly(char s)
{
for (int i = 0; i< this->nbm; i++)
{
if ( this->liste_monome[i].inpoly(s) == 1 ) return 1;
}
return 0;
}
Et donc dans le main:
if ( UN_POLYNOME.inpoly('a') == 1 ) cout << "L'indeterminee est présente";
else cout << "L'indeterminee n'intervient pas" ;
Voila qui devrait etre mieux.
Tu as bien compris ? Il faut donc rajouter la fonction :
int monome::inpoly(char s); dans la class monome
et modifier celle de la classe polynome tel que je te l'ai écrite (au erreur de syntaxe pret) au dessus.