Dies ist keine allgemeine Antwort auf Ihre Frage, aber nach dem strukturierten Programmiersatz ist nur die Fähigkeit erforderlich, eine Auswahl (z. B. if
in C / C ++) und eine Wiederholung (z. B. while
in C / C ++) durchzuführen. Edit: Wie Dave Clarke in den Kommentaren hervorhob, erfordert das Theorem der strukturierten Programmierung auch eine Abfolge. Ich habe dies anfangs nicht aufgelistet, da ich davon ausgegangen bin, dass der Leser verstehen würde, dass grundlegende Blöcke anderer Anweisungen, wie diejenigen, die später zum Lesen und Schreiben in den Speicher usw. erwähnt wurden, ebenfalls erforderlich sind. Es ist natürlich besser, explizit zu sein; Sie müssen auch in der Lage sein, diese Dinge zu tun.
Da beide über einen bedingten Sprungbefehl (z. B. JNZ
in x86) implementiert werden können, reicht dies auch für die Turing-Äquivalenz aus.
Beachten Sie, dass andere Dinge erforderlich sind, z. B. die Fähigkeit, eine unbegrenzte Anzahl von Symbolen (z. B. Bits ... 0 oder 1) in einen externen Speicher zu schreiben. In diesem Sinne entsprechen echte Computer nicht Turing, da keiner von ihnen unendlich viel Speicherplatz hat. Das Turing - Modell ist jedoch immer noch nützlich, da die Speicherkapazität in der Regel sehr groß ist und obwohl jedes Problem, das ein echter Computer lösen kann, durch einen deterministischen endlichen Automaten gelöst werden kann, ist die Verwendung dieses Berechnungsmodells nicht besonders nützlich (da das Anzahl der Staaten wäre absurd groß).
Beachten Sie, dass dies nicht unbedingt im Widerspruch zu der Antwort von sepp2k steht. Dies ist eine andere Art, über dieselbe Frage nachzudenken.
BEARBEITEN:
Beachten Sie auch, dass Sie nicht wirklich beide if
und while
in C / C ++ benötigen . Sie können simulieren , if
indem Sie while
wie folgt vor :
bool C;
// some code that sets C
if(C) { /* some other code /* }
// rest of the program
Der folgende Code ist immer äquivalent:
bool C;
// some code that sets C
bool C2 = C;
while(C2) { /* some other code /* C2 = false; }
// rest of the program
Nun ... die Konstruktion sollte funktionieren und möglich sein, wenn Sie vorsichtig sind. Beachten Sie auch, dass Sie bei rekursiven Funktionen eventuell auch eine Auswahl benötigen. Da rekursive Funktionen ohne Auswahl keine Basisfälle implementieren können, würde jede rekursive Funktion zu einer unendlichen Rekursion führen.
BEARBEITEN:
Bezüglich Ihrer Frage, ob die Fähigkeit, ein Programm zu schreiben, das nicht anhält, für Turing-Äquivalenz ausreicht, lautet die Antwort nein. es ist notwendig, aber nicht ausreichend. Wir können das Problem des Anhaltens für Programme lösen, die in einer Sprache geschrieben sind, die keine Programme ausdrücken kann, die nicht angehalten werden können. Die Antwort lautet "Das Programm hält an" für alle Instanzen. Wir können jedoch eine Sprache definieren, in der die Maschine aufgrund der einzigen Anweisung in eine Endlosschleife eintritt ... eine solche Sprache ist nicht Turing-äquivalent.