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

       
Priemgetallen met de GR.
       
Deze les gaan we een programmaatje voor de GR maken dat een lijst van priemgetallen voor ons produceert.
Zoals je weet is een priemgetal een getal dat precies 2 delers heeft, namelijk 1 en zichzelf  (het getal 1 is geen priemgetal!)
Om te testen of een getal een priemgetal is moet je dus gewoon proberen het door alle getallen tussen 1 en zichzelf te delen.

Als dat nooit lukt heb je een priemgetal.

Programmeurs zien dan direct in hun hoofd een stroomdiagram om te testen of een getal een priemgetal is: 
       

       
Ga na dat dit werkt:  we proberen alle getallen van 2 tot n en zodra we een deler vinden stoppen er mee. Als dat tot het eind niet lukt dan hebben we een priemgetal gevonden.

Hoe test je of een getal n deelbaar is door een getal i?
       
Daar is de integer functie erg handig voor.
Immers, als n deelbaar is door i  dan is  n/i  een geheel getal.  De integer-functie kan testen of een getal geheel is, want als dat zo is dan is  INT(getal) = getal  (immers bij een geheel getal verandert er niets aan het getal als je INT ervan neemt)
       

  n/i  is geheel   als  INT(n/i) = n/i

       
daarmee wordt het stroomdiagram z:
       

       
Een behoorlijke versnelling...
       
Het is niet nodig om alle getallen van 2 tot n te testen.
Dat zit hem in het feit dat delers altijd in koppeltjes voorkomen.  Kijk bijvoorbeeld naar de delers van 24:
24 = 2 12  =  3 8  =  4 6  =  6 4  =  8 3  =  12 2

Omdat  24 = 24 24  is steeds n van beide delers groter dan 24 en de ander kleiner dan 24
Maar dat betekent dat je voor de delers alleen maar de getallen kleiner dan 24 hoeft te testen! Als daar geen deler bij is, is er ook geen deler groter dan 24.

Dat betekent dat we kunnen stoppen met testen zodra i groter dan n is geworden.
Dat geeft het volgende stroomschema:
       

       
Een lijst met priemgetallen maken.

We gaan nu ons programmaatje uitbreiden zodat de gebruiker een getal kan geven (we noemen het P), waarvoor het programma vervolgens alle priemgetallen kleiner dan dat getal afdrukt.
Dat ziet er z uit  (in het grijze blok staat ons vorige stroomschema):
       

       
Ok, en nu een echt programma graag!

Laten we dat stroomschema hierboven gaan vertalen naar een programma op de GR.
Blokje voor blokje maar....... In onderstaande uitleg is Blauw de menuknoppen van je TI,  Rood is wat je op je scherm krijgt, de rest is commentaar/toelichting.

"Lbl" betekent "Label" en is een manier om een plaats in het programma een naam te geven (zodat je er later naar toe kunt gaan als dat nodig is).
   
1. START.  
Dat doe je met  PRGM  NEW   1:Create New
Laten we het bij  Name = maar  "PRIEMGETAL" noemen.

     
2. PRGM  I/O  staat voor  Input/Output en daarmee kun je getallen invoeren of laten uitvoeren.
PRGM I/O 1:  Input "welk getal?",  P
(Die komma is de dikke komma)
     
3. 2  STO  N  geeft in je scherm:  
N
Daar staat eigenlijk:  "Sla het getal 2 op in geheugen N"
     
4. Nu moeten we testen of N groter dan P is.  Als dat zo is, dan stoppen we, als dat niet zo is dan gaan we door.
PRGM 9: Lbl E:  PRGM  1: If  (N  2nd TEST  > P) : PRGM 0: Goto A
(Als N nu groter is dan P dan springt het programma naar plaats A (die we later zullen aangeven). Als dat niet zo is gaat het programma gewoon verder naar 5.
     
5. 2 STO  I   (net zoals stap 3)  2   I
       
6. PRGM 9: Lbl D:
PRGM  1:  If  (I  2nd TEST  > √(N)) : PRGM 0: Goto B

     
7. PRGM  1: If  (MATH num 5: int(N/I) 2nd TEST = (N/I)) : PRGM 0: Goto C
     
8. I + 1 STO I : PRGM 0 : Goto D
     
9. PRGM 9: 
Lbl B:  PRGM I/O 3: Disp  N
     
10. PRGM 9:  Lbl C:  N + 1  STO N : 
PRGM 0:  Goto E
     
11. PRGM 9: Lbl A:  PRGM F: Stop
       
Daarmee ziet ons hele programmaatje er z uit:
       

       
Nou is dit met al die Lbl's en Goto's een erg lelijk programmaatje, maar daar gaat het nou eventjes niet om. Het levert wel priemgetallen. Probeer dat zelf maar uit door het programmaatje te laten lopen:  PRGM EXEC  en kies dan PRIEMGETAL
       
1. Pas het programmaatje hierboven aan zodat het niet alleen de priemgetallen geeft, maar ook zegt HOEVEEL het er zijn. (tip:  maak een teller T die je in het begin nul stelt, en die elke keer als je een priemgetal hebt gevonden eentje hoger wordt).
       
2. Maak een programma dat vraagt om een getal, en dat vervolgens van dat getal alle delers geeft.
       
     

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