[ reloaded_ @ 13.11.2005. 08:27 ] @
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... |