Lukujen arpominen

random(luku); Arpoo desimaaliluvun väliltä [0,luku] .
round(random(luku)); Arpoo kokonaisluvun väliltä [0,luku].


Komennolla random(luku); voimme arpoa lukuja väliltä: 0…luku. Arvottu luku on aina desimaaliluku. Mikäli haluamme pyöristää desimaaliluvun kokonaisluvuksi, niin sen voi tehdä:
round(desimaaliluku); - komennolla. Jos arpominen laitetaan void draw ( ) -lohkon sisälle, arpominen suoritetaan jatkuvasti uudestaan ja uudestaan. Jos haluamme arpoa kokonaisluvun väliltä [0,luku], arpomiskomento on kirjoitettava muotoon: round(random(luku));

Mikäli haluamme arpoa luvun vain kerran, niin silloin arpominen ja lukujen sijoittaminen muuttujille pitää laittaa heti ohjelman alkuun. Tässä on siis esimerkki globaaleista muuttujista.

Tutkitaan lukujen arpomista esimerkin avulla. Luku1-muuttuja saa desimaaliluvun väliltä 0…1. Luku2-muuttuja saa arvoksi desimaaliluvun väliltä 0…100. Samoin luku3 paitsi, että luku3 on kokonaisluku, johtuen pyöristyskomennosta. Luku4 saa arvoksi satunnaisluvun väliltä 1...39. Arpominen tapahtuu välillä 0...38, mutta kun tähän arvottuun lukuun lisätään 1, niin tällöin arvottu luku on väliltä 1...39.

Sanallinen algoritmi
  1. Määrittele desimaalilukumuuttuja: luku1 ja anna sille arvoksi desmaaliluku väliltä 0...1.
  2. Määrittele desimaalilukumuuttuja: luku2 ja anna sille arvoksi desimaaliluku väliltä 0...100.
  3. Määrittele kokonaislulumuuttuja: luku3 ja anna sille arvoksi kokonaisluku väliltä 0...100.
  4. Määrittele kokonaislukumuuttuja: luku4 ja anna sille arvoksi kokonaisluku väliltä 1...40.
  5. Aseta ikkunan kooksi 500 px vaakaan ja 300 px pystyyn.
  6. Aseta ikkunan taustaväriksi valkoinen.
  7. Aseta tekstin väriksi musta.
  8. Aseta tekstin kooksi 24 px.
  9. Tulosta muuttujan luku1 arvo paikkaan (100,50).
  10. Tulosta muuttujan luku2 arvo paikkaan (100,100).
  11. Tulosta muuttujan luku3 arvo paikkaan (100,150).
  12. Tulosta muuttujan luku4 arvo paikkaan (100,200).

// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
float luku1 =random(1); // Arvotaan desimaaliluku väliltä 0..1
float luku2 = random(100); // Arvotaan desimaaliluku väliltä 0..100
int luku3 = round(random(100)); // Arvotaan kokonaisluku väliltä 0..100
int luku4 = 1 + round(random(39)); // Arvotaan luku väliltä 1..40 
void setup() { 
     size(500,300); // Ikkunan koko
     background(255); // Taustaväri valkoinen
     fill(0); // Tekstin väri musta
     textSize(24); // Fontin koko 24
}
void draw() { text(luku1,100,50); text(luku2,100,100); text(luku3,100,150); text(luku4,100,200); }


Kun ohjelma ajetaan, niin tulostus näyttää esimerkiksi tältä.



Arpominen komennolla random(luku); palauttaa aina desimaaliluvun, siksi luku1 ja luku2 on määritelty double tyyppisiksi eli näihin muuttujiin sijoitetaan desimaalilukuja. Kun lisäämme vielä komennon round(luku); niin saamme desimaaliluvun muutettua kokonaisluvuksi, siksi luku3 ja luku4 muuttujat on määritelty int-tyyppisiksi muuttujiksi eli näihin muuttujiin sijoitetaan vain kokonaislukuja.

Yhteenvetona voimme todeta, että jos haluamme arpoa kokonaisluvun lukuväliltä [a,b], niin siihen pätee seuraava kaava.

a+round(random(b-a)); Komento arpoo satunnaisluvun väliltä [a,b].




Esimerkiksi, jos haluat arpoa luvun väliltä 10...30, niin kirjoita arpomiskomento muotoon:
10+round(random(20));

Huomio: Arpomiskomento voidaan myös lyhentää muotoon:
round(random(a,b)); Komento arpoo satunnaisluvun väliltä [a,b].

Eli jos arvot kokonaisluvun väliltä 10...30, niin arpomiskomento on muotoa: round(random(10,30));