bonjour.. j´ai une erreur dans mon porgramme c++.. mais c´est un truc un peu.. mystérieux
alors j´expose le probléme:
avant une boucle j´ai une variable qui vaut 2 par exemple
et apres la boucle elle vaut 0
pourkoi???
la partie concerné est la suivante:
cout<<" 1nbpo="<<nbpo<<endl;
for (int m=0; m<=MAXDEGRE;m++){ //re initialisation des tableaux résultats
t3[m]=0;
d[m]=0;
P[m]=0;
}
cout<<" 2nbpo="<<nbpo<<endl;
bon... C vria qu´il manque le reste alors je le met... mais ça pred bcp de place je vous previens
- include <iostream.h> // fichier entête pour E/S en C++
- include <stdio.h> // fichier entête pour E/S en C
- include <math.h> // fichier entête pour fcts mathématiques
- include <conio.h> // utile : fcts comme getch()
- include <stdlib.h> // fichier entête librairie standard (par ex:fct exit())
const MAXDEGRE=7/*-1 pour avoir le degré maximum*/;
const NBPOLY=5; // nombre de polynôme à saisir
typedef float tab[MAXDEGRE];
typedef tab tp[NBPOLY]; //définition d´un tableau tp de type tab
//_________procédure et fonction
void init(tab t1);
inline void saisie(tab t1); //procédure de saisie
inline void aff(tab t1); //procédure d´affichage
inline void affpoly(int k,tp tablo); //affichage des polynômes saisis
inline void errsaisie(int & x, int h, int y);
double valX(tab t1,float x);
int deg(tab t1);
void add(tab t1, tab t2, tab & t3);
void deri(tab t1, tab & d);
void prim( tab t1,tab & P);
bool poss(tab t1,tab t2);
void prod(tab t1,tab t2,tab & t3);
//-----------------------------MAIN---------------
--------------------------------------
void main(){
float x;
int choix,p1,p2;
int s=0,nbpo;
tab t3,d,P;
tp vtp;
system("CLS");
for(int m=0; m<=MAXDEGRE;m++){ //initialisations des tableaux à 0
init(vtp[m]); // par la procédure init
t3[m]=0; //directement pour les tableaux résultat
d[m]=0;
P[m]=0;
}
cout<<"\nSAISIE DES POLYNOMES :"<<endl;
cout<<"\tMAX DEGRE: "<<MAXDEGRE-1<<" NOMBRE POLYNOME MAX: "<<NBPOLY<<endl;
cout<<"\n\tcombien de polynome a saisir? (moins de "<<NBPOLY<<" ): "<<flush;
errsaisie(nbpo,1,NBPOLY);
for(int p=0; p<nbpo; p++){ //saisie des nbpo polynômes
system("CLS");
cout<<"\n polynome "<<p<<endl;
saisie(vtp[p]); //pour appel procédure de saisie
cout<<"\n le polynome saisi est :"<<endl;
aff(vtp[p]); //pour appel procédure d´affichage
cout<<endl;
system("PAUSE");
}
while(s==0){ // boucle permettant de relancer le programme à ce niveau
system("CLS");
cout<<"\n"<<flush;
cout<<"---------------MENU---------------------"<
<endl;
cout<<" "<<endl;
cout<<" 1-valeur du polynome en x donne "<<endl;
cout<<" 2-degre du polynome "<<endl;
cout<<" 3-addition de deux polynomes "<<endl;
cout<<" 4-derivee du polynome "<<endl; // affichage du menu
cout<<" 5-primitive du polynome "<<endl;
cout<<" 6-produit de deux polynomes "<<endl;
cout<<endl;
cout<<" 0- quitter "<<endl;
cout<<" "<<endl;
cout<<"----------------------------------------"<
<endl;
cout<<"\tCHOIX:"<<flush;
errsaisie(choix,1,6); //vérification que le choix du tableau est entre 0 et 6
cout<<" 1nbpo="<<nbpo<<endl;
for (int m=0; m<=MAXDEGRE;m++){ //re initialisation des tableaux résultats
t3[m]=0;
d[m]=0;
P[m]=0;
}
cout<<" 2nbpo="<<nbpo<<endl;
switch (choix){
case 1: { //appel fonction pour le polynome avec x donnée
cout<<"donner la valeur de x :";
cin>>x;
for(int a=0; a<=nbpo-1;a++){ // donne résultat pour chaque polynôme
cout<<"le resultat est pour le polynome "<<a+1<<" est :"<<valX(vtp[a],x)<<endl;
}
}
break;
case 2:{
for(int a=0; a<=nbpo-1;a++){ //appel fonction pour la valeur des polynômes
cout<<" le degre du polynome "<<a<<" est : "<<deg(vtp[a])<<endl;
}
}
break;
case 3:{
cout<<" choisir deux polynomes a additionner"<<endl;
affpoly(nbpo,vtp); //affichage des polynômes possibles
cout<<" \n premier polynome? :"<<flush;
errsaisie(p1,0,nbpo); //vérification que p1 est bien un des choix proposés
cout<<" \n deuxieme polynome?: "<<flush;
errsaisie(p2,0,nbpo); //vérification que p1 est bien un des choix proposés
add(vtp[p1],vtp[p2],t3); //appel procédure d´addition( résultat dans t3)
cout<<"\nla somme des deux polynomes est: "<<endl;
aff(t3);
}
break;
case 4:{
cout<<" choisir un polynome a deriver"<<endl;
affpoly(nbpo,vtp); //affichage des polynômes possibles
cout<<"choix: "<<flush;
errsaisie(p1,0,nbpo); //vérification que p1 est bien un des choix proposés
cout<<"\n la derivee du polynome "<<p1<<" est"<<endl;
deri(vtp[p1],d); //appel procédure pour la dérivée (résultat dans d)
aff(d);
}
break;
case 5:{
cout<<" choisir un polynome a primitiver"<<endl;
affpoly(nbpo,vtp); //affichage des polynômes possibles
cout<<"choix: "<<flush;
errsaisie(p1,0,nbpo); //vérification que p1 est bien un des choix proposés
cout<<" la primitive du polynome est"<<endl;
prim(vtp[p1],P); //appel procédure pour la dérivée (résultat dans F)
aff(P);
cout<<" + C"<<endl; //affichage de la constante
}
break;
case 6:{
cout<<" choisir deux polynomes a multiplier"<<endl;
affpoly(nbpo,vtp); //affichage des polynômes possibles
cout<<"\n premier polynome? :"<<flush;
errsaisie(p1,0,nbpo); //vérification que p1 est bien un des choix proposés
cout<<" \n deuxieme polynome?: "<<flush;
errsaisie(p2,0,nbpo); //vérification que p2 est bien un des choix proposés
if(poss(vtp[p1],vtp[p2])){ //appel fonction pour savoir si le produit est possible
prod(vtp[p1],vtp[p2],t3); //appel de la procédure pour le produit (résultat dans t3)
cout<<"le produit des deux polynomes est: "<<endl;
aff(t3);
}
else
cerr<<" produit impossible! "<<endl;
}
break;
case 7: break;
}
cout<<endl;
cout<<"relancer le programme?"<<endl;
cout<<" 0 - oui"<<endl;
cout<<" 1 - non"<<endl;
cout<<"\t choix: "<<flush;
cin>>s;
}
getch();
}
void init(tab t1){
for(int r=0; r<=MAXDEGRE-1;r++)
t1[r]=0;
}
inline void saisie(tab t1){
int cont=0;
for( int i=0; i<=MAXDEGRE-1; i++){
cout<<"donner coef de x^"<<i<<" : "<<flush;
cin>>t1[i];
cout<<"\t continuer?? 0-oui 1-non : "<<flush;
errsaisie(cont,0,1);
cout<<endl;
if (cont==1)
break;
}
}
inline void aff( tab t1){
bool b=true;
int i;
for(i=MAXDEGRE-1; i>=0; i--){
if( t1[i]!=0){
if( b==true){
cout<<t1[i]<<"x^"<<i<<flush;
b=false;
}
else{
if (t1[i]>0)
cout<<" + "<<t1[i]<<"x^"<<i<<flush;
else
cout<<" "<<t1[i]<<"x^"<<i<<flush;
}
}
}
if(b==true)
cout<<"0"<<endl;
}
inline void errsaisie(int & q,int h, int y){
cin>>q;
while((q<h)||(q>y)){
cerr<<" valeur saisie non conforme"<<endl;
cout<<" redonner une valeur: "<<flush;
cin>>q;
}
}
faire un choix
inline void affpoly(int k,tp tablo){
for(int a=0; a<=k-1; a++){
cout<<" \n polynome "<<a<<" : "<<flush;
aff(tablo[a]);
}
}
double valX(tab t1,float x){
double cal=t1[MAXDEGRE-1];//valeur calculée initialisé au coef du x de plus haut degré
for(int i=MAXDEGRE-2; i>=1;i--){
cal=cal*x + t1[i-1];
}
return cal;
}
int deg(tab t1){
int i=MAXDEGRE;
do{
i--;
}
while((t1[i]==0)||(i==0));
return i;
}
void add(tab t1, tab t2, tab & t3){
int i=0;
do{
t3[i]=t1[i]+t2[i];
i++;
}
while(i<=MAXDEGRE);
}
void deri(tab t1, tab & d){
for(int i=0; i<=MAXDEGRE-2;i++)
d[i]=t1[i+1]*(i+1);
}
void prim( tab t1,tab & F){
for(int i=1; i<=MAXDEGRE; i++)
F[i]=(t1[i-1])/i;
}
bool poss(tab t1,tab t2){
bool c=false;
int a=deg(t1);
int b=deg(t2);
if((a+b)<=MAXDEGRE-1)
c=true;
return c;
}
void prod( tab t1,tab t2,tab & t3){
int j,i,k;
for(k=0; k<MAXDEGRE;k++){
i=0;
j=k;
while(j>=0){
t3[k] = t3[k]+(t1[i]*t2[j]);
j--;
i++;
}
}
}