Programmeren in REXX/Voorbeeld1: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
Geen bewerkingssamenvatting
GuyDC (overleg | bijdragen)
Betere zinsopbouw, kleine foutjes
Regel 1:
<!--{{Programmeren in REXX}}-->
HierNu gaanhebben we genoeg elementen om een eerste werkend voorbeeld van REXX programma te bestuderen. WeHet willenzal de priemgetallen tussen 1 en 100 opzoeken.
=Ons eerste programma=
Hier gaan we een eerste werkend voorbeeld van REXX programma bestuderen. We willen de priemgetallen tussen 1 en 100 opzoeken.
 
Eigenlijk moeten we voor elk getal tussen 1 en 100 nagaan of het deelbaar is door één van de priemgetallen kleiner dan het getal.
Maar er zijn een aantal verbeteringen mogelijk aan deze werkwijze.
* Priemgetallen zijn onpare getallen, met één uitzondering, het getal 2. Het is dus al nutteloos pare getallen te gaan onderzoeken. We gaan ervan uit dat we intuitief al weten dat 2 een priemgetal is en dat testen we ook niet meer.
 
* Stel dat we 23 aan het testen zijn. Voorgaande priemgetallen zijn 2, 3, 5, 7, 11, 13, 17. Delen door 2 testen we al niet want we werken enkel met onpare getallen. In dit geval gaat de deling door 3 niet. Maar moeten we nog testen op een deling door 5 (en hoger)&nbsp;? Een decimale deling door 5 geeft: 4.6. Dus, alvast niet deelbaar door 5, en het resultaat is zelfs al kleiner dan 5. Dus zal er nooit een nog groter priemgetal te vinden zijn dat een deler is van 23. Kortom, eens het kwadraat van een priemgetal groter is dan ons te onderzoeken getal weten we dat we een nieuw priemgetal hebben gevonden, en kan de lus stoppen.
Priemgetallen zijn onpare getallen, met één uitzondering, het getal 2. Het is dus al nutteloos pare getallen te gaan onderzoeken. We gaan ervan uit dat we intuitief al weten dat 2 een priemgetal is en dat testen we ook niet meer.
 
Stel dat we 23 aan het testen zijn. Voorgaande priemgetallen zijn 2, 3, 5, 7, 11, 13, 17. Delen door 2 testen we al niet want we werken enkel met onpare getallen.
In dit geval gaat de deling door 3 niet. Maar moeten we nog testen op een deling door 5 ? Eigenlijk niet, want als de deling door 5 zou opgaan, dan hebben we een hele rest die ook nog een priemgetal of veelvoud ervan moet zijn. Maar dit kan geen priemgetal groter dan 5 zijn, en 2 en 3 hebben we al uitgesloten. Kortom, het is niet nodig verder te testen indien ons getal kleiner is dan het kwadraat van het priemgetal (5² in ons geval).
 
Laten we nu ons programma bestuderen.
Regel 20 ⟶ 16:
5 | priem.1=2 /* Ons eerste priemgetal kennen we */
6 | z=1 /* onze priemgetallenteller */
7 | say 2 priem.1 /* We tonen ons eerste priemgetal */
8 | do i=start to einde by 2 /* lus van start tot einde, per 2 */
9 | do j=2 to z /* lus over al gevonden priemgetallen */
Regel 36 ⟶ 32:
 
==Bespreking==
'''Lijn 1''': alhoewel een REXX programma moétslechts op sommige platformen met een commentaar beginnen.moet Hetstarten is het toch een goede gewoonte hier op z'n minst te schrijven wat het programma doet. Er kan ook een auteur, creatiedatum en zelfs historiek aan toegevoegd worden.
<br>'''Lijn 2''': we definiëren de variabele ''start'' en geven ze de waarde 3 (onze effectieve start na het "gekende" priemgetal 2).
<br>'''Lijn 3''': we definiëren de variabele ''einde'' en geven ze de waarde 100, omdat we ons nu willen beperken tot de priemgetallen tot 100.
Regel 50 ⟶ 46:
 
