Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

ich bin eine blutige anfängerin was programmieren angeht und über die ferien haben wir jetzt die aufgabe bekommen ein "spiel" zuprogrammieren

Aufgabenstellung:

Schreibe ein C++-Programm "Zahlenraten" mit folgenden Inhalt:

Der Computer "denkt" sich eine Zahl aus (zwischen 1 und 999), die man erraten muss.

Wie ein Computer sich eine Zahl erdenkt, könnt ihr bei "Zufallszahlengenerator" nachlesen.

Der Dialog soll ungefähr so ablaufen:

Man gibt eine Zahl ein und der Computer antwortet, ob seine Zahl grösser oder kleiner ist, als die des Benutzers. Dann kann der Benutzer erneut eine Zahl eingeben.

Das Ganze geht so lange, bis der Benutzer die Zahl herausgefunden bzw. erraten hat oder er die erdachte Zahl nach 12 Versuchen nicht herausgefunden hat.

An für sich funktioniert das alles super bei mir, aber ich hätte jetzt gerne dass man gefragt wird ob man nochmal spielen möchte...und das es dann praktisch von vorne anfängt nur will das nicht funktionieren, weil es irgendwie nich mehr in die while schleife reingeht.

Das wär das, was ich bis jetzt habe...bedanke mich schon mal im vorraus für Hilfe.


#include<conio>
#include<math>
#include<iostream>
using namespace std;

int main()
{
int zahl;
int counter=1;
int zufallszahl;
int ug=1;
int og=999;
int x;

cout << "..:Zahlenraten:.." <<endl;
cout<<endl;
cout<<"Spielanleitung: Der Computer legt eine Zahl zwischen 1 und 999 per Zufall fest. Sie haben 12 Versuche diese Zahl zu erraten! Der Computer wird ihnen sagen ob die von ihnen eingegebene Zahl, gr\x94\xe1\er oder kleiner als die Zufallszahl ist. Viel Spa\xe1!"<<endl;
cout<<endl;

do{ //Beginng Do-schleife

randomize(); //Zufallszahl berechnen
zufallszahl=(rand()%og)+ug;

cout<<"Geben Sie bitte eine Zahl ein:";

while ((zahl!=zufallszahl)&&(counter<=12)){ //Beginn While

cout<<endl;
cout<<counter<<". Versuch:";

cout<<" ";
cin>>zahl; //Zahleingabe

if (zahl>zufallszahl){
cout<<"Zahl ist kleiner als "<<zahl<<endl;
}

if (zahl<zufallszahl){
cout<<"Zahl ist gr\x94\xe1\er als "<<zahl<<endl;
}

counter++;
} //Ende while

if (zahl==zufallszahl) {
cout<<"Herzlichen Gl\x81\ckwunsch! Sie haben die Zahl nach dem "<<counter-1<<". Versuch erraten!"<<endl;
}

if ((zahl!=zufallszahl)&&(counter>12)){
cout<<endl;
cout<<"Leider nicht geschafft!"<<endl;
cout<<"Die richtige Zahl w\x84re: "<<zufallszahl<<" gewesen."<<endl;
}

cout<<endl; //Leere Zeile
cout<<"Nochmal spielen?1/0"<<endl;
cin>>x;

}while(x==1); //Ende do

getch();
return 0;
}[/PHP]

Baue doch einfach um die While Schleife noch eine Schleife, die abbricht, wenn der Benutzer "nein" eingibt. Die Initialisierung machst du dann in der äußersten Schleife, damit hast Du bei jedem Versuch wieder die Startwerte. Die Deklaration machst Du besser außerhalb der Schleife

HTH Phil

Hallo ,

Versuch mal es mal ein marke zu setzen. Damit müsste es gehen!!

#include<conio>

#include<math>

#include<iostream>

using namespace std;


int main()

{

        int zahl;

        int counter=1;

        int zufallszahl;

        int ug=1;

        int og=999;

        int x;


        cout << "..:Zahlenraten:.." <<endl;

        cout<<endl;

        cout<<"Spielanleitung: Der Computer legt eine Zahl zwischen 1 und 999 per Zufall fest. Sie haben 12 Versuche diese Zahl zu erraten! Der Computer wird ihnen sagen ob die von ihnen eingegebene Zahl, gr\x94\xe1\er oder kleiner als die Zufallszahl ist. Viel Spa\xe1!"<<endl;

        cout<<endl;

        marke:  // <-- Marke setzen!!

        do{ //Beginng Do-schleife


                randomize();                  //Zufallszahl berechnen

                zufallszahl=(rand()%og)+ug;


                cout<<"Geben Sie bitte eine Zahl ein:";


                while ((zahl!=zufallszahl)&&(counter<=12)){ //Beginn While


                        cout<<endl;

                        cout<<counter<<". Versuch:";


                        cout<<" ";

                        cin>>zahl;  //Zahleingabe


                        if (zahl>zufallszahl){

                                cout<<"Zahl ist kleiner als "<<zahl<<endl;

                        }


                        if (zahl<zufallszahl){ 

                                cout<<"Zahl ist gr\x94\xe1\er als "<<zahl<<endl;

                        }


                        counter++;

                } //Ende while


                if (zahl==zufallszahl) {

                        cout<<"Herzlichen Gl\x81\ckwunsch! Sie haben die Zahl nach dem "<<counter-1<<". Versuch erraten!"<<endl;

                }


                if ((zahl!=zufallszahl)&&(counter>12)){

                        cout<<endl;

                        cout<<"Leider nicht geschafft!"<<endl;

                        cout<<"Die richtige Zahl w\x84re: "<<zufallszahl<<" gewesen."<<endl;

                }


        cout<<endl; //Leere Zeile

        cout<<"Nochmal spielen?1/0"<<endl;

        cin>>x;

 if (x=="1")

    {

    goto marke;

    }

    if (x=="0")

    {

    system("close");

    } 


        return 0; 

Dann durch eine if Verzweigung das Problem lösen!!

Mfg

Singh

Versuch mal es mal ein marke zu setzen. Damit müsste es gehen!!
Sicher, das geht, ist aber stilistisch äußerst fragwürdig. Es mag Fälle geben, in denen goto angebracht ist, weil es den Code vereinfacht, aber hier würde ich das auf keinen Fall machen.

Es ist auch gar nicht notwendig. Hier ist schon eine funktionierende Schleife. Hier wurde nur vergessen, die Variable counter zurückzusetzen.

erst mal vielen dank, für die schnelle hilfe.

und noch ne doofe frage, wie setze ich den counter zurück? : /

und wo muss ich den counter wieder auf 1 setzen in der schleife oder nach dem gefragt wurde ob man noch mal spielen will?

jetzt funktioniert alles wunderbar, counter auf 1 gesetzt und alles läuft perfekt : ) vielen dank für die schnelle und brauchbare hilfe!!

Also in einer kleinen Funktion mit vielen geschachtelten Schleifen kann ein goto error; ganz nützlich, und vor allem übersichtlicher als andere Vorgehensweisen sein.

Das Problem mit den Schleifen kann aber auch durch ein schönes break bzw. durch Exception-Handling gelöst werden.

Das Problem mit den Schleifen kann aber auch durch ein schönes break bzw. durch Exception-Handling gelöst werden.

Ein break hilft nur bei einfachen Schleifen, nicht bei mehreren verschachtelten. Will man da aus einer der inneren Schleifen herausspringen, muss man etwas anderes benutzen, z.B. eine bool-Variable, die in jeder Schleifenbedingung zusätzlich geprüft wird. Man kann auch das gesamte Schleifenkonstrukt in eine eigene Funktion auslagern, und dann mit einer return-Anweisung vorzeitig rausspringen.

Exceptions würde ich in so einem Fall auch nur mit Vorsicht einsetzen. Exceptions sagen für mich im Code etwas besonderes aus, nämlich dass eine Ausnahmesituation behandelt wird, etwas, das im normalen Programmablauf nicht vorhersehbar ist. Eine Exception für einen zwar vorzeitigen, aber dennoch erwarteten Abbruch zu verwenden, halte ich deshalb für fragwürdig.

IMHO ist es nicht sinnvoll, irgendein Sprachmittel grundsätzlich abzulehnen. Wer goto ohne Kenntnis der Situation verteufelt, sollte IMHO auch gleich von break, continue und vorzeitigem return die Finger lassen, denn letztendlich ist das dasselbe: Ein unbedingter Sprung.

Also meiner Meinung nach ist goto wohl einer der besten Befehle die es gibt. Allerdings sollte man Ihn nur unter bestimmten Bedingungen benutzen.

1. Man kann shcon im voraus damit rechen dass man der Einzige bleibt, der den Quellcode versteht!

2. Man muss es ganz schön drauf ham um ein größeres Programm mit goto zu erstellen und um eventuelle Fehler dann noch beseitigen können.

3. Spätestens 1 Jahr später kann man sich ersteinem wieder 1 Monat lang in den Code einarbeiten, um ihn wieder einigermaßen zu verstehen.

Dennoch, ich liebe goto;)

Ist nur meine Meinung, aber n goto sollte man NIE verwenden, wenn es auch irgendwie anders geht.

Mit anders gehen meine ich "vernünftige" andere lösungen.

Ich programmier jetzt doch ne gewisse zeit und hab NIE n goto benutzt (ausser in der kurzen Phase, wo ich ASM geschrieben hab :D ).

Zumindest nicht im release, zu testen is das was anderes und meiner Meinung nach ne grossartige Sache, die man aber vor dem release dringend entfernen sollte.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.