Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Turm von Hanoi - Rekursiver Algorithmus Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 29.01.2022 11:23)
 Als Antwort auf Turm von Hanoi von Dietmar - 29.01.2022 11:17
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Turm von Hanoi - Rekursiver Algorithmus
' In OCBASIC 1.12a_e1 f├╝r Open-Maxi von Dietmar Harlos am 28. Januar 2022
' ===========================================================================

' Dieses Programm nutzt einen Algorithmus von der folgenden Webside:

' https://www.delftstack.com/de/howto/python/tower-of-hanoi-python/

' Dieses Beispielprogramm demonstriert, wie mit Hilfe von PEEK und POKE
' Stacks auf der Open-Maxi realisiert werden k├Ânnen.

' Bei 12 Scheiben und 4095 n├Âtigen Verschiebungen ben├Âtigt dieses Programm in
' der interpretierten Variante 1,06 Sekunden. Wird es mit dem echten BASIC-
' Compiler OCBASR32 kompiliert, ben├Âtigt es nur noch 0,46 Sekunden.

' An dieser Stelle m├Âchte ich mich bei Dirk von "das |_ Team" und bei Norbert
' f├╝r ihre Unterst├╝tzung bedanken. In Memoriam Norbert Klein.

' --- Definitionen ----------------------------------------------------------

INCLUDE "omax.def"               'Definitionen f├╝r die Open-Maxi

DEFINE stack &h2aa               'Buffer an 1. Adresse hinter dem USER-RAM

DIM bitarray BYTE                'ein Bitarray
DIM debug    BIT[1] OF bitarray  'ist HIGH, wenn Debugging aktiv

DIM a,b,c BYTE                   'tempor├Ąre Bytevariablen
DIM n BYTE                       'Anzahl Scheiben

DIM stackp WORD                  'Stackpointer
DIM maxstack WORD                'Stackpointer ├╝berwachen
DIM t WORD                       'Ben├Âtigte Zeit messen
DIM anzahl WORD                  'Anzahl Verschiebungen

' --- Hauptprogramm ---------------------------------------------------------

' Titel:

PRINT
PRINT "Turm von Hanoi (rekursiv)"
PRINT "========================="

' Initialisierungen:

PrintSpc=ON    'Bei PRINT dezimale Zahlen mit f├╝hrendem Leerzeichen ausgeben
End2Host=ON    'Bei Programmende (siehe END) gleich in den Host-Modus wechseln

debug=OFF  'ON 'OFF              'Anzeige aller Schritte

' Das Hauptprogramm:

n=12 '12 '3 '8                   'n ist die Anzahl der Scheiben

stackp=stack                     'Stackpointer initialisieren
maxstack=0

anzahl=0

IF debug THEN ?

t=TIMER

ToH n,"A","B","C"                'Aufruf der Subroutine

t=TIMER-t

?:?"Ich habe"t"*20 ms Zeit f├╝r die"anzahl" Verschiebungen ben├Âtigt."

?:?"Es wurden"maxstack-stack" Byte Stack beansprucht."

END            'Zur├╝ck in den Hostmodus. Neustart mit RETURN-Taste.

' --- Subroutinen und Funktionen --------------------------------------------

' Turm von Hanoi - Rekursiver Algorithmus

PROCEDURE ToH(n,a,b,c) 'COMPILE

  ' def ToH(n , A, B, C):
  '     if n==1:
  '         print("Disk 1 from",A,"to",B)
  '         return
  '     ToH(n-1, A, C, B)
  '     print("Disk",n,"from",A,"to",B)
  '     ToH(n-1, C, B, A)
  '
  ' ToH(3,'A','B','C')

  IF n=1 THEN
    IF debug THEN
      PRINT "Disk 1 from ";
      PUT a
      PRINT " to ";
      PUT b
      PRINT "."
    END IF
    ADD anzahl,1
    maxstack=MAX(maxstack,stackp)
    RETURN
  END IF

  POKE stackp,n
  ADD stackp,1
  POKE stackp,a
  ADD stackp,1
  POKE stackp,b
  ADD stackp,1
  POKE stackp,c
  ADD stackp,1
  maxstack=MAX(maxstack,stackp)

  ToH n-1, a, c, b

  SUB stackp,1
  c=PEEK(stackp)
  SUB stackp,1
  b=PEEK(stackp)
  SUB stackp,1
  a=PEEK(stackp)
  SUB stackp,1
  n=PEEK(stackp)

  IF debug THEN
    PRINT "Disk"n" from ";
    PUT a
    PRINT " to ";
    PUT b
    PRINT "."
  END IF
  ADD anzahl,1

  ToH n-1, c, b, a

  RETURN

END PROCEDURE

' --- Programmende ---------------------------------------------------------


Passender Link: Offizielle Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: