Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Obliczanie sumy (PI) wzór Leibniza na liczbę Pi.

Ostatnio zmodyfikowano 2014-11-07 01:08
Autor Wiadomość
lvcky
Temat założony przez niniejszego użytkownika
[C++] Obliczanie sumy (PI) wzór Leibniza na liczbę Pi.
» 2014-11-06 23:21:00
Napisać program obliczający:
(suma od n=0 do nieskończoności) z (-1)^n/2n+1=1-1/3+1/5-1/7+...
Jest to wzór Leibniza na liczbę Pi.

dla wczytanego wcześniej n. Wynik pomnożyć przez 4 i wyświetlić. Jaka to liczba?


Kod który napisałem

 
C/C++
int n;
float wynik = 0;
cout << "Podaj liczbe " << endl;
cin >> n;

for( int i = 0; i <= n; i++ )
{
    wynik +=( pow( - 1.0, i ) ) /( 2 * i + 1 );
   
   
    cout << wynik * 4 << endl;
}


Nie wiem co jest nie tak ale program powinien wyswietlać liczby rosnąco az jak najblizej liczby PI, u mnie nie wyświetla ich w poprawnej kolejnosci.
Proszę o pomoc.
P-120106
Monika90
» 2014-11-07 00:04:20
Dlaczego uważasz że powinien rosnąco?
P-120107
Atexor
» 2014-11-07 00:08:27
suma=o

Dla i=0 wynik to 1
suma=suma+1=1

Dla i=1 wynik to -1/3
suma=1-1/3=2/3 ~0,666

Dla i=2 wynik to 1/5
suma=2/3+1/5 ~0,86666

Dla i=3 wynik to -0,1429
suma=0,8666-0,1429=0.7237


Co się zgadza z Twoim programem. Zauważ, że podnosisz minus jeden do potęgi, i przez to raz otrzymasz liczbę dodatnią, raz ujemną.
P-120108
lvcky
Temat założony przez niniejszego użytkownika
» 2014-11-07 00:08:39
Skoro w pętli zaczynam od zera i każe mu zwiększać "i" o jedno w góre to tak to logicznie rozumiem.

Dla np i=5 pojawiaja sie w konsoli liczby:
4
2,66667
3,46667
2,89524
3,33968
2,97605
P-120109
Atexor
» 2014-11-07 00:24:09
Wybacz, zapomniałem dopisać - usuń mnożenie w wyświetlaniu wyniku. Najlepiej sam ręcznie (z kalkulatorem) przemnóż pierwszych wartości tego działania i zobaczysz regułę, że będziesz naprzemiennie "dodawał i odejmował", bo niektóre liczby będą ujemne dzięki podnoszeniu -1 do potęg nieparzystych.
P-120110
lvcky
Temat założony przez niniejszego użytkownika
» 2014-11-07 00:29:35
Chyba sie nie rozumiemy.
Jest to wzór Leibniza na PI z którego wynika ze zeby to Pi uzyskac musze wynik pomnozyc przez 4.
P-120111
Atexor
» 2014-11-07 01:08:40
Masz rację, niezbyt...

Może spróbuję tak:

Załóżmy, że wykonujesz pewne matematyczne operacje na zmiennej liczba (dla i=0):
Liczba=( pow( - 1.0, i ) ) /( 2 * i + 1 );
Dla i=0 wynik jaki otrzymasz to 1, bo w liczniku (-1)^0 to 1, zaś w mianowniku 2*0+1=1. Jeden przez jeden to 1.

Następnie za pomocą tej linijki:
    cout << wynik * 4 << endl;

Wywołujesz strumień cout wyświetlający Twoją LICZBĘ, ale pomnożoną cztery.

Te przemnożenie jest tylko "podczas wyświetlania" i nie ma wpływu na liczbę. Nadal wynosi ona 1.

Następnie (kolejna iteracja pętli) wykonujesz znowu to samo, ale i=1, więc wynik jest inny.
Jaki?

Licznik: (-1)^1= -1
Mianownik: 2*1+1=3
Liczba= -1/3




Ale: w Twoim programie jest sumowanie tych liczb z poszczególnych obiegów pętli:
liczba+=<operacje_matematyczne>

Tak więc:
1 + (-1/3)=0,666666

I tak dalej i tak dalej. Prościej nie potrafię wyjaśnić.



Trochę przekształciłem Twój kod. Skompiluj go i zobacz na ekranie co Ci wypisało.

C/C++
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int n = 0;
    float wynik = 0, liczba = 0;
    cout << "Podaj liczbe " << endl;
    cin >> n;
   
    for( int i = 0; i <= n; i++ )
    {
        liczba =( pow( - 1.0, i ) ) /( 2 * i + 1 );
        cout << "Dla i= " << i << "   liczba=" << liczba << endl;;
        cout << "Dla i=" << i << "  wynik+liczba   " << wynik << " + " << liczba;
        wynik += liczba;
        cout << " = " << wynik << endl << endl;
       
    }
    system( "PAUSE" );
    return 0;
}
P-120112
« 1 »
  Strona 1 z 1