Rozdzial 16ty. Pseudolosowe liczby calkowite.
Ostatnio zmodyfikowano 2016-04-11 22:25
Grzegorzdut Temat założony przez niniejszego użytkownika |
Rozdzial 16ty. Pseudolosowe liczby calkowite. » 2016-03-13 12:57:13 Hej, moj kod wyglada tak: #include <iostream> #include <cstdlib> #include <ctime> int main()
{ bool check; int zakres; int zgadula; int proba; int liczba; proba = 0; srand( time( NULL ) ); zakres =(( rand() % 1000 ) + 1 ); liczba = zakres; std::cout << "Program wlasnie wylosowal liczbe od 1 do 1000. " << liczba << std::endl; do { std::cout << "Zgadnij jaka to liczba? " << std::endl; std::cin >> zgadula; check = std::cin.fail(); std::cin.clear(); std::cin.sync(); if( zgadula < 1 || zgadula > 1000 || check ) { std::cout << "To nie jest liczba od 1 do 1000." << std::endl; do { std::cout << "Zgadnij jaka to liczba? " << std::endl; std::cin >> zgadula; check = std::cin.fail(); std::cin.clear(); std::cin.sync(); if( zgadula < 1 || zgadula > 1000 || check ) std::cout << "To nie jest liczba od 1 do 1000" << std::endl; } while( zgadula < 1 || zgadula > 1000 || check ); } proba++; if( zgadula < liczba ) std::cout << "Komputer wylosowal wincyj... Sprobuj jeszcze raz." << std::endl; if( zgadula > liczba ) std::cout << "Komputer wylosowal mniejsza liczbe... Sprobuj jeszcze raz." << std::endl; if( zgadula = liczba ) std::cout << "Bejerka! Trafiles! " << std::endl << "Udalo ci sie trafic za " << proba << " razem." << std::endl; } while( zgadula != liczba ); return 0; }
Program przyjmuje while( zgadula != liczba ); jako prawde, jesli zgadula będzie w przedziale 1-1000. Wydaje mi sie, ze liczba to caly zakres niezależnie od wylosowanej liczby. Jak wyciagnac te konkretna wylosowana wartosc? |
|
Matei |
» 2016-03-13 13:05:34 Nie jestem pewien czy o to Ci chodzi, ale po zmianie warunków ze zwykłych if na else if program działa jak należy. Powinno to wyglądać tak: if( zgadula < liczba ) std::cout << "Komputer wylosowal wincyj... Sprobuj jeszcze raz." << std::endl;
else if( zgadula > liczba ) std::cout << "Komputer wylosowal mniejsza liczbe... Sprobuj jeszcze raz." << std::endl;
else if( zgadula = liczba ) std::cout << "Bejerka! Trafiles! " << std::endl << "Udalo ci sie trafic za " << proba << " razem." << std::endl; |
|
Grzegorzdut Temat założony przez niniejszego użytkownika |
» 2016-03-13 13:12:14 Dzieki. Czy ktos moglby wytlumaczyc dlaczego w moim przypadku program przechodzil dalej pomimo } while( zgadula != liczba ); ? Bo nie bede mogl spac. :P |
|
Matei |
» 2016-03-13 13:22:02 Dopiero teraz to zauważyłem, ale prawdopodobnie to jest powodem. Mianowicie masz złą instrukcję porównania if( zgadula = liczba ) std::cout << "Bejerka! Trafiles! " << std::endl << "Udalo ci sie trafic za " << proba << " razem." << std::endl; To w if to nijako przypisanie i to pewnie przez to twój program zaczyna szaleć :P Jak to powinno wyglądać w teorii: if( a == b ) {...} |
|
KrulTibianus |
» 2016-04-11 22:25:11 Moje rozwiązanie z jedną pętlą: #include <iostream> #include <cstdlib> #include <ctime>
int main() { int wylosowana, proby = 0, strzal; srand( time( NULL ) ); wylosowana =(( std::rand() % 1000 ) + 1 ); std::cout << "Zgadnij liczbe 1-1000: "; do { std::cin >> strzal; if( std::cin.fail() ||( strzal < 1 ) ||( strzal > 1000 ) ) { std::cout << "Podaj liczbe z zakresu 1-1000!" << std::endl; std::cin.clear(); std::cin.sync(); } else if( strzal < wylosowana ) { proby++; std::cout <<( "Za malo. Probuj dalej: " ); } else if( strzal > wylosowana ) { proby++; std::cout <<( "Za duzo, probuj dalej: " ); } } while( strzal != wylosowana ); std::cout << "No, w koncu zgadles, ze to " << wylosowana << std::endl; std::cout << "Odgadles dopiero za " << proby + 1 << " razem!"; return 0; } |
|
« 1 » |