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: Arabische Zahl in römische Zahl umwandeln Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 22.07.2021 23:50)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Arabische Zahl in römische Zahl umwandeln
' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 19. Juli 2021
' ===========================================================================

' Dieses Programm demonstriert unter anderem die Verwendung von Stringarrays
' (Zeichenkettenfeldern) in Tabellen, LOOKTABBYTE und die Schleifen
' WHILE..WEND und REPEAT..UNTIL.

' Die Idee stammt von der Website "http://www.kultmags.com/" aus der
' Computerzeitschrift "Happy Computer 1983-12" ab Seite 117.

' An dieser Stelle möchte ich mich bei Dirk von "das |_ Team" und bei Norbert
' für ihre Unterstützung bedanken.

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

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

DIM c    BYTE       'temporäre Bytevariable
DIM zahl WORD       'die umzuwandelnde Zahl
DIM w    WORD       'temporäre Wordvariable

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

PrintSpc=ON         'SPACE vor einem dezimalen PRINT
End2Host=ON         'Bei Programmende gleich in den Host-Modus wechseln

WHILE TRUE

  REPEAT
    ?
    ?"Arabische Zahl in römische Zahl umwandeln:
    ?
    ?"Bitte Zahl bis 3999 eingeben: ";

    INPUT zahl
    IF zahl=0 THEN END

    'Wiederhole die Schleife, bis sowohl zahl<4000 und zahl>0 ist
  UNTIL zahl<4000 AND zahl>0

  ?:?"Ergebnis: ";

  puts zahl/1000+30 'Die arabische Zahl in einzelne Ziffern zerlegen und als
  zahl=zahl MOD 1000 'römische Zahl auf der Seriellen Schnittstelle ausgeben
  puts zahl/100+20
  zahl=zahl MOD 100 'Die Tausenderstelle beginnt beim 30. Element der Tabelle.
  puts zahl/10+10   'Die Hunderterstelle beginnt beim 20. Element der Tabelle.
  zahl=zahl MOD 10  'Die Zehnerstelle beginnt beim 10. Element der Tabelle.
  puts zahl         'Kleiner Zehn steht am Beginn der Tabelle.

  ?

WEND

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

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

' PROCEDURE puts(c)              ; 0 <= c <= 33
'
' Diese Subroutine/Prozedur sucht den gewünschten String in der Tabelle
' namens "woerter" und gibt ihn auf der Seriellen Schnittstelle aus.

PROCEDURE puts(c)
  w=0
  WHILE c                        'String in Tabelle suchen
    WHILE LOOKTABBYTE(woerter,w)
      ADD w,1
    WEND
    ADD w,1
    SUB c,1
  WEND

  WHILE LOOKTABBYTE(woerter,w)   'String Zeichen für Zeichen ausgeben
    PUT LOOKTABBYTE(woerter,w)
    ADD w,1
  WEND

  RETURN
END PROCEDURE

' --- Tabellen --------------------------------------------------------------

' Zweidimensionales Stringarray mit 10 Spalten und 4 Zeilen für die
' Konvertierung von arabischen Zahlen in römische Zahlen.

TABLE woerter BYTE
"",0,"I",0,"II",0,"III",0,"IV",0,"V",0,"VI",0,"VII",0,"VIII",0,"IX",0 '1..9
"",0,"X",0,"XX",0,"XXX",0,"XL",0,"L",0,"LX",0,"LXX",0,"LXXX",0,"XC",0 '10..90
"",0,"C",0,"CC",0,"CCC",0,"CD",0,"D",0,"DC",0,"DCC",0,"DCCC",0,"CM",0 '100..900
"",0,"M",0,"MM",0,"MMM",0                                             '1000..3000
0
END TABLE

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


Passender Link: Bedienungsanleitung zur Open-Macro und Open-Maxi

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

 Antwort schreiben

Bisherige Antworten:

Sehr gut kommentiert! (von Joachim - 24.07.2021 19:08)