[C] Obliczanie pi ze wzoru

adir7
Użytkownik
Użytkownik
Posty: 56
Rejestracja: 13 sty 2009, o 20:16
Podziękował: 21 razy

[C] Obliczanie pi ze wzoru

Post autor: adir7 »

Hej jestem kompletnym laikiem i dopiero zaczynam przygodę z programowaniem na studiach. Nie potrafię dokończyć zadania z wykorzystanie pętli while lub do...while. Poniżej zamieszczam treść zadania i kod, który sam zrobiłem i już dalej nie wiem jak mam iść. Proszę tylko o jasne tłumaczenie, bo serio jestem początkujący.

Zadanie: Oblicz z dokładnością \(\displaystyle{ \epsilon= 10^{-10} }\) wartość stałej \(\displaystyle{ \pi }\) korzystając ze wzoru: \(\displaystyle{ \frac{ \pi^{2}}{12}=1− \frac{1}{2^{2}}+ \frac{1}{3^{2}} − \frac{1}{4^{2}} +⋯}\)
Sumowanie należy zakończyć, gdy bezwzględna wartość z kolejnego składnika sumy będzie
mniejsza od zadanej dokładności ɛ. Zastosować typ double.

Tutaj mój kod:

Kod: Zaznacz cały

    
        double n1,pi,e_max,y;
            e_max=pow(10,-10);
            n1=1;
            y=(1/(pow(n1,2)));
            printf("Program obliczy z dokladnoscia 10^-10 wartosc stalej pi korzystajac ze wzoru: \n(pi^2)/12=1-1/(2^2)+1/(3^2)-1/(4^2)+...\nSumowanie 
            zostanie zakonczone, gdy bezwzgledna wartosc z kolejnego skladnika sumy bedzie mniejsza od zadanej dokladnosci.");
            while(e_max>=(1/pow(n1,2)))
            {
                n1=n1+1;
                y=y+((1/(pow(n1,2)))*(-1));
                n1=n1+1;
                y=y+(1/(pow(n1,2)));

            }
            pi=sqrt(y*12);
            printf("\nPI jest rowne: %.10f",pi);
Ostatnio zmieniony 21 paź 2019, o 07:16 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Ponury123
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 24 razy

Re: [C] Obliczanie pi ze wzoru

Post autor: Ponury123 »

pętla while działa dopóki spełniony jest warunek, od kiedy \(\displaystyle{ \frac{1}{10000000000}}\) jest większe równe \(\displaystyle{ \frac{1}{4}}\).
drugi błąd: skoro zwiększasz n w pętli i wykonujesz jeszcze jakieś obliczenia przy jej pomocy to może się zdarzyć(zdarzy się), że warunek w pętli nie będzie spełniony, a mimo to operacje się wykonają, dodaj funkcję warunkową. Pętle można przerwać wywołując break;

Btw. z treści wynika, że \(\displaystyle{ n_{1} }\) wynosi 2, a nie 1.
ODPOWIEDZ