satunnaisgeneraatori..??

Miten luodaan satunnaisgeneraattori, mikä ei tulosta kahta samanlaista numero peräkkäin C -kielellä..?? En miellään saa väänettyy vaikka kui yrittää...
7629
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Ilmeisesti olet keksinyt miten satunnaislukuja tehdään ?

Kävikö mielessä että voit ottaa edellisen arvotun talteen muutujaan, ja arpoa niin pitkään että on eri arvoa.

Äänestä
  • kyl mie tajuun ton perusperiaatteen mut en vaan oikeen saa kehiteltyy sellasta functioo joko terkastas onks samoja vai ei....??

    Äänestä

tyytyy sellaiseen mikä ei arvo numeroita mihinkään jakaumaan perustuen vaan tosiaan ihan hatusta heittää niitä numeroita, otat vaikka kellonajasta(millisekunnit) jonkun numeron ja katsot ettei se ole sama kuin edellinen funktion palauttama numero.

Äänestä

tehdä satunnaisluku generaattori joka takaisi että kaksi peräkkäistä lukua eivät olisi samoja. Vasinkin jos lukujoukko on pieni (esim kokonaislukuja 0-36). Muuten se ei olisi mikään satunnaislukugeneraattori.

Jos välttämättä haluat kirjoittaa itse satunnaislukugeneraattorin voit tutustua esim. Mersenne Twister tai Blum-Blum-Shub algoritmeimin.

Helpointa on luonnollisesti käyttä C:n sisäänrakennettu rand()-funktio ja tehdä tarkastus että peräkkäiset luvut eivät ole samoja, esim:

int lukualue, vanhaluku, uusiluku;
int lukumäärä;

lukualue = 100; //tuotetaan lukuja 0-100
lukumäärä =50; //tuetetaan sata satunnaislukua

vanhaluku = rand()*lukualue;

for(int i=0; i

Äänestä
  • Alkup. kirjoittaja ajoi varmaankin takaa sitä, että satunnaisuus ilmenee myös eri ajokerroilla.

    Alusta satunnaislukugeneraattori ohjelman alussa näin:
    srand((unsigned)time(NULL));

    Ja käytä vasta sen jälkeen rand()-funktiota.

    Äänestä

Tää on esin mitä Dekphissä olen käytänyt koska kyseesää on inline assemblu niin onnistuu jokaisella valistuneella kielellö.

asm
PUSH EDI

MOV EAX, MF3
MUL M3
MOV ECX,EAX
MOV EAX, M2
MOV EDI,EDX
MOV M3, EAX
MUL MF2
ADD ECX,EAX
MOV EAX, M1
ADC EDI,EDX
MOV M2,EAX
MUL MF1
ADD ECX,EAX
MOV EAX,M0
ADC EDI,EDX
MOV M1,EAX
MUL MF0
ADD EAX,ECX
ADC EDX,EDI
ADD EAX,MC
ADC EDX,0
MOV M0,EAX
MOV MC,EDX
LEA EDI,EXTEND
MOV [EDI],EAX
FILD EXTEND

POP EDI

FMUL F2M32
end;

Äänestä
  • Muuten hyvä asm -koodi muttei oo paljon käyttöö ku puuttuu muuttujat. Mitä ovat esim. M1,M2,M3,MF2,MF3 ?
    Toiseksi kannattais varmaan käytellä muistiosoitteista luvussa ja kirjoituksessa hakasulkeita et ois paremman näköstä ;)
    Jotenki on kyll semmonen muistikuva et prossuissaki oli jonkinlainen satunnaislukugeneraattori. En vaan jaksa muistaa miten luvun sai ulos.

    Äänestä

Kommentoi aloitusta


kysymysmerkki2 kirjoitti:

Miten luodaan satunnaisgeneraattori, mikä ei tulosta kahta samanlaista numero peräkkäin C -kielellä..?? En miellään saa väänettyy vaikka kui yrittää...

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu