2010-03-24 12 views
9

bu yalıtımlı olup:GİTMEYİN VE YAPMAYIN! Bunun kanıtı:

her algoritma gitmek falan gibi gidin kullanmayan başka algoritma B için denklik olduğunu kullanılarak tasarlanmış. başka bir deyişle

:

için gitmek kullanılarak tasarlanmış her algoritma, gidin kullanmadan dizayn edilebilir.

nasıl ispat için?

+1

kanıtıdır: goto yıllardan olmadan evrensel Turing makinesi uygulayabilir ve evrensel Turing makinesi ve onun girişini temsil eden bir karakter dizesiyle herhangi algoritma uygulayabilir. – jkff

+1

"goto" özelliği, "indirgenemez" döngüler olarak da bilinen "çoklu giriş döngüleri" ni tanıtabilir. İndirgenemez döngülerin ortadan kaldırılması esasen kod kopyalayarak elde edilir. bir tartışma için (http://moss.csc.ncsu.edu/~mueller/ftp/pub/mueller/papers/europar01.ps.gz): Bkz [DJ-Grafikleri vs Optimize Düğüm Bölme İndirgenemez Loops Handling] Bunun yapılabileceği yollar. –

cevap

18

C. Böhm, G. Jacopini, "Akış diyagramları, sadece iki Formasyon Kurallara Turing Makineleri ve Diller", Comm. ACM, 9 (5): 366-371,1966.

http://en.wikipedia.org/wiki/Structured_program_theorem

Böhm-Jacopini geçirmez orijinal programı temsil ettiği bilgilerin takip etmek için ekstra bir tamsayı değişkeni bit kullanarak, keyfi bir grafikten yapılandırılmış akış şeması oluşturmak açıklar

http://en.wikipedia.org/wiki/P"

Programın bulunduğu yere göre. Bu yapı Böhm'un programlama dili P ′ based'ye dayanıyordu. Böhm-Jacopini kanıtı, yazılım geliştirme için yapılandırılmış bir programlamayı benimsememe meselesini çözmemiştir, çünkü kısmen, inşaatın bir programı belirsizleştirmekten ziyade bir programı gizleme olasılığı daha yüksektir. Aksine, tartışmanın başlangıcını işaret etti. Edsger Dijkstra'nın meşhur mektubu, “Zararlı Olduğunu Bildiren Beyan Et”, 1968'de izledi. Teoremin sonraki kanıtları, orijinal programın netliğini koruyan veya geliştiren yapılar ile Böhm-Jacopini ispatının pratik eksikliklerini ele aldı.

+0

http://en.wikipedia.org/wiki/Structured_programming ayrıca iyi bir yazıdır. –

+1

İronik kısım şudur: onu derlediğiniz an, goto'lara (veya Assembly'de çağrıldığı gibi jmp ifadelerine) dönüştürülür. – Toad

+5

@reinier: ironik, bazen "saçma gibi anlamsızdır" işlev çağrıları sadece goto, bu yüzden kodumda sınırsız bir goto kullanırsam, "ya da" X karakterini sadece kullan, kullanmayın ". Goto'nun zorluklarının makine kodu ile hiçbir ilgisi yoktur, yapılandırılmış programlama, insanlar için kodu kolaylaştırır. Bir 'jmp' * * çoğu derlenmiş dilde goto eşdeğeridir, çünkü bir goto sadece bir jmp değildir, aynı zamanda destenin hedef için doğru duruma getirilmesi için genellikle bir tür senkronizasyon gerektirir. "Goto", oldukça yüksek seviyeli bir programlama yapısıdır ;-) –

-2

Her bilgisayar programı 1 dallanma olmadan ifade edilebilir. Sonsuz uzun bir programa ihtiyacınız olurdu, ama yapılabilirdi. (Hala bir if ifadesine ihtiyacın var) Sanırım resmi kanıtınızı alacaksınız. http://www.jucs.org/jucs_2_11/conditional_branching_is_not/Rojas_R.html

Ayrıca, GoTo'yu gerçekleştirebileceğiniz herhangi bir kod bloğu, ayrıştırılıp bir durum makinesine veya Tekrarlama Döngüsü'ne yerleştirilebilir. Rastgele (ve örtüşen goto ifadeleriyle) dolu bir kod bloğunu alırsanız, her bir goto noktası belirli bir işleve atanabilir ve her Goto bir işlev_exit ve bir sonraki durumun ataması ile değiştirilebilir.

Yani

Point1: 
    do something 
Point2: 
    do something 
    if blah goto point3 
    goto point4 
point3: 
    something 
point4: 
    goto point2: 
end 

can be replaced by 

function point1 
    do something 
    return = point2 
end_function 

function point2 
    do something 
    if blah return = point3 
    return = point4 
end_function 

function point3 
    something 
    return = point4 
end_function 

function point4 
    return = point2 
end_function 

state = point1 
repeat 
    state = call_function (state) 
until (state=end) 

Bu tamamen goto ifadesi kullanmadan goto ifadesi öykünür ve bu nedenle, ben cevap verirdim - evet.

Ben git noktalı bir değişken olabilir Goto hakkında emin değilim.

+0

Zor olsa bile bu doğru. Bunun bir devlet makinesi olduğundan emin değilim, bu yüzden dilimi düzeltmeniz gerekebilir. Kendini öğretti - yani, bilirsin ... :-) – seanyboy

+4

"Sonsuz uzun bir programa ihtiyacın vardı, ama yapılabilir". Bu "yapılamaz" demenin başka bir yolu. Gerçekten kullandığımız tüm hesaplama modelleri Turing makinesi de dahil olmak üzere programları sonlu olarak tanımlar. –

İlgili konular