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.
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.