Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.14159

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.14159

[ Pregleda: 3071 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reloaded_
Muhamed Halilovic
Sarajevo

Član broj: 74164
Poruke: 4
*.europronet.ba.



Profil

icon [Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.1415913.11.2005. u 08:27 - pre 224 meseci
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...
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
*.metrohive.neobee.net.



+1 Profil

icon Re: [Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.1415913.11.2005. u 11:26 - pre 224 meseci
u izrazu:

Code:
nP=(1/(1+4*n));


Probaj da stavis po tackicu ... (mozda kompajler konta da je u pitanju integer ...) pa se izbudali ...


Ali nije to ... :)


Code:

while (nN>eps )
{
SumaN=SumaN+nN;
n=n+1;
nN=(1./(-1.+4.*k));
}


A da uvecas k za jedan u svakom prolazu (umesto n)... :)
 
Odgovor na temu

reloaded_
Muhamed Halilovic
Sarajevo

Član broj: 74164
Poruke: 4
*.europronet.ba.



Profil

icon Re: [Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.1415915.11.2005. u 08:41 - pre 224 meseci
OK, popravio sam to sto ste naveli...Sada program vise ne ledi...Medjutim kao rezultat mi daje sve 0.000000 ... pokusavao sam stavljati tackice kao sto si rekao medjutim ni to ne funkcionise:

prepravljeni kod izgleda:

Code:
#include <stdio.h>
#include <math.h>

main()

{
 float eps, Pi, S, SumaP, SumaN, nP, nN;
 int n, k;
 /* 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;
    k=k+1;
    nN=(1./(-1.+4.*k));
   }

  S=SumaP-SumaN;
  Pi=4*S;
  printf("Vrijednost Pi za zadato eps, je %f", &Pi);
  }
  else
  {
  printf ("\n Eps nije u zadanom rasponu!");
  }

getch();
return 0;
}
 
Odgovor na temu

Srđan Krstić
Srđan Krstić
Princeton, NJ

Član broj: 7526
Poruke: 416
*.Princeton.EDU.

Jabber: srkiboy@elitesecurity.org
ICQ: 193836365
Sajt: www.princeton.edu/~skrsti..


Profil

icon Re: [Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.1415915.11.2005. u 09:18 - pre 224 meseci
dve stvari:
prvo, kad stampas, ti stampas adresu umesto broj. Dakle ne treba ti &Pi, nego samo Pi.
Drugo, problem ti je sto su n i k integeri, pa kad racunas nP i nN kompajler se skroz pokochi, kao sto je vec primeceno ;-). Dzaba ti tackice... Mozes da racunas "postupno", ili sto je najjednostavnije, samo promeni i i k da budu i oni tipa float, i radi savrseno (provereno :))
I HAD A NIGHTMARE
IT ALL STARTED NORMAL
10101010
10110011
THEN ALL OF A SUDDEN
1100102
GAAAAH
_____________________________
www.princeton.edu/~skrstic
www.niwifi.co.sr
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] (2) Napisati program koji izračunava približnu vrijednost broja PI=3.14159

[ Pregleda: 3071 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.