Denkende Machines -- Computers, rekenen, redeneren - CWI
Denkende Machines -- Computers, rekenen, redeneren - CWI
Denkende Machines -- Computers, rekenen, redeneren - CWI
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
3.3. PROGRAMMEREN 79<br />
Een functie roepen we aan met behulp een toekenning: x := FUNCTIENAAM(x1,. . . ,xn).<br />
Het resultaat van de functie toegepast op de gespecificeerde invoer x1,. . . ,xn wordt toegekend<br />
aan x, ofwel in het x-register wordt de waarde van het resultaat opgeslagen. Dit laatstgenoemde<br />
register verliest daarmee evenwel zijn oude inhoud. Zo staat in de implementatie van COPY<br />
al een toekenning Y := EMPTY(). De variabele Y krijgt de waarde van het resultaat van de<br />
toepassing van de EMPTY-functie, dat wil zeggen: Y wordt geleegd.<br />
De variabelen binnen de functie-implementatie worden bij afspraak met hoofdletters geschreven.<br />
Verder gebruiken we de letter Y steeds voor het resultaat, de uitvoer, van de functie. De<br />
variabelen X1 . . . Xn worden gebruikt als referentie van de opeenvolgende invoerargumenten.<br />
Variabelen die met een andere hoofdletter geschreven worden bij een functie-implementatie zijn<br />
hulpvariabelen. Variabelen buiten de functies schrijven we met een kleine beginletter.<br />
Hieronder tref je een uitbreiding van het kleine programmaatje hierboven aan. We definiëren<br />
optellen met behulp van een functie PLUS om vervolgens af te sluiten met het kwadratenalgoritme<br />
als hoofdonderdeel van het programma.<br />
[PLUS](..) {<br />
Y := COPY(X1);<br />
while (X2?) { X2-; Y+ }<br />
}<br />
z := EMPTY();<br />
while (x?) {<br />
x-;z+<br />
z := PLUS(z,PLUS(x,x))<br />
}<br />
De machine begint zijn berekening bij de eerste regel van het hoofdonderdeel en gebruikt de<br />
functie bij de aanroep. Functies hebben hun eigen gereserveerde registers. Als bijvoorbeeld<br />
PLUS(x,x) wordt aangeroepen, dan wordt eerst de waarde van x naar X1 en X2 gekopieerd en<br />
nadat de functie toegepast is, wordt het resultaat teruggegeven aan de variabele die de waarde<br />
PLUS(x,x) toegekend is. In dit geval veranderen de waarden van X1 en X2 tijdens de uitvoering<br />
van PLUS, maar dat heeft geen effect op de waarde van x, die blijft ongemoeid.<br />
Opdracht 3.20 Schrijf een ImPro+-programma met een functie TIMES voor vermenigvuldiging<br />
en completeer het programma, zodat voor twee registers x en y in een derde register z de waarde<br />
x y wordt berekend.<br />
Functies kunnen we ook gebruiken om de testmogelijkheden van ImPro uit te breiden. Bij het<br />
implementeren van lussen en keuzes willen we vaak meer testen dan het leeg zijn van een register.<br />
Uitgebreide tests worden in ImPro+ eigenlijk identiek aan functies gedefinieerd, alleen nu gaat<br />
het niet om de precieze inhoud van het resultaat in het uitvoerregister Y, maar over de vraag<br />
of dit register wel of niet inhoud heeft. Hieronder is een voorbeeld gegeven van een test waarbij<br />
nagegaan wordt of het eerste argument groter is dan het tweede argument.