Generator lotto, te same liczby po drugim losowaniu

Odpowiedz Nowy wątek
2011-07-24 12:36
0

Na początek Witam.
Dla poćwiczenia chciałem zrobić generator lotto jakich dużo na necie.

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;

int trafien[7] = {0};

void randNums(int *tab, int size)
{
    srand((int)(time (NULL)));
    for (int i = 0; i < size;)
    {
     tab[i] = rand() % 49+1;
     bool rep = false;
     for (int j = 0; j < i; ++j)
     {
        if (tab[j] == tab[i])
        {
            rep = true;
            break;
        }
     }

     if (!rep) ++i;
    }

}

void compareArrays(int *tab, int *tab2, int size)
{
    int ile = 0;
    for (int i = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++j)
        {
            if (tab[i] == tab2[j])
            {
                ++ile;
            }
        }
    }
    switch (ile)
    {
        case 0: trafien[0]++; break;
        case 1: trafien[1]++; break;
        case 2: trafien[2]++; break;
        case 3: trafien[3]++; break;
        case 4: trafien[4]++; break;
        case 5: trafien[5]++; break;
        case 6: trafien[6]++; break;
    }
}

int main()
{
    int tab[6];
    int size = sizeof(tab)/sizeof(tab[0]);
    randNums(tab,size);
    cout << "Wylosowales liczby ";
    for (int j = 0; j < size; ++j)
     {
        cout << tab[j] << " ";
     }
     cout << "\nIle razy chcesz losowac ? ";
     int ile;
     cin >> ile;

     int tab2[6];

     for (int i = 0; i < ile; ++i)
     {
         randNums(tab2,size);
         compareArrays(tab,tab2,size);
         for (int j = 0; j < size+1; ++j)
         {
             cout << trafien[j] << " ";
         }
         cout << endl;
         if(i < ile-1) system("CLS");
     }
    cout << "Trafienia" << endl;
    system("PAUSE");
    return 0;

}

Pierwszą tablicę (dla gracza) losuje poprawnie:

int tab[6];
int size = sizeof(tab)/sizeof(tab[0]);
randNums(tab,size);

Drugą też:

for (int i = 0; i < ile; ++i)
     {
         randNums(tab2,size);

Jednakże, potem losuje te same co w drugiej, czasem już drugą i dalej losuje tam samo jak pierwszą.

Z góry THX za pomoc :)

Kod wrzucaj dla C++, by składnia została pokolorowana - Szewy 2011-07-24 13:00

Pozostało 580 znaków

2011-07-24 12:39
0

Błąd pojawiający się u większości początkujących: srand wywołuje się tylko raz, najlepiej na początku programu.


Not Found
The requested URL /wypasiona_sygnaturka.txt was not found in this brain.
-----
Human/1.0.00 (Earth) Server at Poland Port 65535

Pozostało 580 znaków

2011-07-25 11:26
0

A ok, dzięki dąłem srand-a do main-a i działa :)

Chyba liczy dobrze, gdyż częściej się trafia, że się trafi jedna liczba niż jak żadna.

Mam tylko pytanie, mam dosyć szybki komp (E8400), a tysiąc pełnych losowań, wypisanie itp. zajmuje mu 35 sek.
Wiem, że to nie jest idealny kod, ale zawsze :)

A gdzie pytanie? - hauleth 2011-07-25 11:37

Pozostało 580 znaków

2011-07-25 12:00
bo
0

Wypisywanie jest wolne, zmierz sam czas losowania. Mój algorytm (w Javie, zupełnie inny od Twojego) ma takie czasy wykonania
1000 13ms
10000 53ms
100000 450ms

Pozostało 580 znaków

2011-07-25 12:11
0

Faktycznie, bez wypisywania nawet 1 mln losowań trwa sekundę :) THX

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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