I mange situasjoner ønsker vi å gjøre ting helt tilfeldig:
Det er i hovedsak to forskjellige måter å trekke ut ting på, med eller uten tilbakelegging! (Eller: Med eller uten gjentagelse. )
Kaster vi terning, kan vi få for eksempel denne serien med øyne:
3, 1, 2, 1, 4, 2, 6, 3, 5, 2, ...
Her forekommer 1, 2 og 3 flere ganger, altså trekker vi med tilbakelegging eller med gjentagelse!
(Obs:
Selv om vi kaster terning, kunne vi tenkt oss at vi trakk blant 6 lapper merket 1,2,3,4,5 og 6 fra en eske.
Å trekke lapper fra en eske gir begrepet "tilbakelegging" mening, for å få samme verdi flere ganger må vi legge lappen
tilbake i esken etter trekking!)
/* Kaste terning 6000 ganger og finne gjennomsnittsverdi */var sum: Number = 0.0;for( var i: int = 0; i < 6000; i++) { sum += int( Math.random()*6 ) + 1; }//fortrace("Gjennomsnittsverdi: " + sum/6000;
/* Eksempel i bok side 109, samle opp i en tabell hvor mange ganger vi får 1,2,3,4,5 eller 6 øyne Tabellen kan også brukes til å lage søylediagram med fordelingen av 1, 2, 3, 4, 5 og 6-ere! */var frekvenstabell: Array = [0,0,0,0,0,0];var i: int = 0;// Teller opp i forskjellige celler i frekvenstabell: for( i = 0; i < 6000; i++) { var oyne: int = int( Math.random()*6 )+1; frekvenstabell[oyne-1] ++; }//for// Skriver ut resultatet: for( i=0; i < frekvenstabell.length; i++) { trace("Antall" + (i+1) + " 'ere: " + frekvenstabell[i]); }//for
/* Trekker ut ett vinnerlodd fra 179 solgte lodd nummerert 1,2, ..., 179 */var vinner: int = int( Math.random()*179 ) +1;
/* Trekker ut en vinner blandt verdier/navn lagret i en tabell. */var deltagere: Array = ["Ferkenberg", "Hansen", "Voksholt", "Olsen", ..., "Jensen" ];var indeks: int = int( Math.random()*deltagere.length );var vinner: String = deltagere[indeks];
Terningkast og de de andre kode-eksemplene over er eksempel på trekning med tilbakelegging, da samme antall øyne kan komme flere ganger hvis vi kaster mer enn en gang.
I andre situasjoner kan gjentagelser være uakseptabelt, for eksempel når:
Trikset her er å legge det man skal velge ("pappeksen
med lapper") i en tabell,
trekke en indeks, slå opp i tabellen og til slutt fjerne den cellen man trakk fra
tabellen med array-metoden splice().
Skal vi trekke ut noe i tilfeldig rekkefølge fra en tabell uten tilbakelegging, kan prosessen illustreres omtrent slik:
Trekning nr: Trukket indeks: Originaltabell: Ny tabell: 1 2
"Arnesen" "Bekkstrøm" "Caspersen" "Dusterud"
"Caspersen" 2 1
"Arnesen" "Bekkstrøm" "Dusterud"
"Caspersen" "Bekkstrøm" 3 0
"Arnesen" "Dusterud"
"Caspersen" "Bekkstrøm" "Arnesen" 4 0
"Dusterud"
"Caspersen" "Bekkstrøm" "Arnesen" "Dusterud"
/* Trekke ut første, andre og tredje gevinst i et loddsalg der det er solgt 179 lodd. */var i: int = 0;var loddtabell: Array = new Array(); // Tom tabell// Lager en loddtabell, som skal se slik ut: [1,2,3,4,5, ... ,176, 177, 178, 179] for( i = 0; i < 179; i++ ) { loddtabell.push(i+1); }//for for( i = 0; i < 3; i++ ) { var indeks: int = int( Math.random()*loddtabell.length); // Trekker en indeks/nummer trace("Gevinst nr. " + (i+1) + ": lodd nr." + loddtabell[indeks]); // Slår opp lodd nr i tabellen loddtabell.splice(indeks,1); // Fjerner dette loddet }//for// Kan for eksempel gi utskrift: // Gevinst nr. 1: lodd nr. 117 // Gevinst nr. 2: lodd nr. 19 // Gevinst nr. 3: lodd nr. 43
/* Trekker ut tre vinnere blant verdier/navn lagret i en tabell.Kan også trekke ut for eksempel tre MovieClip objekt blant mange lagret i en tabell og deretter synliggjøre objektet på skjermen ved å sette egenskapen visible til true. */var i: int = 0;var deltagere: Array = ["Ferkenberg", "Hansen", "Voksholt", "Olsen", ..., "Jensen" ];for( i = 0; i < 3; i++ ) { var nummer: int = int( Math.random()*deltagere.length); // Trekker en indeks trace("Gevinst nr. " + (i+1) + " går til " + deltagere[nummer]); // Slår opp lodd nr i tabellen deltagere.splice(nummer,1); // Fjerner dette loddet }//for
/* Trekke ut spørsmål i tilfeldig rekkefølge, eller stokker om en tabell tilfeldig. (Som eksemplet foran, bare at vi trekker for alle cellene i tabellen.) */var i: int = 0;var oppgavenr: Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Originaltabell, viktig å beholde originalen, // når vi endrer kopien: var kopi: Array = new Array(); // Arbeidskopi av originaltabellvar trukket: Array = new Array(); // Tabellen vi skal lage med tilfeldig rekkefølge// Tar en arbeidskopi av originaltabellen for( i = 0; i < oppgavenr.length; i++) { kopi.push(oppgavenr[i]); }//forvar antall: int = kopi.length;for( i = 0; i < antall; i++ ) { var indeks: int = int( Math.random()*kopi.length); // Trekker en indeks trukket.push( kopi[indeks] ); // Legger trukket spørsmålsnummer i ny tabell kopi.splice(indeks,1) // Fjerner det vi trakk fra tabellen }//fortrace( trukket); // Viser ny tabell