» »

[C++] Random "ne dela"?

[C++] Random "ne dela"?

Twix ::

Torej mal se igram z enim programčkom; spodnja koda naključno generira 10 števil, ki se nebi smele ponavljati, ampak enkrat deluje pravilno, drugič se številke ponovijo.. Vem, da se da drugače nardit , ampak mene zanima konkretno tukj zakaj enkrat deluje, drugič ne?
#include <iostream>

using namespace std;

int main()
{
    int tab[10] = { 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 };

    srand(time(NULL));
     
    int x; 
    int a=0; 
    for(int i=0; i<2; i++)
    {
      for(int j=0; j<5; j++)
      {       
           x=rand()%10;  
       
           
           for(int k=0; k<10; k++) 
           {
              if(tab[k]==x) 
              {
                  x=rand()%10;  
                  k=0; 
              }
           }
           tab[a++]=x; 
           cout<<" "<<x; 
}
      cout<<endl;
              
    } 
   
    return 0; 
   
}

Output: - Napačen http://codepad.org/o2vIK1XU
8 5 4 7 8
9 3 1 2 0

Pravilen: http://codepad.org/juaU8JHo
3 1 9 8 0
2 3 6 7 5


Kaj delam narobe? Ni mi jasno :/ Hvala
The world is a dangerous place, not because of those who do evil,
but because of those who look on and do nothing. Apple has a patent on patent-
ing things they didn't invent. arka putana! :D hašek :D HVALA EDWARD SNOWDEN!

Blinder ::

if(tab[k]==x)
              {
                  x=rand()%10; 
                  k=0;
              }


Mogoče je tle problem. x naprimer je 8 in je že vsebovan v tabeli. Torej on gre ponovno dodelit random vrednost x-u in včasih se zgodi, da mu dodeli glih 8.
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

Mavrik ::

Problem je v tem, da v primeru, če najdeš podvojeno število v tabeli zbereš naključnega novega, potem pa NE preveriš a je tisto novo število že v tabeli ;)
The truth is rarely pure and never simple.

amacar ::

Problem je, da namesto da daš k=0, ga daj na -1, ker se iz 0 takoj spremeni na 1 in zato ne preverja elementa na tab[0].

Twix ::

Jap maš prov, zanka ne začne od nule, ko spremenim k, ampak k poveča za 1.

Ma sj sm čorav, če bi mal bolj pogledal rezultate bi lahko opazu, da, kadar pride do ponovitve, je vedno ponovljena prva številka..

Blinder je izjavil:

if(tab[k]==x)
{
x=rand()%10;
k=0;
}


Mogoče je tle problem. x naprimer je 8 in je že vsebovan v tabeli. Torej on gre ponovno dodelit random vrednost x-u in včasih se zgodi, da mu dodeli glih 8.

k se vedno, ko pride do primerjanja postvi na 0 oziroma -1 in tko začne spet primerjat..

Hvala za tko hitre odgovore
The world is a dangerous place, not because of those who do evil,
but because of those who look on and do nothing. Apple has a patent on patent-
ing things they didn't invent. arka putana! :D hašek :D HVALA EDWARD SNOWDEN!

Zgodovina sprememb…

  • spremenil: Twix ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Keylogger

Oddelek: Programska oprema
352646 (1373) Blisk
»

Linksys WRT54G In Tomato Firmware (strani: 1 2 )

Oddelek: Omrežja in internet
7418808 (11745) Hayabusa
»

linux vprašanje nujno

Oddelek: Pomoč in nasveti
71504 (1438) fokz8
»

Pomnilnik - nastavitve

Oddelek: Pomoč in nasveti
11826 (729) Xserces
»

IIS 6.0 LOG

Oddelek: Operacijski sistemi
51013 (984) Mr.B

Več podobnih tem