Merk hier op dat we de eerste maal een lus-definitie zullen hebben die resulteert in '''do j=2 to 1'''. Dit is helemaal OK voor REXX, en maakt dat de lus niet zal worden uitgevoerd.
<br>'''Lijn 10''': als nu blijkt dat het getal dat we onderzoeken (en dat in variabele i staat) kleiner is dan het kwadraat van het ''j-de'' priemgetal, dan kunnen we de j-lus verlaten, en hebben we een nieuw priemgetal gevonden.
<br>'''Lijn 11''': hier testen we of het te onderzoeken getal (i) deelbaar is door het ''j-de'' priemgetal. We testen dit door na te gaan of de restdeling op nul uitkomt. Indien zo, dan hebben we geen priemgetal en kunnen we onmiddellijk naar het volgende te onderzoeken getal gaan, dus de rest van de i-lus overslaan en terug naar lijn 8 springen.
Regel 56 ⟶ 51:
<br>'''Lijn 13''': als we hier zijn terechtgekomen, dan hebben we een priemgetal gevonden. We verhogen onze teller, zodat we op
'''lijn 14''' ons nieuw priemgetal kunnen toevoegen aan het ''z-de'' element van onze stem.
<br>'''Lijn 15''': en vergeten ook niet ons element 0 aan te passen,. andersWe werktkunnen lijnhiermee 9zelfs nietbeter meerwachten correcttot na de i-lus, zo winnen we aan snelheid. Maar lees ook de
[[Programmeren in REXX/Voorbeeld1#Extra opmerkingen|opmerkingen]] hieronder.
<br>'''Lijn 16''': we tonen het gevonden priemgetal op het scherm en kunnen het volgende getal gaan onderzoeken.
<br>'''Lijn 18''': we hebben nu alle getallen van 1 tot 100 onderzocht. Zowel variabele ''z'' als ''stem.0'' bevatten het aantal gevonden priemgetallen, dus een kleine moeite om dat aan de gebruiker te melden.
<br>'''Lijn 19''': we beëindigen het programma. We geven geen returncode mee, dus die zal steeds 0 zijn. In dit eenvoudig programmaatje is die '''exit''' eigenlijk zelfs niet écht nodig, maar het blijft toch een goede gewoonte er ééneen te schrijven. Op een PC zal die returncode trouwens enkel zin hebben indien ons programma door een ander programma is opgeroepen, in welk geval de returncode kan getest worden. Windows zelf doet niets met
de returncode van het programma.
 
==Extra opmerkingen==
Regel 66 ⟶ 63:
Het stem-element '''priem.0''' moeten we niet opvullen, zodat lijnen 4 en 15 ook mogen wegvallen. Het is echter een conventie van het aantal elementen van de stem hierin bij te houden. Sommige functies of programma's vullen deze variabele ook automatisch in.
 
Merk op dat we lijn 14 niet mogen schrijven als:
priem.priem.0=i
want REXX gaat dan op zoek naar... '''priem.PRIEM.0''' (het element PRIEM.0 van de stem priem.) en dat bestaat niet. Vandaar dat we variabele '''z''' als tussenstap gebruiken.
Regel 85 ⟶ 82:
 
Desgevallend kan de leesbaarheid als volgt verbeterd worden:
parse value 3 100 1 2 1 with,
'''with''' start einde priem.0 priem.1 z
Of er nu één of meerdere blanco karakters tussen de woorden van de bron staan doet er in dit geval niet toe. Op deze manier wordt duidelijk welke waarde naar welke variabele gaat.
Vergeet echterhierbij niet de vervolg-komma te schrijven naop de ''with''eerste lijn, want het moet één instructie blijven.
 
Vergeet echter niet de komma te schrijven na de ''with'', want het moet één instructie blijven.
 
Op dezelfde manier zouden we lijnen 13 tot 15 kunnen schrijven als:
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.