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

Generowanie losowej tablicy bez powtorzen

Ostatnio zmodyfikowano 2016-03-20 19:12
Autor Wiadomość
HolyShit
Temat założony przez niniejszego użytkownika
Generowanie losowej tablicy bez powtorzen
» 2016-03-20 19:12:50
Witam.
Staram sie wygenerować losowo tablice bez powtórzeń, ale chce miec pary elementów w tej tablicy o takich samych wartosciach.
Algorytm jest prosty. Tworze listę (użycie listy jest konieczne - projekt na studiach) idaca tak 2,2, 3,3, 4,4 itd.
Potem wybieram funkja rand() indeks losowej komorki listy i przepisuje wartosc do kolejnego poloa tablicy, a potem usowam komorke i zmniejszam zakres losowania randa o 1.
Problem pojawia sie gdy przechodze do praktyki mianowicie ten kod:

int pobierz_wartosc(int indeks, Element *&glowa)
{   Element *temp=glowa;
    Element *pop=glowa;
    Element *nast=NULL;
    int wylosowana=0;
    Element *tmp;
    if(indeks==0)
    {
        tmp=glowa;
        glowa=tmp->next;
        wylosowana=tmp->dane;
        delete tmp;
    }else if (indeks==1)
    {
        tmp=glowa->next;
        glowa=tmp->next;
        wylosowana=tmp->dane;
        delete tmp;
    }else{
    for(int i=1;i<indeks;i++)
    {
        pop=pop->next;
        temp=pop->next;
        nast=temp->next;

    }wylosowana=temp->dane;
    pop->next=nast;
    delete temp;}
    return wylosowana;


}
===========================================================

Element *utworz_liste(int dlugosc)
{
    Element *aktualny, *glowa,*tmp;
    int liczba=2;
    aktualny=NULL;
    glowa=NULL;
    tmp=NULL;

    for (int i=0;i<dlugosc;i++)
    {
        aktualny=new Element;
        aktualny->dane=liczba;
        aktualny->next=NULL;
        if(glowa)
        {
            tmp=glowa;
            while(tmp->next)
            {
                tmp=tmp->next;
            }tmp->next=aktualny;
        }else {glowa=aktualny;}
        if (i%2!=0) {liczba++;}
    }return glowa;
}
============================================================================

void wypelnij_losowymi(int w, int k, int **tab, Element *&glowa)
{
int zakres=w*k;
int wart=0;
int pomoc=0;


    for (int i=0;i<w;i++)
    {
        for (int j=0;j<k;j++)
        {

            srand(time(NULL));
            int indeks=rand()%(zakres);
            wart=pobierz_wartosc(indeks, glowa);
            cout << "W"<< pomoc << " " << wart << endl;
            tab[j]=wart;
            zakres--;
            pomoc++;
            }


        }
    }

=====================================================================
To co mam w mainie:

int main()
{Element *glowa= NULL;
    glowa=utworz_liste(16);
    drukuj(glowa);
    int **TabA;
    

    TabA=tworz_tablice(4,4);
    wypelnij_losowymi(4,4,TabA,glowa);
    cout << endl << "===========================" << endl;
    drukuj_tablice(4,4,TabA);
==========================================================================

Działa, ale tylko czasem tzn. po kolei widze wartosci jakie bedzie przypisywac, ale w wydaje sie losowych miejscach sie wywala, a casem wypełnia całą tablice poprawnie. Nie moge znaleźć niestety bledu.
Jakies wskazowki??

Z góry dziękuje za pomoc ;)
P.S. wiem ze kod mógłby być bardziej "tresciwy" ale zrobilem to na szybko.
P-146289
« 1 »
  Strona 1 z 1