/* oef vraag een getal tussen 0 en 32000 program berekent random getal op basis van gegeven getal (functie) gebruiker moet getal raden vraag hoeveel beurten hij wil spelen als alle beurten op zijn : vragen of hij nog meer beurten wil eventueel : spelverlmoop in een functie steken ? */ #include #include #include #include #include /* * = standaard in/out functies * = time functies * = ?? * required by srand (); zie help * wiskundige functies ? - required by ceil() */ // functie prototypes void logo(); void speluitleg(); int randomgetal(int n); int hogerlager(int x, int a); int bijkopen(); int ZoekVanNulTot(float Bereik); //main void main () { // var int StartGetal = 999; int SpelGetal; int AantBeurten; int Gok; int resultaat = 0; //intro logo(); speluitleg(); //start do { cout << "geef een getal tussen 0 en 32.000 : \t"; cin >> StartGetal; }while(StartGetal <= 0 || StartGetal >32000); // getal genereren SpelGetal = randomgetal(StartGetal); //samenvatting cout << endl << "Je wil een getal raden tussen 0 en " << StartGetal << endl << "moet kunnen in " << ZoekVanNulTot(StartGetal) << " beurten\n"; // debug :Spelgetal ? //cout << "te zoeken getal : " << SpelGetal << endl; // spel spelen cout << "hoeveel beurten ? "; cin >> AantBeurten; for(int i = 1; i<=AantBeurten && resultaat !=3; i++) { cout << "gok " << i << " : \t"; cin >> Gok; resultaat = hogerlager(SpelGetal, Gok); // bijsturen adhv resultaat switch (resultaat) { case 1: cout << "HOGER\n"; break; case 2: cout << "LAGER\n"; break; case 3: cout << "JUIST !!\n"; break; } // beurten bijkopen if (i == AantBeurten && resultaat != 3) { AantBeurten += bijkopen(); // debug : aantal beurten ? teller van loop ? //cout << "Beurten " << AantBeurten << "i " << i << endl; } }//end gok loop // spel einde if (resultaat == 3) { cout << "Getal tussen 0 en " << StartGetal << " gevonden in " << (i-1) << " beurten.\n\n" ; } else { cout << "getal niet gevonden" << endl << "oplossing : "<< SpelGetal << endl << endl; } } //FUNCTIES int hogerlager(int x, int a) { /* * x = te zoeken getal * a = gegeven getal * r = return value = resultaat : * hoger = 1 * lager = 2 * gelijk = 3 */ int r; if (x > a) { r=1; } else { if (x < a) { r = 2; } else { r=3; } } return r; } int bijkopen() { int aantal; cout << "\n Dit was je laatste kans. Beurten bijkopen ? " << endl << "Hoeveel ?" << endl << "\tantwoord '0' als je geen beurten bijkoopt\n" ; cin >> aantal; return aantal; } int randomgetal(int n) { int Getal = 0; // 1- start 'randomizer' - srand () - a.d.h.v. timer srand((unsigned) time (NULL)); //NULL : hoofdletters ! //2- maak random getal Getal = rand(); /* * REST van deling randomgetal / gebruikersgetal = * = een getal tussen 0 en gebruikersgetal (per definitie) * +1 voor ' tgeval rest = 0 */ Getal %= n; Getal += 1; // Getal = (Getal % n) +1; return Getal; } int ZoekVanNulTot(float Bereik) { /* * om iets te vinden tussen 2 uitersten, * zou de snelste methode als volgt zijn: * 1- neem de helft tussen de twee uitersten, * 2- ga na of het gezochte in de 1st of 2de helft moet liggen * stel = 1ste helft * 3- verdeel deze helft opnieuw in 2 * enz. * zou moeten werken voor alle geordende lijsten : * opeenvolgende getallen, alfabetische lijst, ... enz * * * deze functie gaat na hoe snel het spel gespeeld zou kunnen worden * volgens deze methode */ int Aant = 1; do { Bereik = ceil(Bereik /2); Aant++; } while (Bereik > 1); return Aant; } void speluitleg() { cout << "HOGER - LAGER" << endl << endl <<"spelregels :\n" <<"geef een getal tussen 0 en 32.000 \n" <<"de computer 'denkt' een getal tussen 0 en jouw getal\n" <<"jij moet dat getal raden. je mag zelf kiezen in hoeveel beurten.\n" << endl << endl; } void logo() { cout << endl <