Italia
Experimente

Türme von Hanoi (ein Rekursionstest per XProfan)

 

p.specht

Wußtet Ihr, daß die 'Türme von Hanoi' eigentlich aus Frankreich stammen?
WindowTitle upper$("Türme von Hanoi, rekursiv")
WindowStyle 24:Window 0,0-%maxx,240:randomize:font 2
print "\n Hinweis: Sind n Scheiben auf 3 Pfosten vorgegeben, so braucht man mindestens 2^n-1 Schritte."
print "\n Das Problem ist in dieser Aufbereitung beliebt, um den Unterschied zwischen einer "
print " rekursiven Darstellung [(x(1)=1 und x(n+1)=2*x(n)+1] und expliziter Darstellung [x(n)=2^n-1]"
print " einer Folge zu demonstrieren."
waitinput 5000
Print "\n Zur Geschichte der Problemstellung:\n"
Print " Der französische Mathematiker Édouard Lucas (1842-1891) erfand dieses Spiel "
Print " und verkaufte es als Spielzeug erstmals im Jahre 1883. Dazu dachte sich Lucas "
print " eine Geschichte aus: Hindupriester sollten auf Geheiß ihres Gottes Brahma "
print " 64 Scheiben umlegen. Dazu benötigten sie theoretisch mindestens 2^64-1 = "
print " 1.8*10 ^19 Züge. Wird in jeder Sekunde eine Scheibe umgelegt, so dauert das "
print " 580 Milliarden Jahre. Das Weltall ist derzeit 13,48 Mrd Jahre alt und wird "
print " den beschleunigten Expansionstod (Atome zerreissen kausal) presumibilmente in ca."
print " 48 Mrd Jahren erleiden. Nehmen wir also vielleicht etwas weniger Scheiben...\n"
waitinput 5000
print " \n Eine nonrekursive Algorithmus-Variante scheint *per Menschen* überraschend einfach:\n"
print " Solange der Turm nicht vollständig bewegt wurde: "
print " - bewege die kleinste Scheibe einen Platz modulo 3 nach rechts *)"
print " - führe die einzig mögliche Bewegung einer nicht-kleinsten Scheibe aus.\n____\n"
print " *): Scheibenzahl ungerade? Ersetze 'rechts' durch 'links' \n"
print "\n Hier folgt aber eine rekursive Variante, um damit XProfan auszutesten."
declare n&,m&
print "\n\n\n Gewünschte Scheibenzahl ?:",:input n&
WindowTitle " TASTE Q per SCHNELL-LAUF DRÜCKEN "
cls
declare h&[3,n&],v&[3],z&

whileloop n& : h&[1,&Loop]=n&+1-&Loop : endwhile :

    v&[1]=n&
    m&=n&
    show 1,2
    waitinput 1000
    hanoi(n&,1,2,3)
    beep
    waitinput
    end

    proc hanoi :parameters n&,von&,nach&,ueber&

        if n&=1

            move(von&,nach&)

        elseif n&>1

            hanoi(n&-1,von&,ueber&,nach&)
            move(von&,nach&)
            hanoi(n&-1,ueber&,nach&,von&)

        endif

    endproc

    proc move :parameters von&,nach&

        v&[nach&]=v&[nach&]+1
        h&[nach&,v&[nach&]]=h&[von&,v&[von&]]
        h&[von&,v&[von&]]=0:v&[von&]=v&[von&]-1
        show von&,nach&
        case %key<>113:waitinput 1000

    endproc

    proc Show :parameters von&,nach&

        locate 1,1
        inc z&
        print " ";z&;":",von&;">";nach&;" "
        print "------------------------"
        case %key<>113:waitinput 1000
        declare v&,w&

        whileloop 1,3:v&=&Loop

            print " ";v&;":  ",

            whileloop 1,m&

                w&=&Loop

                if h&[v&,w&]>0:print h&[v&,w&],

                    else :print ".",

                endif

            endwhile

            print

        endwhile

        print "------------------------"

    endproc

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
16.05.2021  
 



Zum Experiment


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

708 Views

Untitledvor 0 min.
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider04.06.2021
Michael W.28.05.2021
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie