nimm spiel
-
ich glaube ich habe es hinbekommen
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;int mensch(int hoelzer)
{
int wahl;cout << "Es liegen noch " << heolzer << " auf dem Tisch!"<< endl;
cout << "Wie viele Hoelzer wollen sie nehmen?" << endl;
cin >> wahl;if(wahl<=3)
{
return wahl;
}
else
{
cout<< "zahl nicht zwischen 1 und 3 !!"<< endl;
return mensch(hoelzer);
}
}
int pc(int hoelzer)
{
int zug;
zug=hoelzer%4;
if(zug==0)
{
return 1;
}
else
{
return zug;
}
}
int main()
{
int og;
int ug;
int hoelzer;
cout << "Wie viele Hoelzer sollen auf dem Tisch liegen?"<< endl;
cout << "Geben Sie die Untere Grenze ein :" ; cin>> ug;
cout << "Geben Sie die Obere Grenze ein :" ; cin>> og;srand(time(NULL));
for (int n=0; n<1 ;n++)
{
hoelzer=rand()%(og-ug+1)+ug;
cout << " Es liegen "<<hoelzer<<" auf dem Tisch" << endl;
}while(1)
{
hoelzer=hoelzer-mensch(hoelzer);
if(hoelzer==0)
{
cout << "Sie haben gewonnen!" << endl;
return 0;
}
hoelzer=hoelzer-pc(hoelzer);
if(hoelzer==0)
{
cout << "Sie haben verloren!"<< endl;
return 0;
}
}return 0;
}habe die if abfrage nach dem cin>> wahl
-
Das wird funktionieren, ist aber noch verbesserungsfähig. Wenn du geduldig falsche Zahlen eingibst, wird das Programm irgendwann mit einem stack overflow abbrechen.
Th69 schrieb:
Packe in deine Funktion 'mensch' eine Schleife, welche die entsprechende Bedingung (1-3 Hölzer) überprüft.
manni66 schrieb:
Welche Konstrukte, mit denen sich Dinge wiederholt ausführen lassen, kennst du?
-
Rekursion (der Aufruf einer Funktion aus derselbigen) ist eher eine schlechte Wahl für eine Schleife.
Warum hat die Funktion mensch einen Parameter?
-
@ manni 66
ich habe keine ahnung , wir hatten bis jetzt die while-;for-;do-while;if;und switch verzweigungwürde aus dem bauch auf eine for-schleife tippen
-
@ dirk B
sind bei pc(hoelzer)diese %4 nicht auch parameter?
doch das hat irgendwie bei mensch nicht geklappt
-
Andi24 schrieb:
ich habe keine ahnung ,
Schlecht
Andi24 schrieb:
wir hatten bis jetzt die while-;for-;do-while;
Was ist der Unterschied zu
Andi24 schrieb:
if;und switch verzweigung
Andi24 schrieb:
würde aus dem bauch auf eine for-schleife tippen
Die Schleifen haben verschiedene Eigenschaften.
Welche Eigenschaft der for-Schleife ist hier günstig?
-
Andi24 schrieb:
@ dirk B
sind bei pc(hoelzer)diese %4 nicht auch parameter?
doch das hat irgendwie bei mensch nicht geklapptNein. Die Paramter sind die Übergabewerte an die Funktion. Hier hoelzer.
Allerdings ist es sinnvoller, den Zufallswert gleich in der Funktion zu ermitteln.
# Ok, das Programm beginnt und es bekommt ein Thema.
# - Ich und mein Holz
-
die ersten 3 sind schleifen
und die if ist eine fallunterscheidung
und switch ist ja eine mehrfachauswahl wo man in jeder case unterschiedliche anwendungsblöcke einfügen kann
-
Andi24 schrieb:
die ersten 3 sind schleifen
und die if ist eine fallunterscheidung
und switch ist ja eine mehrfachauswahl wo man in jeder case unterschiedliche anwendungsblöcke einfügen kannDu brauchst eine Wiederholung (Schleife)
Also while-, for- oder do-whileUnd du willst nach der Eingabe entscheiden, ob die Schleife wiederholt wird.
Welche Schleife ist dafür am Besten geeignet.
-
dann müsste es einen while sein ;while(bedingung) und wenn erfüllt zum nächsten schritt glaube ich bei einer for ist es doch so dass man die anzahl der prüfungen in den bedingungen vorgibt z.B. for(n=0;n<5;n++)
-
Andi24 schrieb:
dann müsste es einen while sein ;while(bedingung) und wenn erfüllt zum nächsten schritt
Und wie ist die Bedingung? Hast du nicht eher etwas in der Art "gibt eine Zahl ein, bis diese im korrekten Bereich liegt"? Oder meinst du "solange keine gültige Zahl eingegeben wurde, wiederhole Eingabe"?
bei einer for ist es doch so dass man die anzahl der prüfungen in den bedingungen vorgibt z.B. for(n=0;n<5;n++)
Man kann in einer for-Schleife alles mögliche tun. for (Initialisierung; Bedingung; Increment). Bedingung ist optional, kann aber auch kompliziert sein. Und Increment ist ein normales Statement, d.h. es braucht kein Increment zu sein, sondern kann auch irgendwas anderes machen oder leer bleiben. Du kannst auch schreiben:
for(;;){ cout << "Und noch eine Zeile\n"; }
-
Bei einer while-Schleife wird vor dem ersten Durchlauf schon geprüft.
Allerdings gibt es bei deinem Problem noch nichts zu prüfen, da die Eingabe ja noch nicht erfolgte.Da ist die do-while-Schleife etwas hübscher.
Bedenke aber, dass while "solange" bedeutet. solange die Bedingung wahr ist, wird die Schleife ausgeführt.
Klar kannst das auch mit der while- oder for-Schleife machen.