Inleiding Programmeren + R

repeat voorbeeld

» Start

Herhaal lus


We doen het zelfde probleem als bij de Zolang lus, om het verschil tusen de while en de repeat goed te laten zien.


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(blad,dag) {

        dagteller<- 1

        repeat {    # start van de lus

            afval <- round(blad * 0.03 * dagteller) # rekenen met hele bladeren

            blad <- blad - afval  # restant aan bladeren

            dagteller <- dagteller + 1 # weer een dag voorbij

            dag <- dag - 1 # we gaan naar volgende dag

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

            if ((blad <= 1) | (dag < 1)) { # stopvoorwaarde

                break

                }

            }

        }


Waarin verschilt deze oplossing met de repeat lus nu met het while voorbeeld?


  • Let op de plaats van de stopvoorwaarde ->
  • Niet aan het begin van de lus, maar aan het eind als de opdrachten tenminste 1 x gedaan zijn
  • Let op de vorm van de stopvoorwaarde ->
  • Er wordt gebruik gemaakt van de break functie om te kunnen stoppen
  • Let op de inhoud van de stopvoorwaarde ->
  • blad <= 1 ipv blad>=1 ; de | ipv de & ; dag<1 ipv dag>0


Ter oefening en aanvulling:


  • Wordt het aantal voorbije dagen wel logisch geteld en weergegeven...?
  • Wat gebeurt er als er bij aanroep van de functie geen 2 argumenten worden gegeven?
  • 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?