Inleiding Programmeren + R

while voorbeeld

» Start

Zolang lus


Inleiding:


Elk jaar verliest een boom al z'n bladeren.

Een boom begint op dag D met B bladeren. 

Op de eerste dag is voor elk blad dat aan de boom zit de kans op afvallen 0.03.

Voor elke volgende dag wordt die kans met 0.03 verhoogd, en blijft voor alle bladeren identiek.


Vraag:


Schrijf een functie in R die 

  • bij aanroep zowel: 
    • het aantal bladeren (B) aan de boom, 
    • als het aantal dagen (D) dat we naar de boom kijken, 
    • als parameter mee krijgt,
  • stopt wanneer er geen blad meer aan de boom zit, of de dagen voorbij zijn,
  • voor elke dag het aantal overgebleven bladeren uitrekent en dat aantal samen met het nummer van de dag op het scherm schrijft.


Antwoord:


bladval <- function(input) {

blad <- input[1]

dag <- input[2]

dagteller<- 1

while ((blad >= 1) &  (dag > 0)) {

blad <- blad - blad * 0.03 * dagteller

dagteller <- dagteller + 1

dag <- dag - 1

cat("op dag",dag,"zitten er nog",blad,"bladeren aan de boom... \n")

}

}


Ter oefening en aanvulling:


  • Schrijf kommentaar, zodat duidelijk wordt in welke regels er wat en waarom gebeurt... 
  • Een boom heeft een geheel aantal bladeren -> zorg voor afronding van variabele blad...
  • Wordt het aantal voorbije dagen wel logisch geteld en weergegeven...?
  • Wat gebeurt er als de variabele input geen numerieke vector met twee getallen is...?
  • Kunnen we dat op tijd controleren...(fout afhandeling)?
  • Stel dat we de afgesproken kans op afvallen van 0.03 procent voor ieder blad apart willen gebruiken om te bepalen of het blad al dan niet van de boom valt. Hoe zouden we dat kunnen aanpakken?


Nog een voorbeeld:


Een al heel oud algoritme is dat van Euclides voor het vinden van de grootste gemene deler van twee getallen. Het is een voorbeeld van een algoritme met een conditie in een lus.

ggd <- function(A, B) {

while (A != B) {

if (A > B) {

A <- A - B

              }

if (A < B) {

B <- B - A

              }

}

cat( "Grootste gemene deler is: ", A)

}

Ter oefening en aanvulling:


  • Schrijf kommentaar, zodat duidelijk wordt in welke regels er wat en waarom gebeurt... 
  • Wat gebeurt er als de variabelen A en B geen getallen zijn...?
  • Kunnen we dat op tijd controleren... (fout afhandeling)?
  • Kunnen we de functie zo herschrijven dat hij expliciete output geeft in plaats van conversationeel.