Cześć wszystkim,
Napisałem program, który generuje losową liczbę z danego przedziału a potem sam ma odgadnąć tę liczbę. Są dwa problemy:
-
program losuje zawsze 0 jako pierwszą liczbę, pomimo warunku że pierwszą liczbą jest 1. Nie wiem z czego to wynika. Zakomentowany mam nawet test losowości. Stworzyłem go, żeby sprawdzić czy zero się wylosuje, co się nigdy nie stało.
-
pomimo że zakres zmniejszyłem do (strzał, MAX) lub (MIN, strzał) program wciąż losuj liczby spoza tego zakresu.
Problem jest w funkcjach? Wiem, że mogę dodać osobne if'y ale ze strony logicznej wszystko powinno działać (tak mi się zdaje).
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
// Variables
int wynik, strzal, proby = 0;
bool winner = false;
int losuj(int minimum, int maksimum){
return rand() % (maksimum - minimum + 1) + minimum;
}
int zgaduj(int minimum, int maksimum){
return rand() % (maksimum - minimum + 1) + minimum;
}
int main(){
srand( time ( NULL ) );
/*for (int i=0; i<110; i++){ TEST LOSOWOSCI
cout << losuj(1,100) << endl;
}
*/
losuj:
wynik = losuj(1,100);
cout << "Wylosowana zostala liczba, sprobuj ja odgadnac. Powodzenia!" << endl;
do {
int stzal = zgaduj(1,100);
cout << strzal;
zgaduj:
if (strzal>wynik){
cout << " - Za wysoko" << endl;
strzal = zgaduj(1, strzal);
cout << strzal;
proby++;
goto zgaduj;
} else if (strzal<wynik){
cout << " - Za nisko" << endl;
strzal = zgaduj(strzal, 100);
cout << strzal;
proby++;
goto zgaduj;
} else if (strzal == wynik) {
cout << " - Brawo! Wylosowana liczba: " << wynik << endl << "Liczba prob: " << proby << endl;
winner = true;
}
} while(winner == false);
return 0;
}