31.07.2013 Views

Denkende Machines -- Computers, rekenen, redeneren - CWI

Denkende Machines -- Computers, rekenen, redeneren - CWI

Denkende Machines -- Computers, rekenen, redeneren - CWI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

78 HOOFDSTUK 3. MODELLEN VAN BEREKENING<br />

while (y?) {<br />

}<br />

y-;<br />

if (x?) { if (z?) {x+} else {x-} }<br />

else {x+;z+}<br />

Opdracht 3.16 Dit programma werkt alleen goed als we beginnen met een leeg z-register. Kun<br />

je uitleggen waarvoor dit register gebruikt wordt in de programma’s hierboven?<br />

Opdracht 3.17 In veel programma’s kom je ook de enkele if-constructie tegen: if (T) {P}. Het<br />

voert P uit als T slaagt, en doet anders niks. Hoe schrijf je ImPro-code die hetzelfde doet?<br />

Opdracht 3.18 Net zo bestaan er constructies voor het geval van meer dan twee keuzes, bijvoorbeeld<br />

if (T) {P} else if (S) {Q} else {R}. Hoe doe je dit in ImPro na?<br />

Opdracht 3.19 De constructie repeat P until T betekent:<br />

voer P uit totdat T geldt.<br />

Hoe definieer je deze constructie in ImPro?<br />

3.3.4 Functies, Toekenningen en Tests<br />

Met while- en if-constructies wordt de transitiestructuur van een programma duidelijk. Toch<br />

blijft ImPro een beperkte taal, voornamelijk doordat we slechts over twee bijzonder simpele<br />

operaties beschikken en maar één soort test kunnen uitvoeren. Het zou een stuk handiger zijn<br />

als we complexere operaties die we vaak gebruiken slechts éénmaal hoeven te definiëren om ze<br />

vervolgens naar believen te kunnen aanroepen. Zo kwam je bij de RePro- en ImPro-opgaven<br />

reeds twee operaties tegen die je steeds weer moet implementeren: het legen en het kopiëren van<br />

een register. In de uitgebreide taal ImPro+ kunnen we deze operaties in één keer vastleggen.<br />

[EMPTY]() { while (Y) { Y- } }<br />

[COPY](.) { Y := EMPTY(); while (X1?) { X1-; Y+ } }<br />

EMPTY en COPY zijn functienamen waarmee in het vervolg van het programma het geassocieerde<br />

stukje programmatuur steeds weer kan worden aangeroepen. Met de vierkante haken<br />

geven we aan dat we een functie implementeren. Tussen de haakjes na de functieaanhef wordt<br />

met puntjes het aantal registers/variabelen gegeven waarop de functie opereert. Dit zijn de zogenaamde<br />

argumenten van de functie. Zo heeft de functie EMPTY helemaal geen invoer nodig,<br />

terwijl COPY één register als invoer neemt om deze vervolgens te kopiëren.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!