|   | 
				
				 © 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:    
		2   → 
		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)
		  |