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 slumpmä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 slumpmä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
-
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.
-
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.
-
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