Leibnitz-Reihenberechnung



  • Hi, ich habe eine Frage.

    Und zwar wollte ich wissen wie man in C eine Vorzeichenänderung realisieren kann. Also das beim 1ten Schleifendurchlauf Variable einen positives Vorzeichen hat und im 2ten durchlauf eine negatives Vorzeichen. Im 3ten wieder positives etc. Dies benötige ich, um die Leibnitz-Reihenberechnung durchführen zu können.

    Die Frage erscheint vielleicht für manche als simpel aber mir als C Anfänger nicht.

    Ich danke schonmal.



  • #include <stdio.h>
    
    int main()
    {
      int i;
      int a;
      for(i=0;i<100;i++)
        {
          if(i%2==0)   
            a=1;
          else
            a=1;
    
          printf("%d\n", a);
        }
    }
    

    Erklaerung:

    i%2
    

    gibt Dir den Rest (an), der bei der (Integer-)Teilung von i durch 2 uebig bleibt.
    Beispiel:

    1%2=1
    2%2=0
    3%2=1
    4%2=0
    


  • benutzername schrieb:

    if(i%2==0)   
            a=1;
          else
            a=1;
    

    Einmal müßte a doch auch -1 sein!

    Ansonsten mathematisch: (-1)^n für n aus IN



  • Einmal müßte a doch auch -1 sein!

    Das koennte sein...



  • Hi,

    warum nicht bei jedem Schleifendurchlauf einfach:

    a=-a;
    

    das macht die Sache etwas einfacher.

    grüße Con@n



  • geht nicht weil damit pi berechnet werden kann muss die rechnung folglich aussehen 1-(1/3)+(1/5)-(1/7)....(1/n) je mehr man rechnet desto mehr kommt das ergenis an pi ran.

    Und da die Vorzeichen wechseln hab ich das mir so gedacht (-1*1/(n+2)) wobei das Anfangs n mit 1 definiert ist.

    -----------------------------------------------------------------------------

    Ok ich poste ma die Aufgabe die ich gestellt bekommen habe vielleicht kann man dann sehen was ich meine.

    Der Mathematiker Leibnitz hat herausgefunden, dass man die Kreiszahl Pi auf folgende Art und Weise berechnen kann:

    Pi = (1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 + ...) *4

    Schreiben Sie ein Programm, das nach diesem Verfahren die Zahl Pi berechnet. Da es sich um ein Nährungsverfahren handelt, dessen Ergebnis sich immer weiter an die tatsächliche Zahl Pi annährt, je weiter die Summe berechnet wird, soll das Programm vor der Berechnung fragen, wie weit die Summe gebildet werden soll, damit keine unendliche Reihe entsteht.



  • Spontan würde ich es so machen:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	unsigned int genau;
    	unsigned long double pi=1.0;
    	unsigned int n;
    
    	cout << "Wie genau soll Pi berechnet werden? ";
    	cin >> genau;
    
    	for(n=3; n<=genau; n+=2)
    	{
    		if(n%4==1) pi+=1.0/n;
    		else pi-=1.0/n;
    	}
    	pi*=4;
    	cout.precision(17);
    	cout << pi;
    	return 0;
    }
    


  • Das n+=2 stört mich ein bissl, da für jeden Schleifenlauf zwei Summanden
    behandelt werden und die Folge nicht überall abgebrochen werden kann.
    Vorschlag:

    int vz = 1;
    int pi = 0;
    for(int i = 0; i != genau; ++i)
    {
      pi += vz * (1 / (1 + i*2))
      vz  = -vz;
    }
    

Anmelden zum Antworten