Intializing argument 4

Fermé
jocker77 Messages postés 1 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 7 décembre 2015 - Modifié par jocker77 le 7/12/2015 à 16:35
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 8 janv. 2016 à 18:07
Bonjour,
je dois rendre ce projet pour demain sauf qu'à la fin j'ai un petit soucis, je vous donne déjà mon programme:

#include<iostream>
#include<cmath>
using namespace std;

double P(int n, double x, double (*a)){
double result;

for (int i=0;i<=n;++i){
result= result + a[i]*(pow(x,i));
}
return result;

}

double mrg( double a, double b, int N,double(*f)(double x)){
double h=(b-a)/N;
double result;

for (int i=0;i<=N;++i){

result= result+ h*f(a+i*h);
}
return result;
}

double trap(double a, double b,double N, double (*f)(double(x))) {
double h=(b-a)/N;
double result;

for (int i=0;i<=N;i++){
result=result+h*(f(a+i*h)+f(a+(i+1)*h))/2 ;
}
return result;
}

double simp(double a, double b,double N, double (*f)(double(x))) {
double h=(b-a)/N;
double result;

for (int i=0;i<=N;i++){
result=result+h*((1./6)*f(a+i*h)+(2./3)*f(((a+i*h)+(a+(i+1)*h))/2)+1./6*f(a+(i+1)*h)) ;

}
return result;
}

int main (){

int N, n, i;
double a, b, *poi;
poi=new double [n+1] ;
char choix;

cout<<"entrez les bornes de l'intervalle : \n \
entrez a: ";
cin>>a;
cout<<"entrez b: ";
cin>>b;
cout<<"entrez le nombre des sous-intervalles: ";
cin>>N;
cout<<"entrez le degre du polynome: ";
cin>>n;
for(i=0;i<=n+1;i++){
cout<<"entrez la coefficient "<<i<<": ";
cin>>poi[i];
}


cout<<"choisissez une methode: \n \
tapez R pour la methode des rectangles a gauche: \n \
tapez T pour la methode des trapezes : \n \
tapez S pour la méthode de simpson : \n \
" ;

cin>>choix;
switch(choix)

{
case 'R': {
cout<<"votre polynome a pour approximation : "<<mrg(a,b,N,P);
break;
}
case 'T': {
cout<<"votre polynome a pour approximation : "<<trap(a,b,N,P);
break;
}

case 'S': {
cout<<"votre polynome a pour approximation : "<<simp(a,b,N,P);
break;

}
}

}

Voilà le programme et à la fin ça m'affiche comme erreur:

S:\yassineinfo\main.cpp||In function 'int main()':|
S:\yassineinfo\main.cpp|164|error: invalid conversion from 'double (*)(int, double, double*)' to 'double (*)(double)'|
S:\yassineinfo\main.cpp|164|error: initializing argument 4 of 'double mrg(double, double, int, double (*)(double))'|
S:\yassineinfo\main.cpp|168|error: invalid conversion from 'double (*)(int, double, double*)' to 'double (*)(double)'|
S:\yassineinfo\main.cpp|168|error: initializing argument 4 of 'double trap(double, double, double, double (*)(double))'|
S:\yassineinfo\main.cpp|173|error: invalid conversion from 'double (*)(int, double, double*)' to 'double (*)(double)'|
S:\yassineinfo\main.cpp|173|error: initializing argument 4 of 'double simp(double, double, double, double (*)(double))'|
||=== Build finished: 6 errors, 0 warnings ===|

SVP j'ai besoin d'aide le plutôt possible, merci d'avance :) .
            
                
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
8 janv. 2016 à 18:07
Bonjour,

Dans ton code, tes fonction smp, mrg et trap déclarent qu'elles attendent un pointeur de fonction, telle que cette fonction retourne un double et prend en paramètre un double.

Or ici, tu passes la fonction P, qui certes retourne bien un double, mais prend en paramètres un
int
et un
double *
.

Tes pointeurs de fonctions devraient être du genre
double (*f) (int, double, double *)
et tes appels à f (donc P), conforme à ce prototype.

Bonne chance
0