Summebildung ungerader Zahlen



  • Hallo liebe Community,

    ich hätte nur schnell eine Frage die ihr Programmierprofis mit Sicherheit schnell beantworten könnnt.

    Und zwar möchte ich ein Programm schreiben das ungerade Zahlen aufaddiert!
    Was ich bisher geschrieben habe sieht so aus:

    /*Aufgabe 17*/

    #include <stdio.h>
    main() {

    int x,anzahl,summe=0;

    for(x=1; x<=anzahl; x=x+1){
    printf("Bitte geben Sie die Zahl ein bis wieviel Sie die ungeraden Zahlen zusammengerechnet haben möchten: ");
    scanf("%i",&anzahl);
    if(x%2)
    continue;
    summe=summe+x;
    }
    printf
    ("\n\nDie Summe der ungeraden Zahlen betraegt %i" ,summe);
    }

    Würde mich über jeden eurer Tips freuen

    MFG
    Vo86



  • wie war die frage noch gleich



  • Ich möchte ein Programm schreiben das alle ungerade Zahlen ,bis zu einer Zahl, die der User eingeben kann, aufaddiert.



  • anzahl vor der schleifer einlesen.
    continue wegmachen.

    dann bitte nochmal zeigen, am besten mit code-tags.

    hmm. mir fällt da eine alternative ein.
    anzahl summe
    1 1
    2 1
    3 4
    4 4
    5 9
    6 9
    7 16
    8 16
    9 25

    w=(anzahl+1)/2
    summe=w*w;
    


  • Super, vielen Dank Volkard. Ich hab nun das continue gelöscht und die Eingabe vor die Schleife gezogen und es hat einwandfrei funktioniert!! Warum man die Eingabe vor die Schleife ziehen muss ist mir verständlich, das war ein dummer Fehler. Aber das mit der continuefunktion verstehe ich noch nicht ganz! Wenn ich nun folgende Anweisung habe:

    for(x=1; x<=anzahl; x=x+1){
    if((x%2))
    summe=summe+x;
    }

    bedeutet if((x%2)) dann, "wenn x durch 2 teilbar ist wieder von vorne anfangen ohne mit summe=summe+x fortzufahren"?



  • Ach und hier ist nochmals das komplette Programm:

    /*Aufgabe 17*/

    #include <stdio.h>
    main() {

    int x,anzahl,summe=0;

    printf("Bitte geben Sie die Zahl ein bis wieviel Sie die ungeraden Zahlen zusammengerechnet haben möchten: ");
    scanf("%i",&anzahl);

    for(x=1; x<=anzahl; x=x+1){
    if((x%2))
    summe=summe+x;
    }
    printf ("\n\nDie Summe der ungeraden Zahlen betraegt %i" ,summe);
    }



  • Vo86 schrieb:

    bedeutet if((x%2)) dann, "wenn x durch 2 teilbar ist wieder von vorne anfangen ohne mit summe=summe+x fortzufahren"?

    Hier ist der Knackpunkt.
    if((x%2))
    ist
    if((x%2)!=0)
    ist
    if((x%2)!=0)//wenn x nicht durch 2 teilbar ist

    also entweder

    for(
    {
       if(x%2)//wenn x ungerade ist
          summe+=x;//aufsummieren
    }
    

    oder

    for(
    {
       if(x%2==0)//wenn x gerade ist
          continue;//überspringen
       summe+=x;//ansonsten aufsummieren
    }
    

  • Mod

    Benutz mal Codetags (unter dem Editfenster, unter dem 😡 -Smiley)! Dann sieht man auch eine eventuelle Einrückung.

    Mit (richtiger) Einrückung wird deutlich, was passiert:

    for(x=1; x<=anzahl; x=x+1)
    {
      if(x%2)        // Falls x%2 nicht 0 ist...
        continue;    // ...neuer Schleifendurchlauf
      summe=summe+x; // Diese Zeile hat mit dem if überhaupt nichts mehr zu tun
    }                // In dieser Zeile geht's natürlich auch zu einem neuen Durchlauf
    

    vs.

    for(x=1; x<=anzahl; x=x+1)
    {
      if(x%2)          // Falls x%2 nicht 0 ist...
        summe=summe+x; // ...addiere x zur Summe
    }                  // Danach gibt's einen neuen Durchlauf
    

    Und damit das auch klar ist: x%2 ist gleich 0, genau dann wenn x eine gerade Zahl ist.

    edit: Zu langsam. Das passiert mir immer, wenn volkard aktiv ist 🙂



  • Ah ok ok nun habe ich das ganze verstanden, ich bin etwas durcheinander gekommen was das in der Klammer aussagt. Vielen Dank für deine Hilfe, hast mir wirklich weitergeholfen..



  • Du darfst auch im Schleifenkopf x=x+2 schreiben.
    Wenn du mit einer ungeraden Zahl anfägst (was 1 ja ist), bekommst du nur ungerade Zahlen.

    Nebenbei gibt es den kleinen Gauß auch nur für ungerade Zahlen. Ganz ohne Schleife.


Log in to reply