rand-funktiolle käyttöä

Miten sekoittaa korttipakka helposti?

struct kortti pakka[52] = { ... };

void sekoita_pakka(void) { ... }
10284
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat
  • Kannattaa opetella delegoimaan. Itse voi käyttää aikansa vaikka juopotteluun.

    Äänestä

  • Anonyymi kirjoitti:

    Kannattaa opetella delegoimaan. Itse voi käyttää aikansa vaikka juopotteluun.

    Eikä kannata, silloin oppi karkaa käsitä vihulaiselle, itse se on tehtävä, tai tyhmyys valtaa mielen.

    Äänestä

  • w10 on haitake.
    Microsoft sanoo suoraan: Käyttäjien puheita tallennetaan ja kuunnellaan

    Microsoft teki tietosuojalausekkeeseensa muutoksen, mutta ei sanonut keskeyttävänsä käyttäjien kuuntelua.
    Yhdysvaltalainen teknologiayhtiö Microsoft on muuttanut tietosuojalausekettaan. Yhtiö kertoi uutistoimisto Reutersille, että syynä on viime viikkoina pintaan noussut eri teknologiayhtiöiden tapa antaa käyttäjiltä tallennettuja ääninäytteitä muiden ihmisten kuunneltaviksi.
    Lue lisää: Microsoft tallentaa Skype-puheluita – avustajat voivat kuunnella keskusteluja
    Kyse on pienestä osasta äänikomentoja, joita käyttäjät ovat antaneet puhetta tulkitseville digitaalisille avustajille. Microsoftin tapauksessa sen nimi on Cortana, mutta samaa kuuntelua harjoittavat myös ainakin Apple, Google, Amazon ja Facebook. Yhtiöitä on arvosteltu muun muassa siitä, että komentojen päätymisestä vieraiden korviin ei ole kerrottu selvästi käyttäjille.

    – Tajusimme viime aikoina esitettyjen kysymysten perusteella, että meidän pitäisi paremmin täsmentää että joskus ihmiset tarkistavat tätä sisältöä, Microsoft totesi Reutersille.

    Tietosuojalausekkeen muutokset näkyvät myös sen suomenkielisessä versiossa. Siinä sanotaan nyt, että "käsittelemme henkilökohtaisia tietoja [...] sekä automaattisilla että manuaalisilla (ihmisvoimaan perustuvilla) menetelmillä".

    Lisäksi Microsoft sanoo, että "tarkistamme manuaalisesti esimerkiksi lyhyitä ääninäytteitä, joiden alkuperän tunnistettavuuden olemme pyrkineet poistamaan. Niiden avulla parannamme puhepalveluitamme, kuten tunnistusta ja käännöstä".

    Microsoft käyttää paitsi Cortanasta, myös Skypestä kerättyjä ääninäytteitä palvelujensa parantamiseen. Näytteitä kuuntelevat ihmiset ovat sekä Microsoftin että ulkopuolisten yritysten palkkalistoilla.

    Yhtiö ei kuitenkaan sanonut keskeyttävänsä näytteiden kuuntelua. Näin ovat luvanneet tehdä esimerkiksi Apple ja Google.

    Äänestä

Tee dynaaminen lista (=pakka), johon ensin nodeiksi kortit 1-52. Sitten tee toinen dynaaminen lista, johon käydään satunnaisesti kortteja ensimmäisestä listasta. Eli ensin arvotaan luku väliltä 1-52, sitten 1-51 jne. Kortti (node) siis poistetaan aina ensimmäiseltä listalta, jolloin samaa korttia ei voida arpoa uudelleen.

Tuossa vähän apuja dynaamisiin listoihin: https://www.tutorialspoint.com/data_structures_algorithms/linked_list_program_in_c.htm

Äänestä

Vaihda kieli sellaiseen jossa valmis shuffle-funktio.

Äänestä

Taivaallisen+kömpelö+esitys+(web.nchu.edu.tw).+Enkä+kirjoittaisi+tällaiseen+dynaamisia+listojakaan,+koska+korttien+määrä+on+kiinteä.+Osoitintaulukko+voisi+tulla+kyseeseen,+mutta+yksinkertainen+ratkaisu+on+yleensä+paras.+Esimerkiksi+näin:void+sekoita_pakka(void)+{++++unsigned+i;++++for+(i=0;+i<52;+i++)++++++++vaihda_kortit(&pakka[i],+&pakka[(unsigned)+rand()+%+52U]);}vaihda_kortit()+on+funktio+tai+makro,+joka+vaihtaa+parametrina+annetut+kaksi+korttia+keskenään.

Äänestä
  • Kannattaa+muistaa,+että+vaihdettava+indeksi+on+valittava+ensimmäisestä+eteenpäin+(ensimmäinen+mukaanlukien),+jotta+saadaan+harhaton+satunnaisuus.https://en.wikipedia.org/wiki/Fisher–Yates_shuffle#Implementation_errorsEn+tunne+näitä+C-kielen+koukeroita,+joten+korjatkaa+jos+olen+väärässä+mutta+minusta+näyttää,+että+tuossa+vaihdettavaksi+valitaan+mikä+tahansa+pakan+kortti+kun+pitäisi+valita+väliltä+[i+..+51].Eli+korjautuisiko+näin:vaihda_kortit(&pakka[i],+&pakka[i+++(unsigned)+(rand()+%+(52U-i))]);

    Äänestä

  • Kiitän+tarkkaavaisuudesta+ja+palautteesta,+olet+tietenkin+oikeassa.+Esimerkkini+ansiot+lienevätkin+ensisijassa+sen+osoittamisessa,+että+lyhyeenkin+koodiin+saattaa+jäädä+pari+virhettä,+jos+laiminlyö+testaamisen.Esimerkkini+olisi+toki+pitänyt+"nähdä"+virheelliseksi+jo+helpolla+ajatusleikillä:+Otetaan+kuvakortit+J,+Q+ja+K+ja+sekoitetaan+ne+esimerkkini+mukaisella+koodilla.+Silmukan+ensimmäinen+kierros+tuottaa+yhden+kolmesta+mahdollisesta+lopputuloksesta,+toinen+kierros+9:stä+(sisältäen+samoja+yhdistelmiä)+ja+kolmas+27:stä,+mikä+luku+ei+ole+tasan+jaollinen+kuudella+ts.+kolmen+kortin+yhdistelmien+määrällä.+Lopputuloksen+on+siis+oltava+painotettu.Oikeampi+toteutus+on+esittämäsi+mukainen.+Silmukan+pituutta+leikkaisin+yhdellä,+koska+52.+kortti+jäisi+vaihdettavaksi+vain+itsensä+kanssa.for+(i=0;+i<51;+i++)vaihda_kortit(&pakka[i],+&pakka[i+++(unsigned)+(rand()+%+(52U-i))]);Satunnaisuus+ei+ole+harhaton+vieläkään,+sillä+rand()+modulo+tuottaa+painotettuja+satunnaislukuja+aina+milloin+luku+RAND_MAX+1+ei+ole+tasan+jaollinen+jakajalla.+Kuitenkin,+koska+RAND_MAX+on+huomattavan+paljon+suurempi+kuin+50,+vähäinen+painottuminen+voitanee+hyväksyä+tässä+yhteydessä.

    Äänestä

  • Sulut eivät nyt ole aevan paikoillaan, (unsigned) castaus on tuossa varmaankin tekemässä jakolaskusta etumerkittömän..

    Äänestä

Kommentoi aloitusta


Anonyymi kirjoitti:

Miten sekoittaa korttipakka helposti?

struct kortti pakka[52] = { ... };

void sekoita_pakka(void) { ... }

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