|
© 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 |
|
|
|
|
|
|
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. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|