arpominen

Tein ohjelma joka arpoo halutun määrän 7 numeron lottorivejä ,ongelmana en saa mitenkään poistettua sitä ettei se arpoisi samaan riviin samoja numeroita.Mikä avuksi?
132514
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

Tämä ongelma tuntuu putkahtavan esiin aina säännöllisin väliajoin. Tietokoneen satunnaisllluvut eivät ole "oikeasti" satunnaisia ennen kuin satunnaislukugeneraattori on alustettu jollain aidolla satunnaisluvulla.

Käytä alustukseen esim. koneen kellonaikaa, käyttäjän vasteaikaa tms.

Äänestä
  • Tossa yksi googlettamalla löytynyt esimerkki:

    If you want different seeds everytime you could use the current time. So you would do something like this:

    #include

    srand(unsigned(time(NULL)));

    Then you will get different numbers from rand() every time without having to specify a seed value.

    Äänestä

Pitää laittaa jo arvotut numerot jemmaan taulukkoon tai muuttujiin ja tarkistaa itse tuplat sekä arpoa tarvittaessa uudelleen. Oikotietä ei ole.

Edellä toisessa vastauksessa olikin jo tärkeä huomio satunnaislukujen satunnaisuudesta. Tarkista siis, että annat satunnaislukugeneraattorille jonkun satunnaisluvun (!!!, heh, heh ¿¿¿¿¿¿¿)siemeneksi, muuten generaattori arpoo joka suorituskerta samat lottonumerot.

Äänestä

Teet taulukon, jossa on kaikki numerot, jotka voidaan arpoa (eli ilmeisesti 0-39). Teet myös muuttujan, joka kertoo kyseisen taulukon koon. Nyt arvot jonkun numeron väliltä 0-"taulukon koko", otat numeron tuosta arvotusta taulukon indeksistä, siirrät taulukon viimeisen alkion ("taulukon koko" -1) tuohon indeksiin, ja pienennät "taulukon koko"-muuttujaa yhdellä. Ja sitten teet saman uudestaan niin monta kertaa, kuin haluat numeroja.

Äänestä

  • Shuffle kirjoitti:

    #include
    #include
    #include
    using namespace std;

    #define MAXNRO 39   // muistaakseni
    #define MAXSAR 6   // - " -


    int main()

    {
    int lottokuponki[MAXNRO];
       int maxnro = MAXNRO;
       int i, nro, tmp;


    srand(time(0)); // alustetaan 'sattuna'


    for (i=0; i

    Äänestä

  • 39 numerosta kirjoitti:

    #include
    #include
    #include
    using namespace std;

    #define MAXNRO 39   // muistaakseni
    #define MAXSAR 6   // - " -


    int main()

    {
    int lottokuponki[MAXNRO];
       int maxnro = MAXNRO;
       int i, nro, tmp;


    srand(time(0)); // alustetaan 'sattuna'


    for (i=0; i

    Lottorivin generoinnin voi tehdä monella tavalla ja sinulla toteutettu ihan näppärästi. Kuitenkin heitän pari kommenttia.
    Ohjelma tarjoaa myös 0:a lottorivin nroksi.
    Sama lottonro voi esiintyä toistamiseen. (?)

    Äänestä

  • roope kirjoitti:

    Lottorivin generoinnin voi tehdä monella tavalla ja sinulla toteutettu ihan näppärästi. Kuitenkin heitän pari kommenttia.
    Ohjelma tarjoaa myös 0:a lottorivin nroksi.
    Sama lottonro voi esiintyä toistamiseen. (?)

    Sama lottonro EI esiinny toistamiseen - jos esiintyy niin on VIRHE.

    Jos alkaa 0'llasta niin selviää siitä osoittimen arvoja muuttamalla.

    Muistin varaisesti (= 20 vuoden takaa) tehty ja pikaisesti kokeiltu.

    Äänestä

  • roope kirjoitti:

    Lottorivin generoinnin voi tehdä monella tavalla ja sinulla toteutettu ihan näppärästi. Kuitenkin heitän pari kommenttia.
    Ohjelma tarjoaa myös 0:a lottorivin nroksi.
    Sama lottonro voi esiintyä toistamiseen. (?)

    Yksi tapa:
    Teet taulukon jossa on numerot 1-39.
    Sekoitat taulukon.
    Otat vaikka 7 ensimmäistä taulukon alkiota =)

    Äänestä

  • on oikein kirjoitti:

    Sama lottonro EI esiinny toistamiseen - jos esiintyy niin on VIRHE.

    Jos alkaa 0'llasta niin selviää siitä osoittimen arvoja muuttamalla.

    Muistin varaisesti (= 20 vuoden takaa) tehty ja pikaisesti kokeiltu.

    /* DECLARE HEADERS
    */



    #include
    #include // for srand and rand
    #include // for time
    using namespace std;

    #define MAXNRO 39   //
    #define MAXSAR 7   //


    int main()

    {
    int lottokuponki[MAXNRO];
       int maxnro;
       int i, j, nro, tmp;


    srand(time(0)); // alustetaan 'sattuna'

       for(j=0; j < 100; j )
       {

       maxnro = MAXNRO-1; // korjattu

    for (i=0; i

    Äänestä

Aurinko on varmaan sekoittanut pääni - lopullisesti, kun ryhdyin tähän hommaan. ;-)

Ohjelma käsittelee pseudo-random lukuja 1..10 ja valitsee niitä 5 kpl. Esimerkin omaisesti ohjelmassa on kaksi taulukkoa jotka kuvaavat kysymääsi ongelmaa. Taulukko2 on se mitä haet, muu sälä pelkkää rekvisiittaa. Tee tästä lottoarpoja muuttamalla ohjelman raja-arvoja.


//pseudo-random demo "random5.cpp"//

#include
#include
#include //randomin siemenlukua varten
#include
#include
#include
#include

void vaihda(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//-------------
void lajittele(int maara, int luku[])
{
int k, l;
for (k=0;k

Äänestä

Kannattaa käyttää ns. harvaa taulukkoa. Ohjeet ja valmis lotto-esimerkki löytyy Simo Silanderin Ohjelmointi Pro Training -kirjasta, josta löytyy myös nettiversio osoitteesta: http://cs.stadia.fi/~silander/ohjelmointi/

Äänestä

Kommentoi aloitusta


Jjp kirjoitti:

Tein ohjelma joka arpoo halutun määrän 7 numeron lottorivejä ,ongelmana en saa mitenkään poistettua sitä ettei se arpoisi samaan riviin samoja numeroita.Mikä avuksi?

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