Slump

Slump i samband med datorprogram är inget trivialt problem. Ett slumpvalt tal ska vara oförutsägbar men en dator är allt annat än det. Om den befinner sig i samma läge igen är det stor risk att det generas samma slumptal igen. Många experter anser därför att slumptal inte alls är slump­mässiga, och föredrar därför att tala om pseudoslumptal. Det behövs särskild för krypteringen äkta, utförutsägbara tal även om man känna till hur den genereras. Då tas ofta radioaktivitet eller radiobrus till hjälp. Men vanliga pseudoslumptal är tillräckligt slump­mässiga för att kunna fungera för spel och dylikt.

Kodexempel

Processing bygger på programmeringsspråket JAVA och vi använda JAVAs sätt att generera (pseudo-)slumptal. Ett litet program som illustrerar hur det går till:


import java.util.Random; 
//Variabler
int helSlumpTal;
double decimalSlumpTal; 

Random rnd = new Random(); 

void setup(){
size(500,50);
textSize(30);
}

void draw(){
   background(0);
   text(helSlumpTal, 20,30);
   text(decimalSlumpTal + "", 120,30);
}

void keyPressed(){
  helSlumpTal = rnd.nextInt(1000);
  decimalSlumpTal = rnd.nextDouble(); 
}

avgörande rader

rad kod betydelse
1 import java.util.Random; Länk till ett sk JAVA-bibliotek (library, *.jar)
6 Random rnd = new Random(); Här skapas ett sk Random-objekt, en slumptalgenerator. De kommer kunna leverera slumptal i ett önskad intervall
20 helSlumpTal = rnd.nextInt(1000); Begära ett slumptal mellan 0 och 999. Ett heltal som kopieras till helSlumpTal
21 decimalSlumpTal = rnd.nextDouble(); Begära ett slumptal mellan 0.0 och mindre än 1. Ett decimaltal som kopieras till decimalSlumpTal.

tips och trix

För andra talområden behöver vi räkna om dessa slumptal. Tänk så här: hur långt ifrån ligger största och minsta tal. Och hur mycket måste talen sedan förskjutas till rätt område.

Behov kod
-1000 till 0 helSlumpTal = -1 * rnd.nextInt(1000); // eller
helSlumpTal = rnd.nextInt(1000) - 2000;
tal mellan -100 och 100 helSlumpTal = rnd.nextInt(200)-100;
decimaltal 0 till 10 decimalSlumpTal = 10 * rnd.nextDouble();

Laboration 1

  1. Ta igen fram uppgiften om tegelväggen. (iteration-laboration 1.4) Lägg att det välj slumpvis olika varianter av mörkröd för att rita tegel efter tegel. För att få en mer naturligt utseende.

  2. Ett program som rita 100 små cirklar på slumpvalda ställen på skärmen. fönstret ska vara 800x600.

    • Utökning 1: Även färgen ska beror på slump.
    • Utökning 2: Se till att ingen cirkel går över fönstrets ram.

    • Utökning 3: Fråga användaren efter antal cirklar. Programmet ska slumpa positionen och rita ut de och draw en linje mellan första och andra, andra och tredje, ..... ,sista och första.

  3. Ladda ner denna zipp-fil. I den finns kod och filer som visa hur man använder bilder på tärningar. Unzip det i lämplig mapp och öppnar slumpDice.pde. Gör om så det simuleras en tärningskast med 5 tärningar. Exempel