Salve a tutti,
ho fatto un programma che consente di calcolare pi greco con la precisione e numero iterazioni secondo 4 metodi:
leibniz ();
archimede ( l2n(misura del lato del poligono inscritto in una circonferenza avente n*2 lati ) = sqrt(2*raggio^2 - raggio * sqrt (4*r^2 - ln^2)) dove ln è il valore di un lato del poligono inscritto avente n lati;
sharp ;
eulero http://misterpalomar.blogspot.it/2012/03/i-ponti-di-eulero.html (la formula è quella : pigreco^2/6=1+1/2^2...
Non funziona (anche se è, una volta compilato, non dà errori sintattici) purtroppo.
Eccolo:
#include <iostream>
#include <cmath>
using namespace std;
float pg_leib(float n);
float pg_archimede(float k,float raggio);
float precisione,p1,p2,s,a,raggio, pgreco, incertezza, ln, lati, x,i,k, j, scelta,b,ripetere,h;
float pg_sharp(float n);
float pg_eulero(float n);
int main ()
{
cout<<"Programma per calcolare pi greco secondo questi algoritmi"<<endl;
cout<<"Premere:"<<endl;
cout<<"1- Algoritmo leibniz"<<endl;
cout<<"2- Algoritmo archimede"<<endl;
cout<<"3- Algoritmo sharp"<<endl;
cout<<"4- Algoritmo eulero"<<endl;
cout<<"Cosa scegli?"<<endl;
cin>>scelta;
if (scelta==1)
{ cout<<"Dammi la precisione"<<endl;
cin>>precisione;
float n=50;
do
{p1=pg_leib(n);
p2=pg_leib(n*2);
n=n*2;
} while (fabs (p1-p2)>precisione);
cout<<"Pigreco vale.........."<<endl;
cout<<(p1+p2)/2<<endl;;
cout<<"le iterazioni fatte sono........"<<endl;
cout<<n/2;
}
else if (scelta ==2)
{cout<<"Inserire numero di iterazioni"<<endl;
cin>>k;
cout<<"Inserire il raggio della circonferenza"<<endl;
cin>>raggio;
do
{p1=pg_archimede(k,raggio);
p2=pg_archimede(k*2,raggio*2);
k=k*2;
} while (fabs (p1-p2)>precisione);
pgreco= pg_archimede(k,raggio);
cout<<"Pi greco e' circa "<<pgreco<<endl;
}
else if (scelta==3)
{cout<<"Dammi la precisione:"<<endl;
cin>>precisione;
cout<<"Dammi x:"<<endl;
cin>>x;
do
{p1=pg_sharp(x);
p2=pg_sharp(x*2);
x=x*2;
} while (fabs (p1-p2)>precisione);
cout<<"Pigreco vale:"<<endl;
cout<<(p1+p2)/2<<endl;;
cout<<"Le iterazioni fatte sono:"<<endl;
cout<<x/2<<endl;
}
else if (scelta==4)
{cout<<"Dammi la precisione"<<endl;
cin>>precisione;
cout<<"Dammi x"<<endl;
cin>>x;
do
{p1=pg_eulero(x);
p2=pg_eulero(x*2);
k=k*2;
} while (fabs (p1-p2)>precisione);
cout<<"Pigreco vale:"<<endl;
cout<<(p1+p2)/2<<endl;;
cout<<"Le iterazioni fatte sono:"<<endl;
cout<<x/2<<endl;}
system("PAUSE");
return EXIT_SUCCESS;
}
float pg_leib(float n)
{float p=1;
short int s=-1;
for (int i=3; i<=n; i+=2)
{p=p+(s/i);
s=-s;}
return p*4;}
float pg_archimede(float k, float raggio)
{ ln=raggio;
lati=3;
for(x=1;x<k;x++)
{ln=sqrt(2*raggio*raggio-raggio*sqrt(4*raggio*raggio-ln*ln));
lati=ln*2; }
k=(lati*ln)/raggio;
return k;
}
float pg_sharp(float n)
{j=2*(sqrt(3));
h=1;
b=1;
s=-1;
for (i=3;i<=x;i+=2)
{h=h*3;
b=b+(s/(i*h));
s=-s;}
return j=j*b;
}
float pg_eulero(float n)
{j=1;
for (i=2;i<=x;i++)
{k=1/(i*i);
j=j+k;
}j=sqrt(j*6);
}
Non capisco bene perché non funziona.
Qualcuno può aiutarmi?
Grazie per le risposte.