Ini bukan jawaban umum untuk pertanyaan Anda, tetapi oleh teorema pemrograman terstruktur , semua yang dibutuhkan adalah kemampuan untuk melakukan seleksi (misalnya, if
dalam C / C ++) dan pengulangan (misalnya, while
dalam C / C ++). Sunting: seperti yang ditunjukkan oleh Dave Clarke dalam komentar, teorema pemrograman terstruktur juga membutuhkan urutan. Saya awalnya tidak mencantumkan ini karena saya menerima begitu saja pembaca akan mengerti bahwa blok dasar dari instruksi lain, seperti yang disinggung kemudian untuk membaca dari dan menulis ke toko memori, dll, juga diperlukan). Tentu saja, lebih baik eksplisit; Anda harus dapat melakukan hal-hal ini juga.
Karena keduanya dapat diimplementasikan menggunakan instruksi lompat kondisional (misalnya, JNZ
dalam x86), itu juga cukup untuk kesetaraan Turing.
Perhatikan bahwa hal-hal lain diperlukan, yaitu, kemampuan untuk menulis sejumlah simbol tanpa batas (misalnya, bit ... 0 atau 1) ke semacam penyimpanan memori eksternal. Dalam hal itu, komputer nyata tidak setara dengan Turing, karena tidak ada satu pun dari mereka yang memiliki jumlah penyimpanan tak terbatas. Model Turing masih berguna, karena jumlah memori biasanya besar, dan meskipun masalah apa pun yang dapat diselesaikan oleh komputer nyata dapat diselesaikan dengan otomat terbatas deterministik, menggunakan model perhitungan itu tidak terlalu berguna (karena jumlah negara akan sangat besar).
Perhatikan bahwa ini tidak selalu bertentangan dengan jawaban sepp2k; ini semacam cara yang berbeda untuk memikirkan pertanyaan yang sama.
SUNTING:
Perhatikan juga bahwa Anda tidak benar-benar membutuhkan keduanya if
dan while
dalam C / C ++. Anda dapat mensimulasikan if
menggunakan while
sebagai berikut:
bool C;
// some code that sets C
if(C) { /* some other code /* }
// rest of the program
Kode berikut selalu sama:
bool C;
// some code that sets C
bool C2 = C;
while(C2) { /* some other code /* C2 = false; }
// rest of the program
Ya ... konstruksi harusnya berfungsi dan mungkin jika Anda berhati-hati. Perhatikan juga bahwa jika Anda memiliki fungsi rekursif, pada akhirnya Anda juga harus memilih; karena fungsi rekursif tanpa seleksi tidak dapat benar-benar menerapkan kasus dasar, sehingga fungsi rekursif apa pun akan menghasilkan rekursi yang tak terbatas.
SUNTING:
Juga, mengenai pertanyaan Anda, apakah kemampuan untuk menulis program yang tidak berhenti cukup untuk Turing kesetaraan, jawabannya adalah tidak; itu perlu, tetapi tidak cukup. Kita dapat memecahkan masalah penghentian untuk program yang ditulis dalam bahasa yang tidak dapat mengekspresikan program yang gagal dihentikan; jawabannya adalah "program tidak berhenti" untuk semua contoh. Namun, kita dapat mendefinisikan bahasa di mana satu-satunya instruksi menyebabkan mesin memasuki loop tak terbatas ... bahasa seperti itu tidak setara dengan Turing.