Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Symulacja maszyny lotto

Ostatnio zmodyfikowano 2013-04-09 19:01
Autor Wiadomość
byczkubrony
Temat założony przez niniejszego użytkownika
[C++] Symulacja maszyny lotto
» 2013-04-09 01:20:44
C/C++
#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.
P-80249
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 :)
P-80252
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ń).
P-80257
DejaVu
» 2013-04-09 13:29:47
Inna opcja: wypełniasz tablicę liczbami od 1 do 49, po czym wywołujesz std::random_shuffle na tej tablicy (http://www.cplusplus.com/reference/algorithm/random_shuffle/). Potem wypisujesz pierwsze 6 liczb z tablicy i finito.
P-80258
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?
P-80259
DejaVu
» 2013-04-09 17:39:17
Zamień && na || w warunkach. Czyli:
C/C++
liczba2 == liczba1 && liczba2 == liczba
na:
C/C++
liczba2 == liczba1 || liczba2 == liczba
P-80269
byczkubrony
Temat założony przez niniejszego użytkownika
» 2013-04-09 18:23:01
C/C++
#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.
P-80275
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.
C/C++
wylosuj_pierwsza;
do
{
    wylosuj_druga;
}
while( druga == pierwsza );

do
{
    wylosuj_trzecia;
}
while( trzecia == pierwsza || trzecia == druga );

//itd..
P-80276
« 1 » 2
  Strona 1 z 2 Następna strona