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.

82 HOOFDSTUK 3. MODELLEN VAN BEREKENING<br />

komma in een niet-geheel getal geen lang register nodig, en hetzelfde geldt voor het representeren<br />

van de toetsenbordsymbolen (Engels: characters, vaak afgekort als char). In veel programmeertalen<br />

is er ook gelegenheid voor de programmeur om zelf types te construeren om objecten van<br />

allerlei slag te definiëren. In programmeertalen als C en Java zijn de mogelijkheden hiertoe<br />

vrijwel onbeperkt.<br />

3.4 Rekentijden<br />

3.4.1 Berekenbaarheid<br />

Toen Turing zijn algemene model van een rekenmachine ontwikkelde was zijn bedoeling om te<br />

laten zien dat hoe algemeen je je begrip ‘berekenbaar’ ook kiest, er altijd vragen zijn waarop een<br />

rekenmachine het antwoord schuldig moet blijven. Een beroemd voorbeeld is het stop probleem<br />

(Engels: halting problem). Hierbij gaat het om de vraag of er een programma geschreven kan<br />

worden dat kan bepalen of een ander gegeven programma eindigt bij uitvoering. Van sommige<br />

programmatuur, zoals klokken of besturingssystemen, willen we dat ze niet stoppen, maar de<br />

meeste programma’s moeten juist niet ‘hangen’, en wekken ergernis wanneer ze dat onverhoopt<br />

wel doen. Een programma dat kan nagaan of een ander programma zou kunnen gaan ‘hangen’<br />

zou behoorlijk wat geld opleveren. Ons standaard-voorbeeld van een programma dat hangt is<br />

het volgende:<br />

x+; while (x?) {x+}<br />

Om de stopvraag te preciseren: er wordt gevraagd om een programma HALT, dat bij invoer van<br />

een ander programma P als antwoord ‘ja’ geeft indien P eindigt en ‘nee’ indien P niet eindigt<br />

als P begint met alleen maar lege registers. We moeten hiertoe programma’s coderen volgens<br />

een of andere vaste methode. Dat kan op een eenvoudige manier. In een programmeertaal zoals<br />

RePro, ImPro en ImPro+ gebruiken we maar een eindig aantal verschillende symbolen. Zeg dat<br />

de taal n verschillende symbolen gebruikt. Dan kan elk programma in zo’n taal dus opgevat<br />

worden als een getal gerepresenteerd in het n-tallig stelsel.<br />

HALT moet nu werken zoals een ImPro+-test: het geeft voor een stoppend programma<br />

gecodeerd in een vast gekozen invoerregister x een niet-lege inhoud op een eveneens vast gekozen<br />

uitvoerregister y. Stel dat we zo’n programma in ImPro+ hebben. We noemen het programma<br />

HALT, en we schrijven vervolgens de volgende uitbreiding van HALT, het programma Q.<br />

x := q; HALT; if (y?) { z+; while (z?) { z+ } } else { z+;z- }<br />

Hierbij is q de getalscode van het programma Q.<br />

Opdracht 3.26 Leg uit waarom we een fout resultaat krijgen wanneer we HALT uitvoeren op<br />

het programma Q.

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

Saved successfully!

Ooh no, something went wrong!