Geometrische Reihen *Grübel*



  • Aufgabenstellung:

    Schreiben Sie ein C++Programm, das den Wert der geometrischen reihen 😕

    1+1/2+1/4+...+1/2[h]n[/h]

    für beliebiges ganzzahliges n bestimmt!

    *Das Programm soll folgenden Bildschirmdialog generieren:

    Geben Sie bitte eine positive ganze Zahl groesser gleich 1 ein!
    5

    Der Wert der geometrischen Reihe beträgt: 1.96875*

    Mein Ansatz:
    #include <iostream>
    #include <math.h>
    using namespace std;
    int main(void)
    {
    int n;
    float Summe;

    cout << "Geben Sie bitte eine positive ganze Zahl groesser gleich 1 ein!\n\n";
    cin >> n;

    Wert= ???
    cout << "\n\nDer Wert der geometrischen Reihe beträgt:"<< Wert << "\n\n";
    return 0;
    }

    **
    Problem:**
    Ich komm mit den geometrischen Reihen nicht zurecht und weiß nicht wie man die in diesem Fall berechnet, dh ich kann also auch keine Formel anwenden. Könnte mir da einer helfen??

    MFG



  • Schleifen?
    Addition?

    Beides Themen die du schon gehabt haben solltest. Und lass mich raten, das ist nicht dein Ansatz sondern die Vorgabe aus der Übung.

    Mir fehlt hier irgendwie die Eigeninitiative.


  • Mod

    Es ist:
    k=0n1ark=a1rn1r\sum_{k=0}^{n-1} ar^k=a\frac{1-r^n}{1-r}

    Und falls LaTex nicht angezeigt werden sollte, da steht:

    Summe_von(k=0)_bis(k=n-1)_über(a*r^k) = a*(1-r^n)/(1-r)



  • Fellhuhn schrieb:

    Schleifen?
    Addition?

    Beides Themen die du schon gehabt haben solltest. Und lass mich raten, das ist nicht dein Ansatz sondern die Vorgabe aus der Übung.

    Mir fehlt hier irgendwie die Eigeninitiative.

    Nein keine Sorge, das is mein eigenes Programm, ich muss noch eine While Schleife schreibn (falls n kleiner 1) und halt die Formel für die geo. Reihen die das Problem darstellt ...

    SeppJ schrieb:

    Es ist:
    k=0n1ark=a1rn1r\sum_{k=0}^{n-1} ar^k=a\frac{1-r^n}{1-r}

    Und falls LaTex nicht angezeigt werden sollte, da steht:

    Summe_von(k=0)_bis(k=n-1)_über(a*r^k) = a*(1-r^n)/(1-r)

    Ist das jetzt die Formel die ich brauch ja?? ^^ Aber was ist k, a, r ??



  • Schreiben Sie ein C++Programm, das den Wert der geometrischen reihen 😕

    1+1/2+1/4+...+1/2[h]n[/h]

    für beliebiges ganzzahliges n bestimmt!

    Ich mein mal wenn n=5 .. dann bedeutet das 1/32

    Bedeutet ja, dass das 4. u. 5. Glied 1/8 u. 1/16 wär was in der Summe auch 1.96875 errgeben würde.

    Die Formel muss ja dann solch eine sein, die anhand n mir die fehlenden Glieder mit summiert oder nicht? Aber hab keine Vorstellung wie die aussehen könnte



  • Schreib dir die Reihen mal für n = 1, n = 2 bis n = 5 auf. Schau dir die Terme an, wie sie sich unterscheiden und es sollte ein leichtes sein.



  • Na ja, es gibt Reihen, welche durch eine Formel schnell ausgedrückt werden.
    Zum Beispiel, wenn du einfach die natürlichen Zahlen bis einschließlich n aufsummieren willst.
    Dann geht das mühsam mittels einer Schleife in C++ so:

    int sum = 0;
    for(int i = 1; i <= n; ++i) {
      sum += i;
    }
    

    oder einfach mittels der Summenformel (ist ganz leicht nachzuvollziehen btw, einfach mal danach googlen):

    int sum  = (n*(n + 1))/2;
    

    Da du ja wohl Schüler / Student o.ä. bist, schlägst du am besten deine Formelsammlung auf und schaust da nach, ob es eine entsprechende Formel gibt, die die Reihe ersetzen kann und ansonsten implementierst du am besten eine Schleife die das für dich aufsummiert.
    Kleiner Tip, die Zählvariable als Exponenten des Nenners nehmen ;-).



  • Danke, ich werd mal rumprobieren 🙂


  • Mod

    SuperTalent schrieb:

    SeppJ schrieb:

    Es ist:
    k=0n1ark=a1rn1r\sum_{k=0}^{n-1} ar^k=a\frac{1-r^n}{1-r}

    Und falls LaTex nicht angezeigt werden sollte, da steht:

    Summe_von(k=0)_bis(k=n-1)_über(a*r^k) = a*(1-r^n)/(1-r)

    Ist das jetzt die Formel die ich brauch ja?? ^^ Aber was ist k, a, r ??

    Ja, diese Formel erlaubt dir das ganze Problem in einem Schritt zu lösen (quasi durch denken statt mit Rechengewalt). k ist nur der Laufindex und kommt auf der rechten Seite nicht mehr vor. k ist das was in dem Codebeispiel von Paul Manns i genannt wurde. a ist ein Faktor mit dem die geometrische Reihe theoretisch noch multipliziert werden könnte, ohne dass die Formel falsch wäre. a ist in deinem konkreten Fall gleich 1. r ist die Basis der geometrischen Reihe, in deinem Fall ist r=1/2, aber die Formel funktioniert auch für alle anderen 0<r<1. Und n ist die Anzahl der Reihenglieder die mitberechnet werden sollen. In deinem Beispiel ganz am Anfang ist n=5.
    Der linke Seite der Formel ist dann eine andere Schreibweise für die geometrische Reihe und die rechte Seite gibt die den Wert den die Reihe dann hat.

    Falls deine Aufgabe das Ziel hat, Programmieren zu lernen, dann mach' es lieber mit Schleifen, dann lernst du mehr. Falls nicht, so zeigt dieses Beispiel, wie man durch Nachdenken (bzw. Recherche) jede Menge Rechenaufwand sparen kann (Rechne mal bei n=1.000.000.000 die Reihe mit Schleifen aus, das dauert ewig. Mit der Formel geht es genauso schnell wie bei n=1.)



  • ok danke, bin zwar noch keinen Schritt weiter aber werd mir die letzten 2 Beiträge nochmals duch den kopf gehen lassen, ich glaub ich muss das mit verschachtelten schleifen machen ne? (while)

    MFG



  • SuperTalent schrieb:

    ok danke, bin zwar noch keinen Schritt weiter aber werd mir die letzten 2 Beiträge nochmals duch den kopf gehen lassen, ich glaub ich muss das mit verschachtelten schleifen machen ne? (while)

    Verschachtelung ist eigentlich nicht notwendig und ich würde eine for-Schleife nehmen, das ganze lässt sich natürlich auch mit einer while-Schleife lösen.



  • Man könnte jetzt auch sich an Mathe in der 8. Klasse (wars mein ich, bin nemmer ganz sicher) erinnern und sich erinnern, dass

    1+1/2+1/4+...+1/2[h]n[/h] = 2 - 1/2[h]n[/h] ist...

    oder in Code

    x = 2 - std::pow(0.5, n);
    

    /edit: btw, ums genau zu nehmen ist die geometrische Reihe der Grenzwert der Summe mit n -> ∞
    Aber wenns schon in der Aufgabenstellung so salopp genahndhabt wird scheint das ja nicht weiter wichtig zu sein.



  • Also ich dachte die Formel für eine geometrische Reihe wäre das hier:
    sn = a1 * (1-q^(n+1))/1-q
    q ist der konstante Faktor(ungleich 1)
    a1 -> Startwert
    (http://de.wikipedia.org/wiki/Geometrische_Reihe)

    In deinem Fall müsste q=1/2 sein und a1 (manchmal auch als a0 bezeichnet)müsste 1 sein.

    Die Summenformel, die von Paul Manns vorgeschlagen wurde, kann man ,glaube ich, nur bei arithmetischen Reihen verwenden.
    (http://de.wikipedia.org/wiki/Arithmetische_Reihe)



  • Ach man.. ich probier das jetzt mit den Schleifen, mal sehen wie weit ich komme, ich meld mich abends nochmal, wie weit ich bin .. 😃



  • eins nach unten bitte 😉



  • So hab mir doch mal die mühe gemacht und nen Flussdiagramm hereingestellt

    http://i10.photobucket.com/albums/a110/Eisi_86/Flussdiagramm.jpg

    dementsprechend hab ich neuprogrammiert.. abebr weiter komm ich nicht!

    #include <iostream>
    #include <math.h>
    using namespace std;
    int main(void)
    {
    int zaehler, n=0;
    double teil_reihe, summe;

    while(n<=1)
    { cout << "Geben Sie bitte eine positive ganze Zahl groesser gleich 1 ein!\n\n";
    cin >> n;
    }
    zaehler=1;
    summe=1;
    teil_reihe=1;

    while(zaehler<=1)
    { teil_reihe=teil_reihe/2;
    summe=summe+teil_reihe;
    zaehler=zaehler+1;
    }

    cout << "\n\nDer Wert der geometrischen Reihe beträgt:"<< summe << "\n\n";
    return 0;
    }



  • zaehler=1;
    
    while(zaehler<=1)
    {
        ...
        zaehler=zaehler+1;
    }
    

    den Teil würde ich nochmal überdenken.



  • hmm ich komm nicht drauf.. -.-



  • In deiner zweiten while -Schleife deines Codes hast du

    while(zaehler<=1)
    

    als Bedingung geschrieben, allerdings heißt es an dieser Stelle in deinem Flußdiagramm: zaehler <= n? 😉



  • zudem kannst du

    zähler = zähler +1;
    

    durch

    zähler++;
    

    bei int variable -1 dementsprechend

    variable--
    

    Ich würde es an deiner Stelle mit der Summenformel versuchen

    int n;
    ....
    cin >> n;
    ...
    float summe= 1 * (0,5)^n;
    
    //oder
    
    double summe = 1 .....
    

    bin mir relativ sicher (habe mathe orientierungskurs auf gymnasium 😉 )


Anmelden zum Antworten