Zahlenratespiel, Hilfe mit Zusatzfunktionen



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Bei "while (Tip != Sikret )" Anzahl der Schleifendurchläufe mitzählen

    Die Frage ist wie man das umsetzt.

    Mit Variablen und logischen Verknüpfungen (and oder or)



  • @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Seit wann heißt du RBS2?

    Wieso muss ich RBS2 heißen um auf eine Frage zu antworten?
    Hör bitte endlich auf mit irgendeinem Metaquatsch Threads zuzumüllen!?



  • @Swordfish

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    do ... while()-Schleife um den Code der für 1 Spiel zuständig ist, nahe dem Ende dieser Schleife den Benutzer seine Wahl treffen lassen und in der Schleifenbedingung Prüfen.

    Also mit do...while funktioniert bei mir was nicht. Schau mal bitte an.

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Zusätzliche Variable einführen, beim Beginn eines Spiels mit 0 initialisieren und nach jedem Rateversuch inkrementieren.

    Habe die Variable, aber was ich mit dem Versuch inkrementieren soll? Tipps?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Tip, ja, Sikret, Versuch = 0;
        char Abfrag = Nein;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        srand (time(NULL));
        Sikret = rand() % Max_Zahl + 1;
    
    do{
    
        while (Tip != Sikret ) {
    
        cout << "\nGib deinen Tip ein: ";
        cin >> Tip;
        Versuch += Versuch ;
            if (Tip > Sikret){
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
            }
            else if (Tip < Sikret) {
                cout << "\nMeine Zahl ist groesser \n";
                continue;
            }
            else {
                cout << "\nGratulation! Du hast die Zahl erraten!\n";
    
            }
        cout << "Noch ein Spiel (Ja/Nein)? ";
    
        cin >> Rest;
        }
    } while (Rest!=Nein);
    }
    
    


    • Die von Dir verwendete Variable Rest gibt es nicht (nirgends deklariert). (Nein auch nicht. Oder meintest Du "Nein" ... einen String?)
    • Du benutzt Tip in while (Tip != Sikret ) { uninitialisiert. Da kann sonstwas rauskommen.
    • Ich habe oben schon gesagt Du sollst Variablen dort deklarieren/definieren, wo sie benötigt werden.
    • Du berechnest keine neue Zufallszahl pro weiterem Spiel (Sikret = rand() % Max_Zahl + 1; muss woanders hin).
    • Versuch sollte beim Beginn eines neuen Spiels wieder 0 sein.


  • @Swordfish

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Du benutzt Tip in while (Tip != Sikret ) { uninitialisiert. Da kann sonstwas rauskommen.
    Ich habe oben schon gesagt Du sollst Variablen dort deklarieren/definieren, wo sie benötigt werden.
    Du berechnest keine neue Zufallszahl pro weiterem Spiel (Sikret = rand() % Max_Zahl + 1; muss woanders hin).
    Versuch sollte beim Beginn eines neuen Spiels wieder 0 sein.

    Vielen Dank, endlich habe ich es kapiert. Noch mit Versuch bitte ich um ein paar Tipps.
    Hier ist noch meine Code, die Verbesserungsvorschläge zur Code sind begrüßen.

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Sikret;
        char Abfrage;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
    
        srand (time(NULL));
    
    
    do{
        int Tip;
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        Sikret = rand() % Max_Zahl + 1;
        while (Tip != Sikret ) {
        int Versuch = 0;
        cout << "\nGib deinen Tip ein: ";
        cin >> Tip;
        Versuch += Versuch ;
            if (Tip > Sikret){
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
            }
            else if (Tip < Sikret) {
                cout << "\nMeine Zahl ist groesser \n";
                continue;
            }
            else {
                cout << "\nGratulation! Du hast die Zahl erraten!\n";
    
            }
        cout << "Noch ein Spiel (J/N)? ";
    
        cin >> Abfrage;
        }
    } while (Abfrage!='N');
    }
    
    


    • Tip ist bei seiner ersten Verwendung in der Bedingung der folgenden while immer noch uninitialisiert. Also entweder initialisieren oder eine do...while-Schleife nehmen (die Tip erst auswerted nachdem die Variable von cin gelesen wurde).
    • Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will?
    • Warum zählst Du die Versuche wenn Du sie dem Benutzer noch nichteinmal anzeigst?
    • Rücke bitte deinen Code anständig ein.


  • @Wowa29 mach dich mal über Einrückungsstil schlau.

    Du hilfst dir und uns.



  • @Wowa29 Zeile 24 ist etwas merkwürdig.



  • @DirkB sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    mach dich mal über Einrückungsstil schlau.

    Ich weiß ehrlich gesagt nicht, was euch nicht gefällt. Ich programmiere nur seit ein paar Tagen nur.

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will?

    Nein, nur am Ende. Nachdem die Randomzahl geraten wurde.

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Warum zählst Du die Versuche wenn Du sie dem Benutzer noch nichteinmal anzeigst?

    Wie ich das mache?

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Rücke bitte deinen Code anständig ein.

    z.B?



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Ich weiß ehrlich gesagt nicht, was euch nicht gefällt.

    Alles ab und inklusive dem ersten do in main() gehört noch eine Ebene weiter eingerückt.

    @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will?

    Nein, nur am Ende. Nachdem die Randomzahl geraten wurde.

    Das war eher eine rhetorische Frage. Anders formuliert: Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will! Schau dir an, in welcher der beiden Schleifen cout << "Noch ein Spiel (J/N)? "; cin >> Abfrage; steht.



  • Dieser Beitrag wurde gelöscht!


  • @Swordfish so?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Sikret;
        int Tip = 0;
        char Abfrage;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
    
        srand (time(NULL));
    
    
        do
        {
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        Sikret = rand() % Max_Zahl + 1;
        while (Tip != Sikret )
            {
            int Versuch = 0;
            cout << "\nGib deine Zahl ein: ";
            cin >> Tip;
        //Versuch += Tip ;
            if (Tip > Sikret)
                {
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
                }
            else if (Tip < Sikret)
                {
            cout << "\nMeine Zahl ist groesser \n";
            continue;
                }
            else
                {
            cout << "\nGratulation! Du hast die Zahl erraten!\n";
            cout << "Sie haben " << Versuch << " Versuche dazu gebraucht!\n";
                }
            }
        cout << "Noch ein Spiel (J/N)? ";
        cin >> Abfrage;
        }
    while (Abfrage!='N');
    }
    
    


  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Versuchs nochmal. Das ```cpp muss alleine in einer Zeile vor Deinem Code stehen und in einer Zeile nach Deinem Code nochmal ```. Du kannst deinen Beitrag mit einem Klick auf das Drei-Punkte-Menü rechts unter Deinem Beitrag bearbeiten.



  • gemacht. Aber die Lösung meines Problems hat das nicht geholfen. Ich meine mit Versuchen



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    so?

    Eher so (mit Kommentaren):

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    	// int Max_Zahl, Sikret;  Warum sind diese deklarationen
    	// int Tip = 0;           und definitionen immer noch hier und nicht ...
    	char Abfrage;
    	cout << "Zahlenratespiel\n";
    	cout << "===============\n";
    
    	srand(time(NULL));
    
    	do {
    		// hier startet ein neues Spiel, also Anzahl der Versuche auf 0:
    		int Versuch = 0;
    
    		cout << "\nGib die Maximalzahl ein: ";
    		int Max_Zahl;  // ... hier?
    		cin >> Max_Zahl;
    		int Sikret = rand() % Max_Zahl + 1;  // ... hier?
    
    		int Tip = Sikret + 1;  //... hier?  Sikret + 1 damit die Bedingung in der nächsten Zeile
    		while (Tip != Sikret) { // garantiert nicht fehlschlägt. do ... while() wäre eloganter.
    			// int Versuch = 0;  // pro Spiel, nicht pro einmal Raten. Siehe oben.
    			cout << "\nGib deine Zahl ein: ";
    			cin >> Tip;
    			// Versuch += Tip; // Ne, da bin ich dagegen. Eher:
    			// Versuch = Versuch + 1; // oder kurz:
    			++Versuch;
    
    			if (Tip > Sikret)
    			{
    				cout << "\nMeine Zahl ist kleiner \n";
    				// continue;  die continues sind überflüssig, da nach dem if
    			}
    			else if (Tip < Sikret)
    			{
    				cout << "\nMeine Zahl ist groesser \n";
    				// continue;  else if - else im Schleifenkörper nichts mehr kommt.
    			}
    			else
    			{
    				cout << "\nGratulation! Du hast die Zahl erraten!\n";
    				cout << "Sie haben " << Versuch << " Versuche dazu gebraucht!\n";
    			}
    		}
    		
    		cout << "Noch ein Spiel (J/N)? ";
    		cin >> Abfrage;
    	} while (Abfrage != 'N');
    }
    

    Ohne (mit do...while() damit Tip keinen künstlichen Wert braucht):

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    	cout << "Zahlenratespiel\n";
    	cout << "===============\n";
    
    	srand(time(NULL));
    
    	char Abfrage;
    	do {
    		int Versuch = 0;
    
    		cout << "\nGib die Maximalzahl ein: ";
    		int Max_Zahl;
    		cin >> Max_Zahl;
    
    		int Sikret = rand() % Max_Zahl + 1;
    
    		int Tip;
    		do {
    			cout << "\nGib deine Zahl ein: ";
    			cin >> Tip;
    			++Versuch;
    
    			if (Tip > Sikret)
    			{
    				cout << "\nMeine Zahl ist kleiner \n";
    			}
    			else if (Tip < Sikret)
    			{
    				cout << "\nMeine Zahl ist groesser \n";
    			}
    			else
    			{
    				cout << "\nGratulation! Du hast die Zahl erraten!\n"
    				     << "Sie haben " << Versuch << " Versuche dazu gebraucht!\n";
    			}
    		} while (Tip != Sikret);
    		
    		cout << "Noch ein Spiel (J/N)? ";
    		cin >> Abfrage;
    	} while (Abfrage != 'N');
    }
    

    Findest Du es so eingerückt nicht auch lesbarer?



  • @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Findest Du es so eingerückt nicht auch lesbarer?

    Ja, mein Freund. Danke dir. Ich lerne aber noch. Die Bemerkung war gut angebracht. Kann man noch die Anzahl der Versuche hierher hinzuschreiben bzw. festlegen? Da brauche ich wieder eine Schleife?



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Kann man noch die Anzahl der Versuche hierher hinzuschreiben bzw. festlegen? Da brauche ich wieder eine Schleife?

    Wie meinst Du das? Eine Maximalanzahl an Versuchen festlegen bei deren Erreichen das Spiel verloren ist?



  • @Swordfish genau



  • @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

      } while (Tip != Sikret);
    

    Dazu brauchts in while (Tip != Sikret); noch eine weitere Bedingung:

    Solange (Zahl nicht erraten UND Anzahl der Versuche kleiner gleich Maximalanzahl)



  • @Swordfish

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Dazu brauchts in while (Tip != Sikret); noch eine weitere Bedingung:

    Ja, aber wenn ich das erweitere, dann erfüllt sich die vorherige Bedingung nicht vollständig, und zwar wenn ich z.B 5 Versuche festlege, und dann noch die Meldung dass "die Maximalanzahl an Versuchen wurde erreicht, die gesuchte Zahl war ...!", dann funktioniert das nicht ganz richtig

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    	cout << "Zahlenratespiel\n";
    	cout << "===============\n";
    
    	srand(time(NULL));
    
    	char Abfrage;
    	do {
    		int Versuch = 0;
    
    		cout << "\nGib die Maximalzahl ein: ";
    		int Max_Zahl;
    		cin >> Max_Zahl;
    
    		int Sikret = rand() % Max_Zahl + 1;
    
    		int Tip;
    		do {
    			cout << "\nGib deine Zahl ein: ";
    			cin >> Tip;
    			++Versuch;
    
    			if (Tip > Sikret)
    			{
    				cout << "\nMeine Zahl ist kleiner \n";
    			}
    			else if (Tip < Sikret)
    			{
    				cout << "\nMeine Zahl ist groesser \n";
    			}
    			else
    			{
    				cout << "\nGratulation! Du hast die Zahl erraten!\n"
    				     << "\nSie haben " << Versuch << " Versuche dazu gebraucht!\n";
    			}
    		} while (Tip != Sikret && Versuch <=10);
           // cout << "die Maximalanzahl an Versuchen wurde erreicht, die gesuchte Zahl war "<< Sikret;
    		cout << "\nNoch ein Spiel (J/N)?\n";
    		cin >> Abfrage;
    	} while (Abfrage != 'N');
    }
    
    

Anmelden zum Antworten