[C++] Symulacja maszyny lotto
Ostatnio zmodyfikowano 2013-04-09 19:01
byczkubrony Temat założony przez niniejszego użytkownika |
[C++] Symulacja maszyny lotto » 2013-04-09 01:20:44 #include <iostream> #include <cstdlib> #include <ctime>
using namespace std; int main() { int liczba1 =( rand() % 49 ) + 1; int liczba2 =( rand() % 49 ) + 1; int liczba3 =( rand() % 49 ) + 1; int liczba4 =( rand() % 49 ) + 1; int liczba5 =( rand() % 49 ) + 1; srand( time( NULL ) ); cout << "1 losowanie: " <<(( rand() % 49 ) + 1 ); int liczba =( rand() % 49 ) + 1; do { cout << "\n2 losowanie: " <<(( rand() % 49 ) + 1 ); int liczba1 =( rand() % 49 ) + 1; } while( liczba1 == liczba ); do { cout << "\n3 losowanie: " <<(( rand() % 49 ) + 1 ); int liczba2 =( rand() % 49 ) + 1; } while( liczba2 == liczba1 && liczba2 == liczba ); do { cout << "\n4 losowanie: " <<(( rand() % 49 ) + 1 ); int liczba3 =( rand() % 49 ) + 1; } while( liczba3 == liczba2 && liczba3 == liczba1 && liczba3 == liczba ); do { cout << "\n5 losowanie: " <<(( rand() % 49 ) + 1 ); int liczba4 =( rand() % 49 ) + 1; } while( liczba4 == liczba3 && liczba4 == liczba2 && liczba4 == liczba1 && liczba4 == liczba ); do { cout << "\n6 losowanie: " <<(( rand() % 49 ) + 1 ); liczba5 =( rand() % 49 ) + 1; } while( liczba5 == liczba4 && liczba5 == liczba3 && liczba5 == liczba2 && liczba5 == liczba1 && liczba5 == liczba ); } Niestety zdarza się ,że wylosowane liczby się powtarzają. Niestety tak nie może być. Wskażcie mi proszę w którym momencie popełniam błąd. Może w warunku zakończenia pętli,może jeszcze w czymś innym. Proszę tylko o trop; który, jeśli mogłem to przeczytałem do 16 rozdziału włącznie pozwoli mi na poprawienie błędów. Jeśli brakuję mi jakiejś nowej rzeczy podajcie mi tylko jej nazwę. Z góry dziękuję. Raczkujący uczeń tajników programowania BykuBrony. |
|
usmiech |
» 2013-04-09 09:29:30 Moja sugestia :) Nie trzeba porownywac wszystkich 6 liczb. Petla wykona to sama, wiec krok po kroku... /no w pewnym uproszczeniu /: - okresl ile liczb ma byc losowanych /czyli w tym przypadku 6 z 49/ - metoda bool porownaj tylko kolejna liczbe do poprzedniej /jesli inna to dodaj do tablicy wylosowanych, jeli nie to losuj dalej/ czyli rozpatrujesz tylko 2 liczby.. - na koniec wydrukuj wszystkie 6 liczb na ekranie ... koniec, pozdrawiam :) |
|
Monika90 |
» 2013-04-09 11:39:21 Użyj innego algorytmu. Tworzysz tablicę liczb o rozmiarze 49 i wypełniasz ją liczbami od 1 do 49. Następnie losujesz indeks z przedziału od 0 do 48 i zamieniasz miejscami liczbę o indeksie 0 z liczbą o wylosownaym indeksie. Potem losujesz indeks z przedziału od 1 do 48 i zamieniasz miejscami liczbę o indeksie 1 z liczbą o wylosownaym indeksie. I tak dalej w pętli, w sumie 6 razy. W rezultacie w pierwszych 6 komórkach tablicy będziesz miał wylosowane liczby (6 z 49 bez powtórzeń).
|
|
DejaVu |
» 2013-04-09 13:29:47 |
|
byczkubrony Temat założony przez niniejszego użytkownika |
» 2013-04-09 13:47:40 Dzięki wielkie. Poszukam info o tych tablicach i std::random_shuffle i może się uda. Ale ,może mi Ktoś wyjaśnić czemu liczby losowe w moim kodzie niekiedy się powtarzają? Bo wydaje mi się że pętla ma się robić tak długo aż liczby przestaną być równe. while(liczba1==liczba) czyli gdy false zakończ pętle. Czy dobrze rozumiem? |
|
DejaVu |
» 2013-04-09 17:39:17 Zamień && na || w warunkach. Czyli:
liczba2 == liczba1 && liczba2 == liczba
na:
liczba2 == liczba1 || liczba2 == liczba
|
|
byczkubrony Temat założony przez niniejszego użytkownika |
» 2013-04-09 18:23:01 #include <iostream> #include <cstdlib> #include <ctime>
using namespace std; int main() { int liczba =( rand() % 5 ) + 1; int liczba1 =( rand() % 5 ) + 1; int liczba2 =( rand() % 49 ) + 1; int liczba3 =( rand() % 49 ) + 1; int liczba4 =( rand() % 49 ) + 1; int liczba5 =( rand() % 49 ) + 1; srand( time( NULL ) ); cout << "1 losowanie: " <<(( rand() % 5 ) + 1 ); do { cout << "\n2 losowanie: " <<(( rand() % 5 ) + 1 ); int liczba1 =( rand() % 5 ) + 1; } while( liczba1 == liczba || liczba == liczba1 ); } Tak też nie działa. Jak chcecie skompilujcie. Poczytam o tych całych tablicach i poszukam innego rozwiązania dzięki za czas poświęcony temu tematowi. |
|
pekfos |
» 2013-04-09 18:50:14 Jak chcecie skomplikujcie. |
Ok, dodaj jeszcze kilka pętli. W każdej losuj tylko jedną liczbę i w warunku sprawdzaj, czy jest inna od poprzednio wylosowanych. Wtedy program będzie wystarczająco skomplikowany. wylosuj_pierwsza; do { wylosuj_druga; } while( druga == pierwsza );
do { wylosuj_trzecia; } while( trzecia == pierwsza || trzecia == druga );
|
|
« 1 » 2 |