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++

#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;
}