Zadatak ovako glasi:
1. Napisati program koji izračunava približnu vrijednost broja Pi=3.14159... koristeći slijedeću formulu:
Pi = 4*(1 – 1 / 3 + 1 / 5 - 1 / 7 + 1 / 9-1 / 11 +....)
Program se treba prekinuti u trenutku kada apsolutna vrijednost clana sume koji se treba sabrati bude manja od nekog broja eps koji se unosi na početku programa i koji zapravo definira preciznost izračunavanja. Taj uneseni broj eps treba biti u rasponu 0.0001 do 0.1. Ako broj eps nije u tom rasponu, program daje poruku «Broj nije u trazenom rasponu» i završava.
Na primjer, ako je unesen broj eps=0.0000023 program će dati poruku «Broj nije u zadanom rasponu» i završit će se njegovo izvođenje. Ako je sa tastature unesen, na primjer, broj eps=0.01 program će izračunati sumu prema datoj formuli sve dok vrijedi da je član koji se dodaje na sumu veći od 0.01, a to znači da će apsolutna vrijednost zadnjeg dodanog člana biti 1/99.
Zadatak treba riješiti koristeći while petlju
Ja sam sada napravio code:
#include <stdio.h>
#include <math.h>
main()
{
float n, k, eps, Pi, S, SumaP, SumaN, nP, nN;
/* Suma S=[ 1-(1/3)+(15)-(1/7)+(1/9)-(1/11)+(1/13)+... ]
moze se razloziti na dvije sume, i to sumu negativnih
clanova SumaN, te sumu pozitivnih clanova SumaP, u kom
slucaju bi se te dvije sume pisale kao:
SumaN=(1/3)+(1/7)+(1/11)+... ( opsti clan ove cume ce biti Sn=(1/(4n-1)) )
SumaP=(1/1)+(1/5)+(1/9)+... ( opsti clan ove cume ce biti Sn=(1/(4n+1)) )
S=SumaP-SumaN
Pi=4*S
*/
printf("\n Unesi vrijednost eps (u rasponu od 0.0001 do 0.1)");
scanf("%f",&eps);
if ((eps>0.0001) && (eps<0.1))
{
SumaP=1;
n=1;
nP=(1/(1+4*n));
while ( nP>eps )
{
SumaP=SumaP+nP;
n=n+1;
nP=(1/(1+4*n));
}
SumaN=0;
k=1;
nN=(1./(-1.+4.*k));
while (nN>eps )
{
SumaN=SumaN+nN;
n=n+1;
nN=(1./(-1.+4.*k));
}
S=SumaP-SumaN;
Pi=4*S;
printf("Vrijednost Pi za zadato eps, je %.10f", &Pi);
}
else
{
printf ("\n Eps nije u zadanom rasponu!");
}
getch();
return 0;
}
Kada kompajliram, sve je uredu...Prilikom egzekucije, u slucaju da unesem broj koji nije iz datog raspona (npr 0.00001) on mi regularno ispise "Eps nije u zadanom rasponu!"...Medjutim kada mu unesem eps iz datog raspona, jednostavno zaledi...Mislim da nije u redu nesto s while petljom, al mi nije jasno sta...Pa ako neko ima da zna, bio bih mu/joj mnogo zahvalan...Hvala unaprijed...