[lekcja 16] gra losująca liczbę z przedziału od 1 do 1000
Ostatnio zmodyfikowano 2013-04-11 16:12
wojtek.997 Temat założony przez niniejszego użytkownika |
[lekcja 16] gra losująca liczbę z przedziału od 1 do 1000 » 2013-03-07 23:19:53 Witam! Mam problem z poprawnym napisaniem programu z zadania domowego z lekcji 16. oto kod stworzony przeze mnie: #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba; int liczbaa =( rand() % 1000 ) + 0; int liczbaaa =( rand() % 1000 ) + 0; do { std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl; std::cin >> liczba; std::cout << "Wylosowana liczba to " << liczbaa << std::endl; if( liczba == liczbaa ) std::cout << "Zgadles" << std::endl; / w tym miejscu chcia ł bym wstawi ć jaki ś koniec, kt ó ry: je ś li na ekranie wypisze "Zgadles" to zako ń czy program. else std::cout << "Nie zgadles" << std::endl; / a je ś li "nie zgadles" to bedzie kontynuowa ł prac ę programu do momentu zgadni ę cia std::cout << "Wprowadz ponownie liczbe od 1 do 1000" << std::endl; std::cin >> liczba; std::cout << " Ponownie wylosowana liczba to " << liczbaaa << std::endl; do { if( liczba == liczbaaa ) std::cout << "Zgadles" << std::endl; else std::cout << "Nie zgadles" << std::endl; } while( liczba == liczbaaa ); } while( liczba == liczbaa ); do { if( liczba == liczbaaa ) std::cout << "Zgadles" << std::endl; else std::cout << "Nie zgadles" << std::endl; } while( liczba == liczbaaa ); return 0; }
Co muszę zmienić w tym kodzie? |
|
hit |
» 2013-03-08 09:30:42 Przede wszystkim komentarze zapisuje się po "//" a nie jednym "/".
Po drugie po co losujesz 2 razy takie same zmienne jak liczbaa i liczbaaa ( nazywanie zmiennych też dziwne ). Poza tym, skoro chcesz losować z przedziału 1-1000, to powinieneś mieć zmienna = rand() % 1000 + 1. Po co w ogóle dodawać zero? I w całym programie wystarczy 1 pętla do, reszta jest niepotrzebna.
A i jeszcze jedno, warunek w Twojej pętli do while jest taki, że jeśli podasz poprawną liczbę to będzie się dalej wykonywała. |
|
wojtek.997 Temat założony przez niniejszego użytkownika |
» 2013-03-08 13:08:42 To jaki powinien być warunek? |
|
krzyk |
» 2013-03-08 14:10:38 Zadużo kodu. do { wprowadz liczbe if liczba taka sama jak wylosowana liczba zgadles else nie zgadles } while( liczba inna niz wylosowana liczba ) |
|
wojtek.997 Temat założony przez niniejszego użytkownika |
» 2013-03-08 15:52:48 #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba; int liczbaa =( rand() % 1000 ) + 1; do { std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl; std::cin >> liczba; std::cout << "Wylosowana liczba to " << liczbaa << std::endl; if( liczba == liczbaa ) std::cout << "Zgadles" << std::endl; else std::cout << "Nie zgadles" << std::endl; } while( liczba != liczbaa ); return 0; } Po wprowadzeniu takiego kodu, uruchomieniu go wpisaniu zlej liczby - wyskakuje, ze nie zgadlem (dobrze), wiec wpisuje znowu liczbe. Liczbe ktora wylosowal jest taka sama jak w poprzednim losowaniu. Dlaczego? |
|
hit |
» 2013-03-08 19:19:33 Ponieważ losujesz ją przed pętlą "do while". Jest ona przypisana do zmiennej liczbaa w momencie uruchomienia programu i tak pozostaje. Jeśli chcesz żeby z każdym obrotem pętli była inna to musisz ją umieścić wewnątrz. O ile dobrze zrozumiałem, chcesz coś takiego: #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba, liczba2; do { liczba2 =( rand() % 1000 ) + 1; std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl; std::cin >> liczba; std::cout << "Wylosowana liczba to " << liczba2 << std::endl; if( liczba == liczba2 ) std::cout << "Zgadles" << std::endl; else std::cout << "Nie zgadles" << std::endl; } while( liczba != liczba2 ); return 0; }
|
|
wojtek.997 Temat założony przez niniejszego użytkownika |
» 2013-03-10 01:00:12 A co zmienic w tym kodzie. Gdy ma sprawdzic czy liczba miesci sie w przedziale 1 - 1000 i gdy za pierwszym razem wpisze np 1001 to dziala (a gdy wpisze 0 to uznaje ze liczba miesci sie w przedziale 1 - 1000), ale gdy to sama liczbe wpisze za drugim razem to juz nie. Kolejny problem to, to ze zaraz po tym znowu nie losuje roznych liczb tylko te same. A to czemu? Przeciez jest to umieszczone w petli do.. While. #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba, liczbaa; int liczbaaa = 1; do { liczbaa =( rand() % 1000 ) + 1; std::cout << "Wprowadz liczbe od 1 do 1000" << std::endl; std::cin >> liczba; if( 1000 >= liczba >= 1 ) { std::cout << "Wylosowana liczba to " << liczbaa << std::endl; std::cout << "Liczba strzalow wynosi " << liczbaaa++ << std::endl; if( liczba == liczbaa ) std::cout << "Zgadles" << std::endl; else std::cout << "Nie zgadles" << std::endl; } else std::cout << "Wprowadz liczbe z zakresu 1 - 1000" << std::endl; std::cin >> liczba; std::cout << "Wylosowana liczba to " << liczbaa << std::endl; std::cout << "Liczba strzalow wynosi " << liczbaaa++ << std::endl; if( liczba == liczbaa ) std::cout << "Zgadles" << std::endl; else std::cout << "Nie zgadles" << std::endl; } while( liczba != liczbaa ); return 0; }
|
|
sasa32010 |
» 2013-03-16 21:26:58 |
|
« 1 » 2 |