addition der geraden zahlen bis x kleines problem
-
tachchen
ich hab ein kleines proggi geschrieben und es funtzt noch nicht so ganz#include <stdio.h>
void main ()
{
float maximum, popel, summe;printf("Bitte die maximale Zahl eingeben:");
scanf ("%f", &maximum);for (popel=0;popel=maximum;popel*=2)
{
summe=summe + popel;
printf("%.2f", summe);
}getchar();
}Es soll alles geraden zahlen bis x addieren es gibt aber leider nur Zahlenregen aus
Könnt ihr helfen
thx
-
1. Codetags verwenden
2. int main(void)
3. summe wird nicht initialisiert
4. 0*2 gibt 0
edit: 5. = ist eine Zuweisung, du willst aber eher ==. Was bei Fließkommazahlen aber auch in die Hose gehen kann, also noch besser <=.
-
Hi
schau dir deine deine for-Schleife nochmals genauer an
Und wieso nimmst du "popel" immer mal 2 wenn du immer nur alle gerade Zahlen addieren möchtest?
-
ich ja alles geraden habne will
wie soll das denn mit addition ghen ?!
-
ich hab ein bisschne verändert :
#include <stdio.h>
int main (void)
{
float maximum, popel, summe;printf("Bitte die maximale Zahl eingeben:");
scanf ("%f", &maximum);for (popel=0;popel=maximum;popel*=2)
{
summe==summe + popel;
printf("%.2f", summe);
}getchar();
}wenn ich das prooggi nun audfähre gibt er immer 000.000.000.000.000.000.000.000
aus
-
1. Codetags verwenden
2. summe wird nicht initialisiert
3. 0*2 gibt 0
4. Jetzt hast du den Zuweisungsoperator an der falschen Stelle ersetzt. Lies diese Operatoren nochmal im Buch nach.
-
kannst du bitte 1.-4. näher erläutern.
das 2*0=0 ist doch auch gewollt
-
zu 1. http://www.c-plusplus.net/forum/viewtopic.php?t=129036
zu 2. Der Variablen summe muss vor ihrer Verwendung ein definierter Wert zugewiesen werden, so wie es jetzt ist, kann summe jeden (zufälligen) Wert haben
zu 3. So wie du das machst bleibt popel zur gesamten Laufzeit 0
zu 4. Lies diese Operatoren nochmal im Buch nach.
-
nochmal ich schrieb:
for (popel=0;popel=maximum;popel*=2)
{
summe==summe + popel;
printf("%.2f", summe);
}wieso uebergibst du bei jedem schleifendurchlauf den wert von maximum an popel?
und wieso vergleichst du nun summe mit summe + popel??
wenn du jede gerade zahl bis zum eingelesenen wert maximum addieren möchtest, wieso nimmst du dann bei jedem schleifendurchlauf popel(bekommt immer wert von maximum zugewiesen) mal 2?
vielleicht meinst du ja popel+=2? (schau dir dazu aber lieber mal den '%' operator an ;))
und wie TactX schon sagte: bitte codetags verwenden und "summe" einen wert zuweisen.ps. gibt dein compiler keine warnmeldung bei deinem code aus??
-
nein er gibt keinerlei fehlermeldungen aus
was sind codetags ?
wie groß muss summe denn sein ?
kannst du das bitte mal zum code hinzufügen
wi esoll ich denn sonst popel(kp wie ich drauf kam) und maximum in zusammenhang bringen ?
thx
-
Was haltet ihr von:
#include <stdio.h> int main () { int summe,maximum; printf("Bitte die maximale Zahl eingeben:"); scanf ("%d", &maximum); summe = maximum * (maximum - 1); printf("%d", summe); getchar(); }
?
Oder eure (Problem)Lösung
int main (void) { int /* Ich nehme mir die Freiheit "int" anstatt "float" zu nehmen */,maximum, summe = 0 /* Initialisierung berichtigt */ ; for (int popel=0; popel <= maximum /* Zuweisung(=) <> Vergleich(==) berichtigt; zur sicherheit ">=" verwendet */ ;popel+=2 /* Multipikation berichtigt (*2 erzeugt z.B. 2,4,8,16,32; +2 erzeugt gerade Zahlen */) { summe += popel; /* entspricht summe = summe + popel; Zuweisung berichtigt */ printf("%d", summe); /* Was wolltest su mit zwei Nachkommastellen? */ } getchar(); }
TactX schrieb:
zu 2. Der Variablen summe muss vor ihrer Verwendung ein definierter Wert zugewiesen werden, so wie es jetzt ist, kann summe jeden (zufälligen) Wert haben
Komisch - bei mir nicht! (Es werden bei mir immer die gleichen Werte angezeigt {auch bei jedem Starten}!!!):
#include "stdafx.h" int main(int argc, char* argv[]) { for(int c = 0; c < 100; c++) { float t; int a; double z; printf("%d:\t%f\t%d\t%f\t\n",c,t,a,z); } getchar(); }
-
Rhombicosidodecahedron schrieb:
TactX schrieb:
zu 2. Der Variablen summe muss vor ihrer Verwendung ein definierter Wert zugewiesen werden, so wie es jetzt ist, kann summe jeden (zufälligen) Wert haben
Komisch - bei mir nicht! (Es werden bei mir immer die gleichen Werte angezeigt {auch bei jedem Starten}!!!)
Willkommen in der Welt des undefinierten Verhaltens. Lokale Variablen der Speicherklasse auto werden nicht automatisch initialisiert. Wenn das bei dir trotzdem der Fall sein sollte, ist das Glück (oder auch Pech, je nachdem wie man zu "crash early" steht).
-
wenn ich das programm so:
#include <stdio.h> int main (void) { int maximum, summe = 0, popel = 0; printf("Bitte die maximale Zahl eingeben:"); scanf ("%f", &maximum); for ( popel=0;popel>=maximum;popel+=2) { summe += popel; printf("%i", summe ); } getchar(); }
ausführe wird nichts angezeigt d.h. nur bitte maximalen wert eingeben und dann meine eingegeben zahl
das wars
programm ende
wo ist da bitteschön der fehler ich blick nicht durch !happy xmas !!
-
bananenbieger schrieb:
wenn ich das programm so:
#include <stdio.h> int main (void) { int maximum, summe = 0, popel = 0; printf("Bitte die maximale Zahl eingeben:"); scanf ("%f", &maximum); for ( popel=0;popel>=maximum;popel+=2) { summe += popel; printf("%i", summe ); } getchar(); }
ausführe wird nichts angezeigt d.h. nur bitte maximalen wert eingeben und dann meine eingegeben zahl
das wars
programm ende
wo ist da bitteschön der fehler ich blick nicht durch !happy xmas !!
Mein Fehler! Das Zuweisungsding (>=) war falsch (Richtig: <=)
Mit freundlichen Grüßen und frohe Weihnachten wünschend
RhombicosidodecahedronP.S: (1) Was hälst du von meinen obrigen Code?
P.S: (2) Fehler können bei jeden vorkommen... (sollten aber nicht)
-
DANke jetzt geht es
alles gute
DANKESCHÖN
-
bananenbieger schrieb:
... int maximum, summe = 0, popel = 0; printf("Bitte die maximale Zahl eingeben:"); scanf ("%f", &maximum); ...
Wieso liest du in maximum mit %f ein? maximum ist doch ein Integer. Bitte %d benutzen.