Đây không phải là câu trả lời chung cho câu hỏi của bạn, nhưng theo định lý lập trình có cấu trúc , tất cả những gì cần thiết là khả năng lựa chọn (ví dụ, if
trong C / C ++) và lặp lại (ví dụ, while
trong C / C ++). Chỉnh sửa: như Dave Clarke đã chỉ ra trong các bình luận, định lý lập trình có cấu trúc cũng yêu cầu trình tự. Ban đầu tôi không liệt kê điều này vì tôi cho rằng người đọc sẽ hiểu rằng các khối cơ bản của các hướng dẫn khác, chẳng hạn như những thứ được ám chỉ sau này để đọc và ghi vào kho lưu trữ, v.v., cũng cần thiết). Tất nhiên, tốt hơn là nên nói rõ ràng; bạn cần phải có khả năng làm những điều này, quá.
Vì cả hai điều này có thể được thực hiện bằng cách sử dụng lệnh nhảy có điều kiện (ví dụ: JNZ
trong x86), điều đó cũng đủ cho Turing-tương đương.
Lưu ý rằng những thứ khác là bắt buộc, tức là khả năng ghi số lượng ký hiệu không giới hạn (ví dụ: bit ... 0 hoặc 1) vào một số loại bộ nhớ ngoài. Theo nghĩa đó, máy tính thực không tương đương Turing, vì không ai trong số chúng có dung lượng lưu trữ vô hạn. Tuy nhiên, mô hình Turing vẫn hữu dụng vì lượng bộ nhớ thường rất lớn và mặc dù mọi vấn đề mà máy tính thực sự có thể giải quyết đều có thể được giải quyết bằng máy tự động hữu hạn xác định, sử dụng mô hình tính toán đó không đặc biệt hữu ích (vì số lượng các tiểu bang sẽ rất lớn).
Lưu ý rằng điều này không nhất thiết là mâu thuẫn với câu trả lời của sepp2k; đây chỉ là một cách khác để suy nghĩ về cùng một câu hỏi.
BIÊN TẬP:
Cũng lưu ý rằng bạn không thực sự cần cả hai if
và while
trong C / C ++. Bạn có thể mô phỏng if
bằng cách sử dụng while
như sau:
bool C;
// some code that sets C
if(C) { /* some other code /* }
// rest of the program
Các mã sau luôn luôn tương đương:
bool C;
// some code that sets C
bool C2 = C;
while(C2) { /* some other code /* C2 = false; }
// rest of the program
Chà ... việc xây dựng nên hoạt động và có thể nếu bạn cẩn thận, đó là. Cũng lưu ý rằng nếu bạn có các hàm đệ quy, cuối cùng bạn cũng cần lựa chọn; vì các hàm đệ quy mà không có lựa chọn thực sự không thể thực hiện các trường hợp cơ sở, do đó, bất kỳ hàm đệ quy nào cũng sẽ dẫn đến đệ quy vô hạn.
BIÊN TẬP:
Ngoài ra, liên quan đến câu hỏi của bạn về việc liệu khả năng viết một chương trình không dừng lại có đủ cho Turing tương đương hay không, câu trả lời là không; nó là cần thiết, nhưng không đủ Chúng ta có thể giải quyết vấn đề tạm dừng cho các chương trình được viết bằng ngôn ngữ không thể diễn tả các chương trình không dừng lại; câu trả lời là "chương trình tạm dừng" cho tất cả các trường hợp. Tuy nhiên, chúng ta có thể định nghĩa một ngôn ngữ trong đó chỉ dẫn duy nhất khiến máy đi vào một vòng lặp vô hạn ... ngôn ngữ đó không tương đương với Turing.