[ negative7 @ 13.03.2010. 15:57 ] @
Najbolji bi bilo da pokrenete kod,jer nisam siguran kako bi najbolje objasnio.Program radi tacno samo je problem u tome sto
u main-u uvjek nakon sto napravim objekt tipa Loto dobijem iste brojeve lota i u objektu L i u objektu L1...Problem rijesim ako prije ispisa brojeva lota u objektu L1 pozovem funkciju SetNumbers u main-u,ali postoji li ikakvo drugo rijesenje,A npr kad imam Lx(x,y) nedesava se taj problem.jel moze netko objasnit zasto i popravit na drugi nacin bez setnumbers. Evo koda:

Code:

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

using namespace std;

class Loto
{
private:
    int _n,_max;
    int *_num;
    int _reserve_num;
    int Random(int min,int max)
    {
        return rand()%(max-min+1)+min;
    }
public:
    void init(int n,int max)
    {
        _n=n;
        _max=max;
        _num=new int[_n];
        srand(time(NULL));
        SetNumbers();
    }
    
    Loto(int x,int max)
    {
        init(x,max);
    }
    Loto(int x)
    {
        init(x,39);
    }
    Loto()
    {
        init(6,39);
    }
    ~Loto()
    {
        free(_num);
    }
    void SetNumbers()
    {
        for(int i=0;i<_n;i++)
        {
            _num[i]=Random(1,_max);
        }
        _reserve_num=Random(1,_max);
    }
    int *GetArrayofNumbers()
    {
        return _num;
    }
    int GetReserveNumber()
    {
        return _reserve_num;
    }
    friend ostream& operator<<(ostream &out, Loto &L)
    {
        for(int i=0;i<L._n;i++)
        {
            out<<L._num[i];
            if(i<L._n-1)
            {
                out<<",";
            }
        }
        out<<" ("<<L._reserve_num<<")"<<endl;
        return out;
    }
};
void main()
{
    Loto L,L1(12),L2(15,100),L3,L4(10);
    L1.SetNumbers();
    cout<<L<<L1<<L2<<L3<<L4;
}


Sorry ako sam bad objasnio o cemu je rijec
[ Mihajlo Cvetanović @ 13.03.2010. 17:48 ] @
Ovo srand(time()) moraš da pozoveš samo jednom, na početku rada programa. Ono što se dešava je da svaki put kad stvoriš novi Loto objekat ti pozoveš funkciju srand, ali pošto se sve to dešava u deliću milisekunde onda funkcija time uvek vrati istu vrednost, i zato srand uvek proizvodi isti pseudoslučajni niz. Kad posle kreiranja svih Loto objekata pozoveš L1.SetNumbers() onda se nije pozvao srand() nego se prosto uzimaju sledeći brojevi iz pseudoslučajne sekvence, i zato to ispadne različito.

Premesti srand da bude prva funkcija unutar main.
[ negative7 @ 13.03.2010. 18:22 ] @
Zahvaljujem,premjestio sam, sad je dobro,thx
[ Mihajlo Cvetanović @ 13.03.2010. 19:14 ] @
Uzgred, trenutno može da ti se desi da u jednom izvlačenju imaš dva ista broja. Treba da dodaš kod koji će ponavljati generisanje novog slučajnog broja sve dok ne dobiješ slučajan broj koji u tom izvlačenju još nisi dobio.
[ negative7 @ 14.03.2010. 10:07 ] @
A,nisam ni primjetio jbga,dobro a jel mozda neko zna kako mogu pozvat konstruktor iz drugog konstruktora,tako da ne koristim ovu funkciju init.I jos jedna stvar
jel moguce da promijenim boju slova,da ne budu vazda bijela kad pokrenem program.Ako je jel moze netko nadopisat taj potrebni kod.Znam da se netice ove teme ali da sad ne otvaram drugu temu.
[ Mihajlo Cvetanović @ 14.03.2010. 10:36 ] @
U C++ ne možeš da zoveš jedan konstruktor iz drugog (u C# možeš, verovatno i u Javi). Ovo rešenje sa init je upravo onako kako se radi u C++.

Što se tiče boje, donji kod sam našao na CodeProject, ali nemam pojma da li radi. Koristiš ga recimo ovako cout << color(FOREGROUND_BLUE | FOREGROUND_GREEN) << "neki cijan tekst";

Za bliže objašnjenje u vezi sa SetConsoleTextAttribute počni od sledećeg linka http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx

Code:

struct color {
    color(WORD attribute):m_color(attribute){};
    WORD m_color;
};

template <class _Elem, class  _Traits> std::basic_ostream<_Elem,_Traits>&
operator<<(std::basic_ostream<_Elem,_Traits>& i, const color& c)
{
    HANDLE hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdout,c.m_color);
    return i;
}
[ negative7 @ 14.03.2010. 12:13 ] @
Aha,hvala na informisanju,kod sam probo neradi mi al nema veze supat cu jos,a evo jos jedno pitanje.Jel u c++ ili c# moguce ovo:
Recimo ja imam sliku(model) rotora ili parne turbine nesto slicno napravljenu u Cinema 4D ili nekom drugom programu za crtanje,i sad jel ja mogu ubacit tu sliku u c# ili c++ i napravit animaciju simulaciju bilo sto da mi se vrti taj rotor ili turbina koji sam napravio u nekom drugom programu.Pitam samo jel moguce.
[ Mihajlo Cvetanović @ 14.03.2010. 12:33 ] @
Nemam tačnu predstavu šta je to slika napravljena u Cinema 4D, ali odgovor na pitanje "da li je nešto moguće u C++" je skoro uvek DA. Stvar je u tome što to nije pravo pitanje. Pravo pitanje je "koliko mi vremena treba da to napravim". E tu ti ne mogu pomoći.
[ Mihajlo Cvetanović @ 14.03.2010. 12:37 ] @
Uzgred, meni radi ovaj kod iz CodeProject. Treba samo da staviš #include <windows.h> da bi mogle da se koriste te stvari vezane specifično za Windows.
[ negative7 @ 14.03.2010. 12:54 ] @
A,evo ga radi i meni sad,nisam prije nikad radio nista slicno pa nisam znao za windows.h pocetnik sam