Wiedermal ne Summe berechnen



  • Hallo ich hab schon wieder nen Prob mit nem Programm in C welches folgende Summe berechnen soll:

    (1/(2*3*4)) + (1/(4*5*6)) + ((1/6*7*8))+ ... + (1/(198*199*200))

    mein versuch lautet:

    #include <stdio.h>

    int main (void)

    {

    float x;

    float ergeb = 0;

    for (x = 1; x <= 198 ; x--)

    ergeb += ( 1/ ((x+1)(x+2)(x+3)));

    printf("Die Summe lautet: %f\n", ergeb);

    return 0;

    }

    Aber die Konsole bleibt immer leer :((( Das kann doch nur ein dummer Fehler in der for Klammer sein, oder?



  • ja da muss ja x++ stehen nicht x--!



  • x++ reicht nicht oder 😉



  • nee reicht leider nicht... hat jemand ne andere idee?

    habs noch so versucht:

    #include <stdio.h>

    int main (void)

    {

    float x;

    float ergeb = 0;

    for (x = 2; x <= 5 ; x=x)

    ergeb += ( 1/ ((x)(x+1)(x+2)));

    printf("Die Summe lautet: %f\n", ergeb);

    return 0;

    }

    Leider der gleiche Misserfolg



  • #include <stdio.h>
    
    int main (void)
    {
       float x;
       float ergeb = 0;
    
       for (x = 2; x <= 5 ; x++) // Hier war der Fehler
          ergeb += ( 1/ ((x)*(x+1)*(x+2)));
    
       printf("Die Summe lautet: %f\n", ergeb);
       return 0;
    }
    

    Probiers doch mal so.

    Achja und des nächste mal benutzte doch bitte die "C/C++"- bzw "Code"-Taste fürs einfügen von Code.

    Mfg Marco



  • Hi,

    in der for schleife habe ich die 5 bei der Bedingung eingesetzt um das programm zu testen. aber auch mit deine version liefert es mir doch ein falsches ergebnis



  • Du musst mal verstehen, was du hier für einen Unsinn versuchst (sorry 🙂 ). Die Funktionsweise einer for-Schleife ist dir scheinbar noch nicht ganz klar:

    Ringo-Riese schrieb:

    for (x = 1; x <= 198 ; x--)
    

    Du sagst hier:

    - x wird beim ersten Schleifendurchlauf auf 1 gesetzt.
    - Die Schleife läuft solange, bis x<=198 nicht mehr erfüllt ist
    - von x wird in jedem Durchlauf 1 abgezogen

    Das heißt im Klartext, x ist zuerst 1, dann 0, dann -1, dann -2 usw. Die Bedingung x<=198 ist also "immer" erfüllt (bzw. irgendwann wird x vermutlich 2^32...).

    Abgesehen davon muss x doch kein float sein. Mach die Division lieber mit 1. oder 1.f.

    Ringo-Riese schrieb:

    for (x = 2; x <= 5 ; x=x)
    

    Hier sagst du "x=x". Du weist x also seinen eigenen Wert zu (d.h., der Wert verändert sich von Durchlauf zu Durchlauf gar nicht). Somit bleibt x immer 2 und ist auch immer <=5. Endlosschleife...



  • Super geil!!!

    Vielen Danbk für die Mühe und die wichtigen Denkanstöße-es funzt:

    [cpp]#include <stdio.h>

    int main (void)
    {
    float x;
    float ergeb = 0;

    for (x = 2.f; x < 199.f; x+=2.f)

    ergeb += ( 1.f/ ((x)(x+1.f)(x+2.f)));

    printf("Die Summe lautet: %f\n", ergeb);
    return 0;
    }

    Wie genau funzt das mit dem C/C++ Knopf?
    Wie ihr seht bin ich nicht der Checker auf Computer Ebene 😞

    Was genau bedeutet ".f"?



  • Ringo-Riese schrieb:

    Was genau bedeutet ".f"?

    das ist 'ne eine float-konstante. für 1 kannste auch schreiben 1.0.f (ich wusste gar nicht, dass man die 0 auch weglassen kann).
    🙂



  • +fricky schrieb:

    1.0.f

    edit: 1.0f



  • +fricky schrieb:

    ich wusste gar nicht, dass man die 0 auch weglassen kann

    Klar, kannst du. Genau wie du ja auch .5 notieren kannst.



  • _matze schrieb:

    Klar, kannst du. Genau wie du ja auch .5 notieren kannst.

    so rum kannte ich's schon. aber egal, ich schreibe floats (wenn ich sie verwende, was sehr selten vorkommt) immer aus.
    `float a = 1.0f; // statt 1.f

    float b = 0.012f; // statt .012f

    `
    ^^finds einfach besser lesbar.
    🙂



  • für ein weiteres programm zu summenberechnung hab ich eine hoffentlich einfache frage:

    ist es möglich in den exponenten eine variable zu stecken die sich mit jedem summanden inkrementiert? ein beispiel zu dem was ich meine:

    (2x) + (3x^2) + (4x^3) ...



  • Ringo-Riese schrieb:

    für ein weiteres programm zu summenberechnung hab ich eine hoffentlich einfache frage:

    ist es möglich in den exponenten eine variable zu stecken die sich mit jedem summanden inkrementiert? ein beispiel zu dem was ich meine:

    (2x) + (3x^2) + (4x^3) ...

    Ja, aber nicht mit "^" (das ist bitweises XOR). Dafür kannst die Funktion pow() benutzen. Und bedenke, dass du nicht in einem Ausdruck mehrfach dieselbe Variable per "++" inkrementieren kannst (es ist undefiniert, welcher Teilausdruck zuerst ausgewertet wird). Du musst das dann in eine Schleife packen.



  • Tut mir echt leid aber ich komm mit der Info nicht weiter: Wir sollen die Summe bis zum 15 Term berechnen.
    x = 0,4

    Meine Idee war folgende:

    #include <stdio.h>
    
    int main (void)
    
    {
    
    	float ergebnis = 0;
    	float a,x;
    
    	for(a, x = 1.f ; a <= 15.f; a++ && x*=0.4.f )
    
    		ergebnis += (a * x);
    
    	printf("Summe ist gleich = %f\n", ergebnis);
    
    	return 0;
    
    }
    

    Der Compiler meckert:

    "Der linke Teil von '.f' muss eine Struktur/Union sein"

    Kann mir jemand bitte einen entscheidenen Tipp geben!?
    Danach geb ich auch erstmal Ruhe 😕



  • Das ist der Fehler:

    0.4.f
    

    Das muss so aussehen:

    0.4f
    

    Das "f" (nicht ".f"!) bedeutet, dass du aus einer double-Konstante eine float-Konstante machen willst. Du versuchst das mit 0.4., dabei willst du nur die Zahl 0.4 haben. Lässt du die Nachkommastelle(n) weg, dann musst du tatsächlich 0.f notieren, aber wenn es Nachkommastellen gibt, ist der zweite Punkt natürlich überflüssig.



  • Ergänzung:

    Deine for-Anweisung muss so aussehen:

    for(a = 1.f, x = 1.0f ; a <= 15.f; a++, x*=0.4f )
    

    Bitte sieh dir mal genau an, was jetzt anders ist. So wie du da einige Sachen versucht hast, kann man es leider nicht machen.



  • wenn ich das aber dann so umschreibe:

    for(a, x = 1.0f ; a <= 15.0f; a++ && x*=0.4f )
    

    streikt der compiler mit:

    "'=' : Konvertierung von 'const float ' in 'int ', moeglicher Datenverlust"
    und
    "'
    =' : Linker Operand muss ein L-Wert sein"



  • Sieh mal ein Posting über dir! 😉



  • upps zeitüberschneidung 😃

    aber super jetzt hab ich es geschnallt!!!!!!

    kein "&&" verwenden sondern ein "," !!!!!!!!

    Eigentlich ist es ja ganz einfach aber als absouluter anfänger-sieht man sowas nicht.

    Ich dank dir Matze (hehe mein namensvetter)!


Log in to reply