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

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 81<br />

y := EMPTY() schrijven we kortweg y := 0. Ook voor andere gehele getallen wordt gewoon de<br />

gebruikelijke decimale notatie gebruikt.<br />

Ook Boolese connectieven vind je als functies terug in programmeertalen. De negatie bijvoorbeeld<br />

kunnen we simpel definiëren, als volgt.<br />

[NOT](.) { if (X1?) { Y := EMPTY() } else { Y := EMPTY(); Y+ }<br />

In plaats van NOT(x) wordt vaak !x of ∼x geschreven. Zo kun je een ≤-test maken door NOT<br />

en LARGER te combineren: NOT(LARGER(x,y)).<br />

Opdracht 3.24 Schrijf functies voor conjunctie en disjunctie (notatie vaak x&y en x|y, of,<br />

x&&y en x||y).<br />

Opdracht 3.25 Schrijf een gelijkheidstest EQUALS (notatie vaak x=y of x == y) met behulp<br />

van LARGER.<br />

3.3.5 Datatypen<br />

De registermachines werken slechts met één soort register waarvan de inhoud een niet-negatief<br />

geheel getal representeert. In de werkelijkheid zijn dit rijen van bits die die getallen op een binaire<br />

manier coderen. Voor de uitkomst van een test hebben we niet een volledig register nodig maar<br />

slechts een enkele bit. In de meeste programmeertalen wordt dan ook van de programmeur<br />

verwacht dat deze vertelt wanneer hij zo’n minimaal register nodig heeft. Dit verloopt via het<br />

typeren van een variabele. Voordat ermee gerekend wordt moet een variabele getypeerd worden:<br />

zo vind je vaak expressies van de vorm x boolean om aan te geven dat er slechts een bit voor x<br />

gereserveerd hoeft te worden. Zo vind je ook vaak de typering x integer om aan te geven dat x<br />

als een geheel getal verrekend moet worden dat eventueel negatief is. Deze zou in een binaire<br />

registermachine behandeld kunnen worden als een register met een extra bit om het teken te<br />

coderen: 0 voor negatief en 1 voor niet-negatief. Niet-gehele getallen kunnen we representeren<br />

met twee registers waarvan er één de positie van de komma aangeeft en de ander het getal dat<br />

we zouden krijgen als we de komma zouden vergeten.<br />

Om een goede afwikkeling van functietoepassing te bewerkstelligen wordt bij de definitie van<br />

een functie ook verwacht van de programmeur dat hij aangeeft wat de types van de invoerargumenten<br />

zijn en natuurlijk ook wat het type van het resultaat zal zijn. Je kunt in een programma<br />

iets van de volgende vorm tegenkomen:<br />

boolean [FUN](integer real)<br />

Hierbij wordt aangegeven dat de functie FUN een Boolese resultaat (bit) geeft als zij aangeroepen<br />

wordt met als eerste argument een geheel getal (opgeslagen in een enkel register, met behulp<br />

van binair complement representatie) en als tweede argument een niet-geheel getal (opgeslagen<br />

in twee registers, ’eén voor de plaats van de komma, en één voor het getal zonder komma).<br />

Voor het gemak maken wij hier alleen verschil tussen een bit en een volledig register, maar<br />

in de praktijk worden verschillende maten registers gebruikt. Zo heb je voor plaatsing van de

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

Saved successfully!

Ooh no, something went wrong!