summe mit for schleife ;summenformel;reihe



  • Guten morgen,
    ich hänge als Matheniete an einer for Schleife fest.
    Vielleicht kann mir hier jemand den morgen retten

    Ich versuche mal mein Vorhaben/Frage auszudrücken:


    Σ 1/2n = 1/1 + 1/2 + 1/4 + 1/ 8+ 1/16...... =2
    n=0

    mit einer for schleife berechnen bzw annähern, das programm soll nicht allzuviele iterationen durchführen.
    Als Ausgabe erhalte ich nicht die gewünschte Summe bzw Annäherung.

    #include <stdio.h>
    int main(void)
    {
    
    int i; 
      int zaehler=.1   ; 
    
      double summe;
    
      for(i = 1; i < 5; i *= 2){
       /*HIER Hilfe benötigt*/
    /*meine Idee geht in die Richtung: summe=zaehler/(2*2)*i  */
    /*oder summe=zaehler/1*2*i
    
       printf("Aktueller Wert i:%i\n", i); 
    printf("summe %lf ", summe);}
    return 0;
    }
    


  • Wenn du in einer Schleife aufaddieren willst, kannst du nicht in jedem Durchlauf mit "=" summe den aktuellen Wert zuweisen. Du verlierst doch dann das letzte Ergebnis. Nimm stattdessen "+=".



  • Deine Formel ist falsch. Das n gehört in den Exponenten.

    Σ 1/2n = 1/1 + 1/2 + 1/4 + 1/ 8+ 1/16...... =2
    n=0

    .1 ist 0.1 und das möchtest du nicht haben.

    Du kannst mit x=1.0 anfangen und bei jedem Schleifendurchlauf x halbieren.

    Und summe ist irgendwas mit

    summe = summe + ....
    


  • Danke Euch beiden für die rasche Antwort.
    Den Ansatz des Halbierens hatte ich vorhin schonmal im Kopf aber habe ihn wieder verworfen. Warum auch immer..

    Habe den Code jetzt wie folgt geändert, als Ausgabe erhalte ich nun etliche Zeilen " summe 0.100000 Aktueller Wert i:0"
    Ich komme einfach nicht dahinter wie die "mechanik" hinter der for Funktion aussieht...

    #include <stdio.h> 
    int main(void)
    {
    
    int i;
      int x;
      double summe=.1;  /*.1 oder 0.1? */
    
      for(i = 1; i < 10; i *= 0,5){  /*halbieren*/
    summe+=summe+x*i;
    
       printf("Aktueller Wert i:%i\n", i); 
    printf("summe %lf ", summe);}
    return 0;
    }
    


  • "0.5" statt "0,5"



  • Meine Bemerkungen sind hinter den //

    #include <stdio.h> /* Programm zur Übung 4 */
    int main(void)
    {
    
    int i;
      int x;
      double summe=.1;  /*.1 oder 0.1? */  // Warum 0.1 ? Wie kommst du auf diesen Wert? 
    
      for(i = 1; i < 10; i *= 0,5){  /*halbieren*/ // einen integer zu halbieren ist blöd, wenn man bei 1 anfängt
    // zudem würde i ja immer kleiner werden und kann so nie 10 überschreiten
    
        summe+=summe+x*i;  // summe += summe ist doppeltgemoppelt
        // entweder läßt du das + vorm = weg oder das summe rechts vom =
        printf("Aktueller Wert i:%i\n", i); 
      printf("summe %f ", summe);}  // %f reicht
      return 0;
    }
    

    Du brauchst einen Schleifenzähler i von 1 bis (fast unendlich) (wo ist der eigentlich definiert)
    Deinen Summand x, den du in der Schleife berechnest
    Und eine Summe summe, die das Ergebnis aufnimmt.



  • Soo, jetzt sieht es schon besser aus.
    Die Programmausgabe zeigt:
    summe 1.100000 Aktueller Wert i:0.500000
    summe 2.100000 Aktueller Wert i:0.250000
    summe 3.100000 Aktueller Wert i:0.125000
    summe 4.100000 Aktueller Wert i:0.062500
    .
    .
    Der 1. Wert müsste allerdings 1 sein, die Zwischenergebnisse richtig und eine endgültige Summe ausgegeben werden.
    Und das Programm hört erst nach etwa 44k Zeilen auf

    summe=summe+zaehler+x*i;
    

    ?



  • zweihochvier schrieb:

    Soo, jetzt sieht es schon besser aus.
    Die Programmausgabe zeigt:
    summe 1.100000 Aktueller Wert i:0.500000
    summe 2.100000 Aktueller Wert i:0.250000
    summe 3.100000 Aktueller Wert i:0.125000
    summe 4.100000 Aktueller Wert i:0.062500
    .
    .
    Der 1. Wert müsste allerdings 1 sein,

    Dann berechnest du den Summand an der falschen Stelle.

    zweihochvier schrieb:

    Und das Programm hört erst nach etwa 44k Zeilen auf

    Dann ist deine Abbruchbedingung oder das Inkrement falsch.

    zweihochvier schrieb:

    summe=summe+zaehler+x*i;
    

    ?

    Ist Schrott.
    Das sind vier Variablen. Du brauchst insgesammt aber nur drei und zur Berechnung der Summe nur zwei (eine ist summe selber)

    Wenn du etwas geändert hast, musst du schon den aktuellen Code zeigen.



  • Jetzt krieg ich garnichts mehr auf die Kette. 😮

    Σ 1/2n = 1/1 + 1/2 + 1/4 + 1/ 8+ 1/16...... =2
    n=0
    Nach der ersten Schleife/wiederholung sollte die zwischen summe 1 sein, weil 1/1
    die 2. dann zwischensumme 1,5 da 1/1+1/2
    die 3. dann 1/1 +1/2 +1/4 =1,75
    usw. Der Wert von i ist dann in den wiederholungen 0; 0,5 ; 0,25 ; 0,125 ; 0,075 usw...Oder muss hier das erste i=1 und bei der zwischensumme das erste ergebnis 0?
    Das verpackt in die for anweisung +berechnung der gesamtsumme, die bei so und soviel durchläufen dann bei 1,99999 oder ähnlichem Wert liegt.
    😕
    W

    #include <stdio.h> 
    int main(void) 
    { 
    
    double i; 
    double summe=.1;  
    
      for(i = 1; i < 2; i *= 0,5){  /*statt integer nun double, die zahl soll meiner auffassung nach kleiner werden
        , denn sie wird mit 1 addiert und nähert sich so in immer kleinren schritten der lösung 2? */
       summe+=summe*i;   /*Wird hier 1+0,5 gerechnet?*/
    
        printf("Aktueller Wert i:%lf\n", i); 
      printf("summe %f ", summe);}  
    
      return 0; 
    }
    


  • Du hast immer noch den Müll "0,5". Lies mal die Antworten, bevor du weiterfrickelst.



  • Das läuft doch gar nicht.

    Du fängst immer noch bei 0.1 an
    Du hast immer noch die 0,5 drin (da gehört ein Punkt hin, kein Komma)

    Du berechnest die Summe immer noch falsch.

    a += i ist eine Abkürzung zu a = a+i

    Dein sollte 1, 0.5, 0,25 ... usw sein
    Das brauchst du nur auf die summe addieren. Nichts mit mal.



  • Dein i sollte 1, 0.5, 0,25 ... usw sein
    Das brauchst du nur auf die summe addieren. Nichts mit mal.

    Deine for-Schleife ist immer noch falsch. i wird kleiner. Du kannst mit dem i niemals größer-gleich 2 werden (wenn du bei 1 anfängst), denn erst dann bricht die Schleif ab.

    Was willst du zählen?
    Eine gewisse Anzahl an Durchläufen?
    Bis die summe fast 2 ist?
    Solange i noch zu groß ist?



  • Die Ausgabe ist fast richtig.
    Ich habe an diversen Stellen probiert das Vorzeichen zu ändern und die variable summe als -2 definiert.Aber das hat auch nicht geholfen.
    Die For schleife fängt jetzt mit 2 an, somit sind die i Werte wenigstens richtig, glaube ich.
    Hast du noch eine Idee?

    #include <stdio.h> 
    int main(void) 
    { 
    
    double i=2; /*Anfangswert in For Funktion*/
    
    double summe;  
    
      for(i = 2; i <= 2; i *= 0.5){  
    summe+=i;
    
        printf("Aktueller Wert i:%lf\n", i); 
      printf("summe %f ", summe);}  
    
      return 0; 
    }
    

    Ausgabe:summe 2.000000 Aktueller Wert i:1.000000
    summe 3.000000 Aktueller Wert i:0.500000
    summe 3.500000 Aktueller Wert i:0.250000
    summe 3.750000 Aktueller Wert i:0.125000
    summe 3.875000 Aktueller Wert i:0.062500
    summe 3.937500 Aktueller Wert i:0.031250
    ........



  • zweihochvier schrieb:

    Die For schleife fängt jetzt mit 2 an, somit sind die i Werte wenigstens richtig, glaube ich.

    Das ist das Problem.
    Du musst wissen was du tust.
    Wenn du dir deine Summenformel ansiehst, siehst du, das ss du bei 1/1 anfängst. Und das sind nicht 2.

    zweihochvier schrieb:

    Ausgabe:summe 2.000000 Aktueller Wert i:1.000000

    Das ist auch nicht deine Ausgabe, denn die fängt mit Aktueller Wert in der Zeile darüber an.

    Starte in der Schleife bei i=1 und setzte summe mal vorher auf einen vernünftigen Wert.

    Und vertausche mal die beiden printf -Zeilen


Anmelden zum Antworten