Problème classe polynome

cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005 - 24 déc. 2004 à 15:14
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Derniè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;
 	 	}
 
 	 }

 }
 



Mes erreurs :

--------------------Configuration: poly - Win32 Debug--------------------
Compiling...
cricri.cpp
c:\mes documents\école\math\dauphin2poly\poly\cricri.cpp(6) : error C2143: syntax error : missing ';' before 'PCH creation point'
test.cpp
c:\mes documents\école\math\dauphin2poly\poly\test.cpp(5) : error C2143: syntax error : missing ';' before 'PCH creation point'
Error executing cl.exe.

poly.exe - 2 error(s), 0 warning(s)

Pouvez-vous aussi me dire comment je peux utiliser la classe monome pour la classe polynome.

68 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 17:49
La fonction marche ! :) Elle marche chez moi. Mais on est peut etre pas d'accord sur son role.

bool polynome::inpoly(char a)
{
cout << (int)a << endl;
cout << nbi << endl;
if ( (int) a< 97+nbi ) return true;
else return false;
}

UN_POLYNOME.inpoly('a'); va retourner TRUE si a est une indéterminée FALSE sinon.

Pour la fonction d'évaluation du polynome:

float polynome::evalue()//.cpp
{
float val=0;
for (int i=0;i<nbm;i++)
{
cout<<liste_monome[i].evalm();
val=val+liste_monome[i].evalm();
}
return val;
}

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 ' '.

Aller ++
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 18:04
bool inpoly ne renvoie rien chez moi.
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 18:14
Il renvoie en fait 97 puis 5 car p a 5 indeterminees puis 1. A quoi correspond 1?
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 18:19
La fonction doit regarder dans p.affichage si a apparait.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 18:31
bool polynome::inpoly(char a)
{
cout << (int)a << endl;
cout << nbi << endl;
if ( (int) a< 97+nbi ) return true;
else return false;
}

Cette fonction faut l'utiliser ce la facon suivante:

If (UN_POLYNOME.inpoly('a')) cout << "a est une indéterminee" ;
else cout << "a n'est pas une indeterminee" ;

ok ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 18:33
bool polynome::inpoly(char a)
{
cout << (int)a << endl;
cout << nbi << endl;
if ( (int) a< 97+nbi ) return true;
else return false;
}

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 !
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 18:43
Il me marque alors

C:\Mes documents\école\math\cricri.cpp(127) : error C2065: 'TRUE' : undeclared identifier
C:\Mes documents\école\math\cricri.cpp(128) : error C2065: 'FALSE' : undeclared identifier
Error executing cl.exe.

Comment je les déclare?
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 18:59
Pour evalm:

j'ai changé :

float evalm(float *tableau); //evalue un monome a partir des valeurs attribuees aux indeterminees

float monome::evalm(float *tableau)//.cpp
{cout<<"Le nombre d'indeterminees est : "<<n<<endl;
for(int j=0;j<n;j++)
{cout<<j+1<<"eme indeterminee ? ";
cin>>tableau[j];}
for(int i=0;i<n;i++)
{cout<<"Le "<<i+1<<"ieme degre est :"<<tab[i]<<endl;}
cout<<"Le coefficient est : "<<c<<endl;
float f=1;
for(int h=0;h<n;h++)
{f=f*pow(tableau[h],tab[h]);}
f=f*c;
return f;
cout<<"La valeur du monome est : "<<f<<endl;
}

//main

case 7 : cout<<"La valeur du monome est : "<<m1.evalm(tableau)<<endl; break;

Qu'est-ce que je met à la place de tableau dans le main?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 19:05
en haut du programme, juste en dessous des include etc...
tu mets:
#define FALSE 0
#define TRUE 1
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 19:10
C'est ca qu'il faut:

float monome::evalm(float *tableau)//.cpp
{
cout<<"Le nombre d'indeterminees est : "<<n<<endl;
for(int i=0;i<n;i++)
{
cout<<"Le "<> tableau[i];
}
cout << "La valeur du monome est : " << m1.evalm(tableau) << endl;

Voila en gros
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 19:49
J'ai modifié mais :

//.cpp
float monome::evalm(float *tableau)
{cout<<"Le nombre d'indeterminees est : "<<n<<endl;
for(int j=0;j<n;j++)
{cout<<j+1<<"eme indeterminee ? ";
cin>>tableau[j];}
for(int i=0;i<n;i++)
{cout<<"Le "<> tableau[k];}
cout << "La valeur du monome est : " << m1.evalm(tableau) << endl; break;

Ca ne marche pas.
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 19:58
bool inpoly ne marche pas non plus. J'ai modifié TRUE et FALSE.

Lorsque je mets m1.tab[0]=0 et m2.tab[0]=0, il me met a est une indéterminée alors que a est une constante donc a n'apparait pas.

Help, help.
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 20:15
J'ai essayé autre chose :

bool inpoly(char *s);//.h

bool polynome::inpoly(char *s)//.cpp
{int compteur=0;
for(int i=0;s[i]!='\0' && compteur>=0;i++)
if(s[i]=='a') compteur++;
return (compteur==0);

}

//main

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.

dauphin2.exe - 1 error(s), 0 warning(s)
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 21:29
help, please.
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 21:49
J'ai trouvé pour evalu() :

//.h
float* saisir_ind();
float evalu();//il faut saisir les mêmes valeurs pour une indéterminée i

//.cpp
float* polynome::saisir_ind()
{cout<<"Le nombre d'indeterminees est : "<<nbi<<endl;
float* val=new float[nbi];
for(int j=0;j<nbi;j++)
{cout<<j+1<<"eme indeterminee ? \n";
cin>>val[j];}
return val;
cout<<val;}

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;
}

//main

case 18 : p.evalu();cout<<endl; break;

Ca marche, j'ai essayé.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
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.

int polynome::inpoly(char *s)//.cpp
{
if ( ( (int)s < 97 + nbi ) && ( tab[(int]s - nbi) != 0) return 1;
else return 0;
}

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.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 22:16
J'ai oublié une parenthèse dans la fonction, mais tu l'aurais remarqué.
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
28 déc. 2004 à 22:28
Que dois-je mettre dans le main?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 déc. 2004 à 23:39
A zut, je me suis planté, ca c'est la fonction monome::inpoly(char s)
Cad celle la:

int monome::inpoly(char *s)//.cpp
{
if ( ( (int)s < 97 + nbi ) && ( tab[(int]s - nbi) != 0) return 1;
else return 0;
}

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.

voila
0
cricri nature Messages postés 47 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
29 déc. 2004 à 09:04
Je veux juste encore résoudre la somme qui ne marche pas.
Help please.
0
Rejoignez-nous