Це не загальна відповідь на ваше запитання, але за допомогою структурованої теореми програмування все, що потрібно, - це можливість робити вибір (наприклад, if
в C / C ++) та повторення (наприклад, while
в C / C ++). Правка: як вказував Дейв Кларк у коментарях, структурована теорема програмування також вимагає послідовності. Я спочатку не перераховував це, оскільки читач сприйняв, що основні блоки інших вказівок, наприклад, ті, на які пізніше натякали на читання та запис у сховище пам'яті тощо, також були необхідні). Звичайно, краще бути явним; вам потрібно вміти робити і ці речі.
Оскільки і те, і інше можна реалізувати, використовуючи умовну інструкцію стрибка (наприклад, JNZ
у x86), цього також достатньо для Тьюрінга-еквівалентності.
Зауважте, що потрібні інші речі, тобто можливість запису необмеженої кількості символів (наприклад, бітів ... 0 або 1) до якогось сховища зовнішньої пам'яті. У цьому сенсі справжні комп’ютери не є еквівалентом Тюрінга, оскільки жоден з них не має нескінченного обсягу пам’яті. Модель Тьюрінга все ще корисна, оскільки об'єм пам'яті, як правило, величезний, і хоча будь-яка проблема, яку може вирішити справжній комп'ютер, може бути вирішена детермінованим кінцевим автоматом, використовуючи цю модель обчислення не особливо корисно (оскільки кількість штатів буде надзвичайно величезною).
Зауважте, що це не обов'язково суперечить відповіді sepp2k; це свого роду просто інший спосіб думати про те саме питання.
Редагувати:
Зауважте також, що вам if
і while
в C / C ++ не потрібно. Ви можете імітувати, if
використовуючи while
наступне:
bool C;
// some code that sets C
if(C) { /* some other code /* }
// rest of the program
Наступний код завжди еквівалентний:
bool C;
// some code that sets C
bool C2 = C;
while(C2) { /* some other code /* C2 = false; }
// rest of the program
Ну ... будівництво має працювати і бути можливим, якщо ви обережні, тобто. Зауважте також, що якщо у вас є рекурсивні функції, з часом вам також потрібен вибір; оскільки рекурсивні функції без вибору реально не можуть реалізувати базові випадки, тому будь-яка рекурсивна функція призведе до нескінченної рекурсії.
Редагувати:
Крім того, що стосується вашого питання щодо того, чи здатність написати програму, яка не припиняється, достатня для еквівалентності Тьюрінга, відповідь - ні; це необхідно, але недостатньо. Ми можемо вирішити проблему зупинки програм, написаних мовою, яка не може виражати програми, які не зупиняються; відповідь - "програма зупиняється" для всіх випадків. Однак ми можемо визначити мову, де єдина інструкція змушує машину вводити нескінченний цикл ... така мова не є еквівалентною Тьюрінгу.