You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
C++
69 lines
2.1 KiB
C++
#include <string>
|
|
#include <iostream>
|
|
|
|
// dieser code geht davon aus, dass der User stets wahrheitsgemäß antwortet!
|
|
// -> ich fange es nicht ab, wenn der User lügt!
|
|
|
|
int get_response() {
|
|
std::string eingabe;
|
|
std::getline(std::cin, eingabe);
|
|
return eingabe == "ja";
|
|
}
|
|
|
|
int get_untere_schranke(int *obere_schranke, int *untere_schranke) {
|
|
std::cout << "Ist die Zahl kleiner als " << *untere_schranke << " ?" << std::endl;
|
|
if (get_response()) {
|
|
*obere_schranke = *untere_schranke;
|
|
*untere_schranke -= 10;
|
|
get_untere_schranke(obere_schranke, untere_schranke);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int get_obere_schranke(int *obere_schranke, int* untere_schranke) {
|
|
std::cout << "Ist die Zahl größer als " << *obere_schranke << " ?" << std::endl;
|
|
if (get_response()) {
|
|
*untere_schranke = *obere_schranke;
|
|
*obere_schranke += 10;
|
|
get_obere_schranke(obere_schranke, untere_schranke);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void lets_guess(int guess, int *untere_schranke, int *obere_schranke) {
|
|
std::cout << "Ist es die " << guess << " ?" << std::endl;
|
|
if (get_response())
|
|
return;
|
|
|
|
std::cout << "Ist die Zahl größer als " << guess << " ?" << std::endl;
|
|
if (get_response()) {
|
|
*untere_schranke = guess;
|
|
} else {
|
|
*obere_schranke = guess;
|
|
}
|
|
|
|
if ((*untere_schranke - *obere_schranke == 1) || (*untere_schranke - *obere_schranke == -1)) {
|
|
std::cout << "Ist es die " << guess-1 << " ?" << std::endl;
|
|
if (get_response())
|
|
return;
|
|
}
|
|
|
|
lets_guess((*untere_schranke + *obere_schranke) / 2, untere_schranke, obere_schranke);
|
|
return;
|
|
}
|
|
|
|
int main() {
|
|
std::cout << "Ich möchte eine Zahl von dir erraten! \n \
|
|
Bitte beantworte meine Fragen wahrheitsgemäß mit \"ja\" oder \"nein\"." << std::endl;
|
|
|
|
int untere_schranke = 0;
|
|
int obere_schranke = 10;
|
|
|
|
get_untere_schranke(&obere_schranke, &untere_schranke);
|
|
get_obere_schranke(&obere_schranke, &untere_schranke);
|
|
|
|
lets_guess((untere_schranke + obere_schranke) / 2, &untere_schranke, &obere_schranke);
|
|
std::cout << "Vielen Dank fürs Spielen!" << std::endl;
|
|
return 0;
|
|
}
|