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 25w=(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 istalso 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 }
-
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.