Buonasera.Non capisco perché questo codice con alcuni valori sembri funzionare,e con altri no(con determinati valori il processo da iterare sembra non arrestarsi mai...).Il calcolo dell'approssimazione poi lo metterò in una funzione di cui ho già scritto solo il prototipo(per l'appunto si chiama "esponenziale"),l'ho messo momentaneamente nel main per facilitarmi il lavoro. Ecco a voi il codice.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void letturax(double&);
double letturatolleranza(double&);
double fattoriale(int);
double potenza(double,int);
double esponenziale(double,double,int&);
int main(){
printf("Programma C++ strutturato in funzioni che approssima e^x,con -1<=x<=1 letto da tastiera,entro la tolleranza letta da tastiera,usando il polinomio di Taylor con x0=0 e\nil criterio di arresto a posteriori;e stampa il grado del polinomio di Taylor costruito e l'approssimazione di e^x calcolata\n");
double x;//esponente di e^x (funzione da approssimare con Taylor)
double tau;//tolleranza con cui approssimare e^x con Taylor
letturax(x);
double toll=letturatolleranza(tau);
double appross_esp=0;
int n;
do{appross_esp+=potenza(x,n)/fattoriale(n);
n++;
printf("L'approssimazione di e^x con il polinomio di Taylor nel punto x e':%lf\n",appross_esp);}
while (n>5);//(appross_esp>(0.001));//||appross_esp==(toll/M_E));
printf("Il grado del polinomio di Taylor con cui viene approssimato e^x e':%d\n",n);
printf("L'approssimazione di e^x con il polinomio di Taylor nel punto x e':%lf\n",appross_esp);
return 0;
}
//Lettura della variabile x della funzione e^x,con x appartente a [-1,1]:
void letturax(double&x){
printf("Inserire l'esponente(reale) x di e^x con x appartenente a [-1,1]:\n");scanf("%lf",&x);
//do{printf("Inserire l'esponente(reale) x di e^x con x appartenente a [-1,1]:\n");scanf("%lf",&x);}
//while(x<-1||x>2);
return;
}
//Lettura della tolleranza con cui sarà approssimata e^x tramite Taylor:
double letturatolleranza(double& tau){
printf("Inserire la tolleranza toll con cui sara' approssimata e^x tramite Taylor\n");scanf("%lf",&tau);
return tau;
}
//Calcolo del fattoriale di un numero intero inserito:
double fattoriale(int n)
{double fatt=1;
for(int j=1;j<=n;j++) fatt*=j;
return fatt;}
//Calcolo della potenza n-esima del numero intero inserito:
double potenza(double m,int n)
{int p=1;
for(int i=0;i<n;i++) p*=m;
return p;
}
//Calcolo dell'approssimazione di e^x con Taylor: