Pythagoras juni 1997

Antwoorden 10e probleem van Hilbert

Vraag 1

Het programma luidt (achter de streepjes wordt de werking uitgelegd):

 1: schrijf een 1
 2: ga 1 vakje naar links        -- zoek naar links tot je een 1
 3: als inhoud=0 ga naar stap 2  -- of een lege cel vindt
 4: schrijf een 0
 5: ga 1 vakje naar rechts       -- zoek naar rechts tot je
 6: als inhoud=0 ga naar stap 5  -- de laatst geschreven 1 vindt
 7: schrijf een 0                -- vervang die door een 0
 8: ga 1 vakje naar rechts       -- kijk rechts
 9: als inhoud=0 ga naar stap 1  -- als daar nog een 0 staat: herhaal alles
10: stop                         -- als daar een 1 of niets staat: stop

Dit programma verdubbelt het aantal nullen dat op de tape staat.
Als de invoer bestaat uit vier nullen, dan maakt het programma de volgende stappen:

Begin:             0000
                   ^
na stap 1          1000
                   ^
na stap 2-3-4     01000
                  ^
na stap 5-6-7     00000
                   ^
na stap 8-9-1     00100
                    ^
na stap 2-3-4    000100
                 ^
na stap 5-6-7    000000
                    ^
na stap 8-9-1    000010
                     ^
na stap 2-3-4   0000010
                ^
na stap 5-6-7   0000000
                     ^
na stap 8-9-1   0000001
                      ^
na stap 2-3-4  00000001
               ^
na stap 5-6-7  00000000
                      ^
na stap 8-9-10 00000000
                       ^

Vraag 2

Je kunt inderdaad een programma schrijven dat nagaat of de code voor een Turing-programma de stopcode 111 bevat. Hier is een voorbeeld. We nemen aan dat het programma rechts van de leeskop staat en dat er tussen de leeskop en het programma nullen staan.

 1: ga 1 vakje naar rechts
 2: als inhoud=0 ga naar stap 1       -- we zoeken naar rechts tot de eerste 1
 3: ga 1 vakje naar rechts            -- gevonden, we gaan instructies lezen
 4: als inhoud=0 ga naar stap 6       -- er komt 000, 001, 010 of 011
 5: als inhoud=1 ga naar stap 10      -- er komt 100, 101 of 111
 6: ga 1 vakje naar rechts
 7: ga 1 vakje naar rechts
 8: ga 1 vakje naar rechts            -- de drie bits zijn gelezen
 9: als inhoud=0 ga naar stap 6       -- weer een 0
10: ga 1 vakje naar rechts
11: als inhoud=1 ga naar stap 41      -- dit moet 111 zijn; geen 100 gevonden
12: ga 1 vakje naar rechts
13: als inhoud=0 ga naar stap 22      -- we hebben 100 gevonden
14: ga 1 vakje naar rechts            -- het was 101, een `goto' dus
15: als inhoud=0 ga naar stap 19      -- nullen lezen
16: ga 1 vakje naar rechts            -- enen lezen
17: als inhoud=1 ga naar stap 16
18: als inhoud=0 ga naar stap 3       -- volgende instructie
19: ga 1 vakje naar rechts            -- nullen lezen
20: als inhoud=0 ga naar stap 19
21: als inhoud=1 ga naar stap 3       -- volgende instructie
22: ga 1 vakje naar rechts            -- 100 gevonden en verder lezen
23: als inhoud=0 ga naar stap 25      -- 000, 001, 010 of 011
24: als inhoud=1 ga naar stap 10      -- 100, 101 of 111
25: ga 1 vakje naar rechts
26: ga 1 vakje naar rechts
27: ga 1 vakje naar rechts            -- de drie bits zijn gelezen
28: als inhoud=0 ga naar stap 25      -- weer een 0
29: ga 1 vakje naar rechts
30: als inhoud=1 ga naar stap 45      -- dit moet 111 zijn; een 100 gevonden
31: ga 1 vakje naar rechts
32: als inhoud=0 ga naar stap 22      -- we hebben nog een 100 gevonden, blijf lezen
33: ga 1 vakje naar rechts            -- het was 101, een `goto' dus
34: als inhoud=0 ga naar stap 38      -- nullen lezen
35: ga 1 vakje naar rechts            -- enen lezen
36: als inhoud=1 ga naar stap 35
37: als inhoud=0 ga naar stap 22      -- volgende instructie
38: ga 1 vakje naar rechts            -- nullen lezen
39: als inhoud=0 ga naar stap 38
40: als inhoud=1 ga naar stap 22      -- volgende instructie
41: ga 1 vakje naar rechts            -- we zijn aan het eind, maar geen 100 gevonden
42: ga 1 vakje naar rechts
43: schrijf een 0                     -- rechts naast de 111 een 0 zetten
44: stop
45: ga 1 vakje naar rechts            -- we zijn aan het eind, en 100 gevonden
46: ga 1 vakje naar rechts
47: schrijf een 1                     -- rechts naast de 111 een 1 zetten
48: stop




Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead in /websites/users/pyth/public_html/pythwww/common/footer.php on line 5
Laatst bijgewerkt op: Tuesday 27 May 2003, 14:10

naar boven  home  e-mail de webmaster