Manugal
22-09-2005, 16:51
Ciao a tutti!!! :)
Ho da fare questo programma...
Scrivere una funzione:
double eval(double p[], double x, double n) /* n è il grado massimo */
che restituisca il valore del polinomio p valutato in x. Scrivete due versioni della funzione. La prima funzione dovrebbe essere scritta con un semplice approccio immediato, mentre la seconda dovrebbe incorporare la Regola di Horner, che nel caso di polinomi di quinto grado si esprime scrivendo:
p(x)= a(0)+x*(a(1)+x*(a(2)+x*(a(3)+x*(a(4)+x*(a(5)))))
Io ho provato a fare il primo caso ma non mi stampa nulla. Riporto il codice:
#include <stdio.h>
#define N 5
double eval(double [], double, int);
double power(double, int);
int i=0;
int main(void){
double x,val;
double p[N+1];
printf("Inserisci x: ");
scanf("%lf", &x);
do {
printf("Inserisci coefficiente: ");
scanf("%lf", &val);
if(val==0)
break;
else
p[i]=val;
} while(++i<N);
printf("Valutazione espressione: %f", eval(p,x,i));
return 0;
}
double power(double x, int y){
double p=1.0;
int ind=1;
for(ind=0; ind<y; ++ind)
p*=x;
return p;
}
double eval(double p[], double x, int n){
int pow=1;
int index=1;
double tmp=p[0];
if((pow>i) || (i==0)){
return tmp;
}
else{
tmp+=p[index]*power(x,pow);
++index;
eval(p,x,pow+1);
}
return tmp;
}
Dove sta l'errore? Grazie. :)
Ho da fare questo programma...
Scrivere una funzione:
double eval(double p[], double x, double n) /* n è il grado massimo */
che restituisca il valore del polinomio p valutato in x. Scrivete due versioni della funzione. La prima funzione dovrebbe essere scritta con un semplice approccio immediato, mentre la seconda dovrebbe incorporare la Regola di Horner, che nel caso di polinomi di quinto grado si esprime scrivendo:
p(x)= a(0)+x*(a(1)+x*(a(2)+x*(a(3)+x*(a(4)+x*(a(5)))))
Io ho provato a fare il primo caso ma non mi stampa nulla. Riporto il codice:
#include <stdio.h>
#define N 5
double eval(double [], double, int);
double power(double, int);
int i=0;
int main(void){
double x,val;
double p[N+1];
printf("Inserisci x: ");
scanf("%lf", &x);
do {
printf("Inserisci coefficiente: ");
scanf("%lf", &val);
if(val==0)
break;
else
p[i]=val;
} while(++i<N);
printf("Valutazione espressione: %f", eval(p,x,i));
return 0;
}
double power(double x, int y){
double p=1.0;
int ind=1;
for(ind=0; ind<y; ++ind)
p*=x;
return p;
}
double eval(double p[], double x, int n){
int pow=1;
int index=1;
double tmp=p[0];
if((pow>i) || (i==0)){
return tmp;
}
else{
tmp+=p[index]*power(x,pow);
++index;
eval(p,x,pow+1);
}
return tmp;
}
Dove sta l'errore? Grazie. :)