Bu, sorunuza genel bir cevap değildir, ancak yapılandırılmış programlama teoremine göre, gereken tek şey, seçim yapma (örneğin, if
C / C ++ 'da) ve tekrarlama (örneğin, while
C / C ++' da) yeteneğidir . Düzenleme: Dave Clarke tarafından yorumlarda belirtildiği gibi, yapılandırılmış programlama teoremi de sıralama gerektirir. Bunu okuyucuyu kabul etmedim çünkü okuyucunun daha sonra okudukları ve hafıza deposuna yazıp okudukları gibi diğer talimatların temel bloklarının gerekli olduğunu anlamaları gerektiğini kabul ettim). Tabii ki, açık olması daha iyidir; Bunları da yapabilmelisin.
Bunların her ikisi de koşullu bir sıçrama komutu (örneğin, JNZ
x86'da) kullanılarak gerçekleştirilebildiğinden, bu, Turing denkliği için de yeterlidir.
Başka şeylerin gerekli olduğunu, yani bir çeşit harici bellek deposuna sınırsız sayıda sembol (örn. Bit ... 0 veya 1) yazma yeteneği gerektiğini unutmayın. Bu anlamda, gerçek bilgisayarlar Turing'e eşdeğer değildir, çünkü hiçbirinde sonsuz miktarda depolama alanı yoktur. Turing modeli hala kullanışlıdır, ancak bellek miktarı tipik olarak çok büyük olduğundan ve gerçek bir bilgisayarın çözebileceği herhangi bir problemin, belirli bir sonlu otomat tarafından çözülebilmesine rağmen, bu hesaplama modelini kullanmak özellikle yararlı değildir. devletlerin sayısı akıl almaz derecede büyük olurdu).
Bunun mutlaka sepp2k'nin cevabı ile alakası olmadığını unutmayın; bu aynı soru hakkında düşünmenin farklı bir yoludur.
DÜZENLE:
Not da gerçekten hem gerek yoktur if
ve while
C / C ++ içinde. Aşağıdaki gibi if
kullanarak taklit edebilirsiniz while
:
bool C;
// some code that sets C
if(C) { /* some other code /* }
// rest of the program
Aşağıdaki kod her zaman eşdeğerdir:
bool C;
// some code that sets C
bool C2 = C;
while(C2) { /* some other code /* C2 = false; }
// rest of the program
Peki ... inşaat dikkatli olmalı, mümkün olmalı. Ayrıca özyinelemeli işlevleriniz varsa, sonunda seçim yapmanız gerektiğini de unutmayın; seçimi olmayan özyinelemeli işlevler temel durumları gerçekten uygulayamadığından, özyinelemeli herhangi bir işlev sonsuz özyinelemeyle sonuçlanacaktır.
DÜZENLE:
Ayrıca, Turing denkliği için durmayan bir program yazma yeteneğinin yeterli olup olmadığı konusundaki sorunuzla ilgili cevap hayır; bu gerekli, ancak yeterli değil. Durma problemini, durdurulamayan programları ifade edemeyen bir dilde yazılmış programlar için çözebiliriz; Cevap, tüm örnekler için "program durdu" dur. Ancak, tek komutun makinenin sonsuz bir döngüye girmesine neden olan bir dil tanımlayabiliriz ... böyle bir dil Turing'e eşdeğer değildir.