Wie baue ich in dieses Beispiel eine Schleife ein



  • Hallo Leute,

    ich habe großes Interesse an C++ und natürlich neben der Begeisterung auch Willen, diese Sprache als Hobby zu erlernen.

    Ich habe mir ein Buch angeeignet "Einstieg in C++ von Arnold Willemer", kombiniere das Wissen und die Umsetzung darin mit einem YouTube Tutorial http://www.youtube.com/user/InformatikTutorial/playlists und auch dieses schriftliche Tutorial hilft mir weiter: http://www.online-tutorials.net/c-c++-c/c++-tutorial-teil-1/tutorials-t-1-58.html#vorwort.

    Nun bin ich immer wieder dran zu üben und kleine kurze Programme zu schreiben und verschiedene Themen abzuwickeln, wiederholen etc.

    Da mein Wissen noch sehr begrenzt ist habe ich bei einer Übung einfallen lassen, die das Thema "if" und "switch" betreffen.

    Auch das Thema "while Schleife" habe ich schon angeschnitten.

    Jetzt zu meiner Frage, ob Ihr mir helfen könntet, in meine Übung eine Schleife einzubauen, welche nach der 2. Aufforderung eine geradene Zahl einzugeben eine ungeradene eingeben wird und dies die Anfrage der Eingabe wiederholt.

    Hier das die Übung:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int a;
    	int b;
    	int Endwert;
    
    	cout << "Bitte geben Sie eine geradene Zahl ein zwischen 0 und 10!" << endl;
    	cin >> a;
    
    	switch(a)
    	{
    	case 0:
    	case 2:
    	case 4:
    	case 6:
    	case 8:
    	case 10:
    		cout << "Die eingegebene Zahl ist eine geradene Zahl.";
    			getchar();
    			break;
    
    	default:
    		cout << "Die von Ihnen eingebene Zahl ist ungeraden. Sie sind zu doof. \n";
    		getchar();
    			break;
    
    	}
    
    	if(a == 1 || a == 3 || a == 5 || a == 7 || a == 9)
    		cout << "Bitte geben Sie erneut eine geradene Zahl zwischen 0 und 10 ein! \n" << endl;
    		cin >> a;
    	if(a == 0 || a == 2 || a == 4 || a == 6 || a == 8 || a == 10)
    		cout << "Bitte geben sie erneut eine geradene Zahl zwischen 0 und 10 ein!" << endl;
    		cin >> b;
    		Endwert = a + b;
    		cout << "Ihre Beiden Zahlen ergeben den Wert: " << Endwert << " und ist eine geradene Zahl." << endl;
    
    		cin.clear();
    		cin.ignore(cin.rdbuf()->in_avail());
    		cin.get(); 
    
    	return 0;
    
    }
    

  • Mod

    Roflor69 schrieb:

    Jetzt zu meiner Frage, ob Ihr mir helfen könntet, in meine Übung eine Schleife einzubauen, welche nach der 2. Aufforderung eine geradene Zahl einzugeben eine ungeradene eingeben wird und dies die Anfrage der Eingabe wiederholt.

    Ich verstehe nicht, was du genau meinst. Aber hast du einfach mal versucht, den Code, den du wiederholt sehen möchtest, in eine Schleife zu setzen? Welche Schwierigkeiten hattest du dabei?

    Ein paar Bemerkungen:
    -Bei dir sind alle Zahlen > 10 oder < 0 ungerade.
    -Bloß weil du deinen Code einrückst, hat das noch lange keine Bedeutung für den Compiler. Den interessiert nur die logische Struktur deines Codes, Formatierung hingegen nicht. Die Zeilen 36 und 39 werden immer ausgeführt. Du möchtest vermutlich ein paar logische Blöcke in den Code einfügen: { ... }
    -Deine Einrückung ist dazu noch inkonsequent: Warum ist 23 eingerückt? 40-45?

    • cin.ignore(cin.rdbuf()->in_avail()); Das wird im Allgemeinen etwas anderes tun, als du denkst ( 😕 woher hast du das?). Nämlich gar nichts.
      -Es gibt noch ein paar Stilmängel, die aber Kleinigkeiten sind: Variablen dort definieren, wo du sie brauchst, nicht alles am Anfang der Funktion; Es gibt einen kleinen, aber manchmal wichtigen Unterschied, zwischen endl und einem einfachen Zeilenumbruch ( \n ). Hier ist es zwar egal, aber praktisch brauchst du endl nie und vielleicht wird's später mal relevant. Kann man sich also gleich angewöhnen, es nicht zu nutzen; Ich weiß nicht, ob du Deutsch-Muttersprachler bist oder nicht, aber du solltest die Grammatik deiner Ausgaben noch einmal überdenken. Mangelnde Grammatik ist auch der Grund, wieso ich oben nicht verstehen konnte, was deine Frage ist. Bei rein schriftlicher Kommunikation ist sauber Ausdrucksweise sehr wichtig, denn jeder Kontext und jede Betonung geht verloren. Alles was du sagen möchtest, muss möglichst klar und korrekt beschrieben werden, wenn du möchtest, dass andere deine Texte verstehen.


  • Danke für die schnelle Antwort und für die vielen Kritikpunkte.

    Ich verstehe nicht, was du genau meinst. Aber hast du einfach mal versucht, den Code, den du wiederholt sehen möchtest, in eine Schleife zu setzen? Welche Schwierigkeiten hattest du dabei?

    Ich habe folgende Schwierigkeit damit, dass ich nicht ganz genau weiß, wie ich die Schleife einbringen bzw. auch schreiben soll. Dazu fehlt es mir gerade am Verständnis, dies umzusetzen.

    -Bloß weil du deinen Code einrückst, hat das noch lange keine Bedeutung für den Compiler. Den interessiert nur die logische Struktur deines Codes, Formatierung hingegen nicht. Die Zeilen 36 und 39 werden immer ausgeführt. Du möchtest vermutlich ein paar logische Blöcke in den Code einfügen: { ... }
    -Deine Einrückung ist dazu noch inkonsequent: Warum ist 23 eingerückt? 40-45?

    Soweit ich bisher verstanden habe, dient das Einrücken zur besseren Übersicht. Muss mich darin üben übersichtlicher zu schreiben.

    -cin.ignore(cin.rdbuf()->in_avail()); Das wird im Allgemeinen etwas anderes tun, als du denkst ( 😕 woher hast du das?). Nämlich gar nichts.

    Das soll mir dazu dienen, dass beim Debuggen der Datei über Microsoft Visual C++ es nach beenden nicht einfach verschwindet.

    Also nochmal zu meiner Übung.
    Ich möchte gerne durch Eingabe 2 verschiedene geradene Zahlen addieren.
    Dabei lasse ich es offen zwischen 0 und 10 Zahlen auszusuchen.
    Wenn eine ungeradene Zahl eingeben wird, möchte ich gerne die Eingabeaufforderung einer geradenen Zahl wiederholen. Um anschließend mit der Eingabe der zweiten geradenen Zahl fortzuführen.


  • Mod

    Soweit ich bisher verstanden habe, dient das Einrücken zur besseren Übersicht. Muss mich darin üben übersichtlicher zu schreiben.

    Deine Einrückung passt aber nicht zu dem, was der Code tut! Du denkst anscheinend, Zeile 36 gehöre zum if, denn so rückst du ein. Aber der Code den du geschrieben hast, der sagt etwas anderes! Daher ist wohl (sofern du das nicht tatsächlich nur falsch eingerückt hast) dein Code falsch.

    Ich habe folgende Schwierigkeit damit, dass ich nicht ganz genau weiß, wie ich die Schleife einbringen bzw. auch schreiben soll. Dazu fehlt es mir gerade am Verständnis, dies umzusetzen.

    Dann üb doch erst einmal an einfacheren Schleifen und einfacheren Programmen. Willst du selber die Übungen in deinem Buch nacharbeiten oder willst du, dass ich mir ein paar Aufgaben ausdenke?
    Falls letzteres:
    Benutze while-Schleifen, um folgendes zu erreichen:
    -Gib die Zahlen 0-10 aus.
    -Lies 5 Zahlen ein. Gib nach jeder Eingabe aus: "Die [X]. Zahl war [eingelesene Zahl]", wobei du die entsprechenden Werte einsetzt.
    -Berechne die Summe der obigen Zahlen und gib diese nach der letzten Eingabe aus.
    -Anstatt 5 Eingaben, werden nun so oft Eingaben eingelesen, bis eine der Eingaben eine 0 ist.

    Das soll mir dazu dienen, dass beim Debuggen der Datei über Microsoft Visual C++ es nach beenden nicht einfach verschwindet.

    Deine IDE kann das bestimmt auch besser. CTRL+F5, wenn ich mich recht entsinne.



  • Vielen Dank für die Hilfestellung und deinen Rat werde ich gerne folge leisten, erst einmal einfachere Schleifen und Programme schreiben.

    Und danke für die Aufgaben. Melde mich sobald ich die Aufgaben, und mein Problem mit der Schleife behoben habe, wieder.

    Haunse



  • SeppJ schrieb:

    Benutze while-Schleifen, um folgendes zu erreichen:
    -Gib die Zahlen 0-10 aus.
    -Lies 5 Zahlen ein. Gib nach jeder Eingabe aus: "Die [X]. Zahl war [eingelesene Zahl]", wobei du die entsprechenden Werte einsetzt.
    -Berechne die Summe der obigen Zahlen und gib diese nach der letzten Eingabe aus.
    -Anstatt 5 Eingaben, werden nun so oft Eingaben eingelesen, bis eine der Eingaben eine 0 ist.

    Hi,

    habe mich dran gemacht, deine Aufgaben zu erfüllen. Habe es einigermaßen hinbekommen. Beim Debuggen des Programms kam folgende Fehlermeldung:

    "Run-Time Check Failure #3 - The variable 'e' is being used without being initialized."

    und wenn ich dann auf "Weiter" klicke, geht das Programm korrekt weiter.

    Hier der Code:

    #include <iostream>
    using namespace std;
    
    int main()
    {	
    	int x = 0;
    	int i;
    	int Zähler = 0;
    	int Summe = 0;
    	int e;
    		while(x < 10)
    			{
    				x++;
    				cout << x << endl;
    			}
    				do
    					{
    						cout << "Bitte geben Sie eine Zahl ein: " << endl;
    						cin >> i;
    						Zähler++;
    						cout << "Die " << Zähler << ". Zahl war " << i << endl;
    						Summe = Summe + i;
    						getchar();
    					}
    				while(Zähler < 5);
    				cout << Summe << endl;
    						while(e)
    							{
    								cout << "Bitte geben Sie eine Zahl ein. Die Zahl 0 beendet das Programm." << endl;
    								cin >> e;
    								if(e == 0)
    									cout << "Das Programm wird beendet." << endl;
    								else
    									cout << "Bitte geben Sie eine Zahl ein!" << endl;
    								getchar();
    							}
    	getchar();
    	return 0;
    }
    

    Könntest du mir dabei helfen meinen Fehler zu finden ?
    Habe ich vielleicht eine falsche Schleife verwendet ?

    lg Roflor



  • Roflor69 schrieb:

    "Run-Time Check Failure #3 - The variable 'e' is being used without being initialized."

    #include <iostream>
    
    	int e;
                      ....
                      ....
    						while(e)
    							{
    								cout << "Bitte
    

    Könntest du mir dabei helfen meinen Fehler zu finden ?
    Habe ich vielleicht eine falsche Schleife verwendet ?

    lg Roflor

    Du definierst die Variable e, weist ihr keinen Wert zu, sie hat also einen zufälligen Wert und mit diesem benutzt Du sie ...


Log in to reply