Gra w liczby - kłopot z zakresem

0

Witam, mam do wykonania pewne zadanie o treści:

Gra w liczby. Użytkownik wymyśla jakąś liczbę całkowitą z przedziału od 0 do 500. Następnie komputer próbuje „zgadnąć” wymyśloną liczbę w następujący sposób: komputer pyta użytkownika czy jakaś (wygenerowana przez niego) liczba jest tą pomyślaną. Jeżeli tak to użytkownik wpisuje zero i aplikacja kończy się, jak pomyślana liczba jest mniejsza to użytkownik wprowadza 1, a jak większa to 2 i komputer pyta ponownie, aż do ustalenia pomyślanej liczby.
Napisz aplikację, która znajdzie wymyśloną liczbę przy najmniejszej liczbie zapytań.

Nie wiedzieć czemu, zakres po pierwszym losowaniu zmiejsza mi sie min = 2 i max = 2 a nie tak jak chce.
Proszę o jaką pomoc co z tym fantem zrobić.

Kod programu:

 int twojaLiczba;
	int losowanie;  
    cout << "Podaj liczbe z zakresu od 0 do 500: ";
    cin >> twojaLiczba; 
    cout << "Twoja liczba to: " << twojaLiczba << endl; 
    
    int decyzja; 
    int min = 2;
    int max = 500;
	losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max); 
	cout << "Wylosowana liczba: " << losowanie << endl; 
	cout << "Czy wylosowana liczba jest twoja liczba ? (TAK - 0)(Mniejsza - 1)(Wieksza - 2) " << endl; 
	cin >> decyzja; 
    while(true){
    	if(decyzja == 0){
    		return false; 
    	} else if(decyzja == 1){
    		min = losowanie;
    		cout << "Zakres min: "<< min << " i Zakres max: " << max ;
    		losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max); 
			cout << "Wylosowana liczba: " << losowanie << endl; 
			cout << "Czy wylosowana liczba jest twoja liczba ? (TAK - 0)(Mniejsza - 1)(Wieksza - 2) " << endl; 
			cin >> decyzja; 	
    	} else if (decyzja == 2){
    		max = losowanie;
    		cout << "Zakres min: "<< min << " i Zakres max: " << max ;
    		losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max); 
			cout << "Wylosowana liczba: " << losowanie << endl; 
			cout << "Czy wylosowana liczba jest twoja liczba ? (TAK - 0)(Mniejsza - 1)(Wieksza - 2) " << endl; 
			cin >> decyzja;
   		}
    
    }
0
lisu1411 napisał(a):
else if (decyzja == 2){
            max = losowanie;

do zmiennej max przypisujesz wartość losowanie i dlatego Ci tak wychodzi, moim zdaniem :)

robię tak, ponieważ z każdym obrotem pętli chce zmniejszyć zakres :)

1
losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max);

rand() / (RAND_MAX + 1) zawsze zwraca 0;

Powinno być

losowanie = min + rand() % (max - min);
0
twonek napisał(a):
losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max);

rand() / (RAND_MAX + 1) zawsze zwraca 0;

Powinno być

losowanie = min + rand() % (max - min);

teraz działa :) dziękuje :)

0
losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max);

przez to w pewnym momencie wychodzi poza zakres :/ np. dla zakresu od 2 do 7 losuje 8

0
lisu1411 napisał(a):
losowanie =  min + (int)(rand() / (RAND_MAX + 1.0) * max);

przez to w pewnym momencie wychodzi poza zakres :/ np. dla zakresu od 2 do 7 losuje 8

teraz jest tak i działa dobrze:

losowanie = min + rand() % (max - min);
3

losowanie = min + rand() % (max - min); - nigdy nie wylosuje max, powinno być: losowanie = min + rand() % (max - min + 1);

0
_13th_Dragon napisał(a):

losowanie = min + rand() % (max - min); - nigdy nie wylosuje max, powinno być: losowanie = min + rand() % (max - min + 1);

nie widzę różnicy w działaniu programu, a też nie za bardzo jestem w stanie zrozumieć różnicy między tymi dwoma zapisami. (dlatego że jeszcze słabo znam rand)

2

Nie widzisz różnicy? To wybierz liczbę 500 ze swoją starą wersją.
Tak a propos piszesz: - "Podaj liczbe z zakresu od 0 do 500: " no to podaj 0 lub 1.

0

teraz rozumiem :) a tam zamiast 2 już zmieniłem na 0 (2 było żeby sprawdzić czy się zakres ustawia od tej zmiennej)

1 użytkowników online, w tym zalogowanych: 0, gości: 1