C++ Countdown-Problem

Teddymaddy

Lieutenant
Registriert
Apr. 2009
Beiträge
630
Hallöchen.
Wahrscheinlich haben schon viele wegen einem solchen Projekt hier Hilfe gesucht. nun gesell ich mich auch zu diesen Leuten :D

Ich möchte mir mit if-bedingungen und for-schleifen einen countdown basteln, der bei der Hälfte des eingegebenen Wertes aufhört, und das Ergebnis präsentiert. falls dieses Ergebnis grade ist, passiert nichts. ansonsten soll es eine meldung heirzu ausgeben.

Hier nun erstmal mein Code:
Code:
//Programm zum starten eines Countdowns
#include <iostream>
using namespace std;
int main ()

{
//Variablen
	int EingegebeneZahl= 0;
	int Endwert;
// Zahl eingeben, von der aus der Countdown starten soll
	cout << "Countdown-Programm" << endl;
	cout << "Gib eine Zahl an: " << endl;
	cin >> EingegebeneZahl;
	cout << "\n\n";

	//Null soll abgefangen werden
	if (EingegebeneZahl <= 0)
		cout << "Du kannst keine Null, oder kleinere Werte eingeben!" << endl;

	//Bei richtiger Eingabe die for-Schleife aktivieren
	else
	{
		for (int i=0; i = EingegebeneZahl; i--)
		{	// Die Zahl soll Rückwärts runtergezählt werden
			cout << "Zahl: " << i-1 << endl;

			Endwert = 1 - EingegebeneZahl;
				
		}	// Der Countdown zähler soll bei der Hälfte stoppen und einen Text ausgeben		
		if (Endwert == EingegebeneZahl / 2)
					cout << "Dies ist das Ergebnis: " << Endwert << endl;
	}
	
	if ( EingegebeneZahl%2 == 0)	// prüfen, ob die Zahl grade oder ungrade ist, und eine entsprechende Antwort ausgeben
		cout << "Das Endergebnis ist eine gerade Zahl" << endl;
	else
		cout << "Das Endergebnis ist eine ungerade Zahl" << endl;

return 0;
}

mein Problem ist nun, dass der Zähler, wenn ich zb 5 eingebe, die ganze Zeit 4 runterrattert, und nie mehr aufhört.
aber er soll ja eigentlich bis zur hälfte von "EingegebeneZahl" runterzählen.
Ich habe den Code schon an vielen stellen verändert, da auch die letzten beiden bedingungen, die vorher noch in als if-verschachtelung zum for-block gehörten, mit ausgegeben wurden.
so wird aber nun immer "Zahl (x)" ausgegeben.

Hoffe ihr könnt mir helfen :(
 
Code:
for (int i=0; i = EingegebeneZahl; i--)

Das ist falsch.
Müsste eher so sein:

Code:
for (int i = EingegebeneZahl; i = 0; i--)
 
hab ich ausprobiert. aber nachdem ich eine zahl eingegeben habe, spuckt er mir aus, dass Endwert benutz wird, ohne initializiert worden zu sein.
dabei ist Endwert doch als EingegebeneZahl - 1 deklariert Oo
 
Der Code von mxForce hat einen klitzekleinen Bug :)

Es muß heißen:
Code:
for (int i = EingegebeneZahl; i == 0; i--)

Beachte das doppelte Gleichheitszeichen in "i == 0". Sonst wird an dieser Stelle nämlich i auf 0 gesetzt, was ja nicht in deinem Sinne ist ;)
 
njau das gibt sinn, wenn man vorher i = EingegebeneZahl setzt. anderherum hätte ich das ja nicht schrieben können. da war ich erst am überlegen, ob ich i > 0 setze, aber das ginge ja auch nciht :D. so gibts aufjedenfall schon mal viel mehr sinn danke =)...
aber das problem mit endwert bleibt :(....das zeigt mir immerhin, dass er aus der schleife rauskommt^^

oder muss ich Endwert wegmachen und i nehmen?...damit er die schleife mit dem neuen i-Wert weiterführen kann?
in diesem fall könnte ich danach dann aber nicht mer i benutzen, um das programm bei der hälfte der eingegebenenzahl zu stoppen und eine antwort auszugeben :(
 
Zuletzt bearbeitet:
Ja. Du schreibst in der Schleife:

Code:
Endwert = 1 - EingegebeneZahl;

Da sich EingegebeneZahl nicht ändert,ist also auch Endwert in jedem Schleifendurchlauf gleich. Wenn du stattdessen schreibst:

Code:
Endwert = i - 1;

sollte ungefähr das herauskommen, was Du willst.


Ergänzung: Da du die Schleife ja stoppen willst, wenn EingegebeneZahl/2 erreicht ist, mußt du auch die if-Abfrage in diese Schleife hineinziehen. Sonst wird diese Abfrage erst erreicht, wenn i == 0 ist(und damit Endwert == -1). Die Schleife beenden kannst du dann mit break.

Ach ja, und die Abbruchbedingung der for-Schleife war auch nicht richtig (warum ist mir das nicht sofort aufgefallen :headdesk: ). Dort muß die Bedingung stehen, bei deren Nichteintreten die Schleife abgebrochen wird. Also alles in allem:

Code:
for (int i = EingegebeneZahl; i > 0; i--)
{	// Die Zahl soll Rückwärts runtergezählt werden
	cout << "Zahl: " << i-1 << endl;

	Endwert = i - 1;
	
	// Der Countdown zähler soll bei der Hälfte stoppen und einen Text ausgeben		
	if (Endwert == EingegebeneZahl / 2)
	{
		cout << "Dies ist das Ergebnis: " << Endwert << endl;
		break;
	}
}
 
Zuletzt bearbeitet:
Wenn die Bedingung, dass die Schleife weiterläuft "i == 0" lautet, bricht sie doch sofort ab :E
 
Jo, hab's grad auch gesehen :D
 
so funktioniert das Programm...
das einzige Problem, dass ich nun habe ist, dass er die Zahlen nicht ausgibt, die runtergezähle werden.
dass er also wie folgt errechnet :
Zahl eingeben: 8
Das Ergebnis ist eine ganze Zahl

obwohl er eigentlich 7, 6, 5, 4 runterzählen sollte...aber dazu mach ich mir erstmal selbst gedanken...

aufjedenfall vielen dank =)
 
Wenn er nicht runterzählt, dann wird die Schleife nicht durchlaufen. Da müßtest du die Angaben in der for-Anweisung noch mal überprüfen.

Im übrigen denke ich, daß du am Ende statt

Code:
if ( EingegebeneZahl%2 == 0)

wohl eher

Code:
if ( Endwert%2 == 0)

haben möchtest, oder?
 
nun ich möchte ja, dass er guckt, ob das ergebnis, also die hälfte des eingegebenen Wertes, eine ganze Zahl, oder eine kommastelle hat. (sry für den dnekfehler im code im ersten post. ich hab das bei mir schon geändert :D)
aber endwert ist doch dann doch shcon die hälfte dieses wertes. zumindest war es so gedacht. also muss ich doch die eingegebene Zahl durch 2 teilen, oder?^^
 
Der Modulo-Operator teilt ja nicht durch zwei. :/
 
das soll er ja auch nicht. er soll ja ausrechnen, ob ein rest übrigbleibt. So kann ich ja feststellen, ob Endwert eine ganze Zahl ist oder nicht.
 
Stimmt, dann ist das richtig. Allerdings passen dann die Texte, die du ausgibst, nicht: "Das Endergebnis ist eine gerade/ungerade Zahl"...
 
Zurück
Oben