| |
|
|
p.specht
| Anmerkung: Auf den Internetseiten von 'Stack Overflow' ist sogar eine Variante mit beliebig vielen Pfosten (Engl.:'Pegs') zu finden, allerdings in der eher ungewöhnlichen Sprache 'F#'. Sie benutzt dem Vernehmen nach den iterativen 'Frame-Stewart Algorithmus'. Hier allderdings der Standardalgorithmus lt. Lehrbuch. Rekursion ist allerdings keine große Stärke von XProfan...
WindowTitle upper$("Türme von Hanoi mit 4 Pfosten, rekursiv")
WindowStyle 24:Window 0,0-%maxx,240:randomize:font 2
print "\n Hier eine rekursive Variante mit 4 Pfosten"
declare n&,m&
print "\n\n\n Gewünschte Scheibenzahl ?:",:input n&
WindowTitle " TASTE Q für SCHNELL-LAUF DRÜCKEN "
cls
declare h&[4,n&],v&[4],z&
whileloop n& : h&[1,&Loop]=n&+1-&Loop : endwhile :
v&[1]=n&
m&=n&
show 1,2
waitinput 1000
hanoi4(n&,1,4,3,2)
beep
waitinput
end
proc hanoi4 :parameters n&,von&,ueber&,ueber2&,nach&
if n&=1
move(von&,nach&)
elseif n&=2
move(von&,ueber&)
move(von&,nach&)
move(ueber&,nach&)
else
Hanoi4(n&-2,von&,ueber2&,nach&,ueber&)
move(von&,ueber2&)
move(von&,nach&)
move(ueber2&,nach&)
Hanoi4(n&-2,ueber&,von&,ueber2&,nach&)
endif
endproc
'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,4: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 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 16.05.2021 ▲ |
|
|
|