© h.hofstede (h.hofstede@hogeland.nl)

LUSSEN
       
Soms wil je in een programma dat één opdracht/berekening een groot aantal keer wordt uitgevoerd.
Stel bijvoorbeeld dat je om één of andere reden wilt weten hoeveel "echte" delers een bepaald getal X heeft (ik noem 1 geen echte deler).
Dan ga je proberen of 2 een deler is, of 3 een deler is, of 4 een deler is,..... enz.
Kortom je wilt een groot aantal keer (voor alle getallen van 2 tot en met X) proberen of  een getal een deler van X is.
 
In zo'n geval gebruik je in je programma een LUS.
Hiernaast zie je een stroomdiagram om het aantal delers van een getal uit te rekenen. Je ziet inderdaad een rode LUS die vaker doorlopen zou kunnen worden.

Toelichting bij de paarse nummers:
1.  Eerst wordt gevraagd van welk getal X je de delers wilt weten.

2.  i is een tellertje dat bijhoudt welke getallen we al geprobeerd hebben. i loopt dus van 2 (de eerste deler die we proberen)  tot en met X (de laatste deler).

3.  A is het aantal delers dat we tot nu toe hebben gevonden. In het begin is dus A = 0.

4.  Hier testen we of i een deler is van X. Hoe dat moet leg ik later wel uit.

5.  Bij ja hebben we een deler gevonden, dus wordt A eentje hoger.

6.  We gaan naar het volgende getal om te testen:  i wordt eentje hoger.

7.  Als i > X hebben we alle getallen gehad en kunnen we stoppen  Bij nee gaan we weer naar 4 om het volgende getal te testen. Je ziet dat deze stap de enige manier is om de lus te verlaten!

8.  Drukt het uiteindelijke aantal delers af.

       
Dit programma zou prima werken, maar is een beetje omslachtig.  Als je zo'n tellertje i hebt waarvan al bekend is hoe ver hij moet gaan, dan kun je handiger de opdracht  PRGM   CTL   4: For(   gebruiken.
Dat werkt als volgt:
Als je invoert  For(I, 2, X) dan weet je programma dat de teller I bij 2 moet beginnen en moet stoppen bij X  (dus tot en met X moet gaan)

Daarmee wordt ons stroomdiagram als hiernaast.

De  programmeeropdracht   For(I, 2, X)....End  zorgt in één keer voor beide oranje opdrachten samen.

       
Hoe test je of een getal een deler is?

Dat gaat vrij makkelijk. Als i een deler is van  X, dan betekent dat, dat  X/i een geheel getal is.
Nou berekent de optie   MATH   NUM    5:int(   van je rekenmachine alleen het gehele deel van een getal (kapt het getal dus af). 
int(5,28) = 5  en  int(
8) = 2  en  int(4) = 4 enz.....
Dus als een getal een geheel getal is, dan geldt  int(X) = X

PROGRAM  DELERS

:  ClrHome
:  Input"Delers van:",X
:  0
A
:  For(I, 2, X)
:     If int(X/I) = (X/I)
:     Then 
:         A + 1
A
:     End
:  End
:  Disp "aantal echte delers is:", A
   

geheel getal:   int(x) = x 

   
Kortom:  Als i een deler van X is, dan is X/i een geheel getal en dan moet gelden  int(X/i) = X/i   (gebruik in het programma uiteraard weer de " = "  bij 2nd   TEST )

Dat geeft samen het programma hiernaast.
       
Om nog (heel) even bij stil te staan....

•  In plaats van int(x) = x te gebruiken kun je ook de bestaande functie  MATH   NUM    4: fPart(x)   nemen. Die neemt alleen het deel van x achter de komma. Dus als fPart(x/i) = 0  dan is i een deler van x.

•  Let nog even op die instructie  A + 1 → A. Je rekenmachine neemt het getal in geheugen A, telt er 1 bij op en slaat dat resultaat opnieuw op in A, waarbij de oude waarde dus automatisch overschreven wordt.
       
If ... Then
 

While ... End

       
       
  OPGAVEN
       
1. Voor een priemgetal geldt dat het aantal echte delers ervan precies 1 is (namelijk alleen het getal zelf)
Verander het programma DELERS hierboven zodat het programma telt hoeveel priemgetallen er kleiner of gelijk aan X zijn.
Laat het programma ze ook allemaal afdrukken!
       
2. Het programma DELERS hierboven doorloopt die lus precies X - 1 keer.
Dat kan efficiënter, want de grotere waarden van I leveren nooit meer een nieuwe deler op (behalve X zelf)
Leg uit hoe je het programma kunt veranderen zodat de lus minder vaak doorlopen hoeft te worden.
       
     
       

© h.hofstede (h.hofstede@hogeland.nl)