Maya-Zahlen I
Inhaltsverzeichnis
Aufgabe
Die Aufgabe ist das Konstruieren eines Programms, dass Dezimalzahlen in Zeichenartige Zahlen der Mayas umzurechnen kann. Da die Maya eine eigene Symbolik für die Zahlen entwickelt haben, muss die entsprechend errechnete Zahl als Grafik ausgegeben werden.
Grundinformation
Symbolik
Um das Programm zu verstehen, benötigt man Grundkenntnisse zur Zahlendarstellung der Mayas. Die Grundlage für das Zahlensystem der Maya ist ein zwanziger-basiertes Zahlensystem. Zum Darstellen aller Zahlen werden folgende drei Zeichen verwendet.
Beispiele: Das Angeben von Zahlen erfolgt aufbauend in zwanziger Blöcken. Eine 2 wird zum Beispiel mit 2 Punkten dargestellt. Eine 6 mit einem Strich und einem Punkt. Die 19 wird 3 übereinander gelegten Streifen und 4 Punkten dargestellt.
Höhere Zahlen
Sollte nun eine Zahlhöher als 20 dargestellt werden, werden 20-Blöcke übereinander gestellt. Das bedeutet es ist ein Punkt über einer Muschel.
Das Zahlensystem baut sich also wie folgt auf:
| Zahl | Darstellung |
|---|---|
| 20 | Punkt über Muschel |
| 40 | 2 Punkte über Muschel |
| 127 | (1 Strich + 1 Punkt) über (1 Strich + 2 Punkte) |
Ganz große Zahlen (Staffelung)
| Zahl | Darstellung |
|---|---|
| ab 0 | 1 Block |
| ab 20 | 2 Blöcke |
| ab 400 | 3 Blöcke |
| ab 8000 | 4 Blöcke |
| ab 160000 | 5 Blöcke |
Auf diese Weise lassen sich auch große Zahlen darstellen (abhängig von der Höhe der Höhle, in der der Maya haust)
Wer weitere Informationen zu dem Theme Zahlensystem der Maya haben möchte, findet unter dem angegebenen Link eine ausführliche Beschreibung zu Geschichte und Technik der Maya-Zahlen.
http://www.mathezentrale.de/maya/maya1.htm
Programmtechnische Umsetzung
Grundidee
Um die Dezimalzahlen als Maya Symbol auszugeben, muss erst einmal die Unterteilung in die entsprechenden Abschnitte erfolgen. Da jeder Block einen gewissen Maximal Wert besitzt, kann man eine ganzzahlige Division durchführen. Der Rest wird jeweils in immer kleiner werdenden Portionen eingeteilt, sodass eine bestimmte Zahl Blöcke mit festen Werten entsteht.
Ein Array ermöglicht der algorithmische Bearbeitung der Zahlen mit der größten Flexibilität. Durch eine nichtstatische verwendung, könnte die Anwendung auch für beliebig große Zahlen eingesetzt werden.
Berechnung
Durch den dynamischen Aufbau muss eine mathematische Funktion gefunden werden, mit der für bliebige x die Blockgrößen berechnet werden können. Eine Solche Formel ist beispielsweise:
Mit dieser kann dann in einer Schleife die eingegebene Zahl in Ihre Maya Blöcke zerlegt werden.
Auch muss beachtet werden, dass Null-Symbole nur dann angezeigt werden, wenn voher mind. eine Maya Zahl größer als 0 zu finden war. Andernfalls muss sie ausgeblendet werden.
Einschränkungen
Da die Größe der Arrays von Beginn an festgelegt wird, ist nur eine Darstellung bis zu einer bestimmten Größe möglich. Durch die von mir festgelegte Array-Größe von 7 Indizes ergibt sich für n=7 ein Zahlenraum von
also 1.279.999.999 Zahlen. Eine Erweiterung wäre aber im Quellcode möglich. Allerdings werden hier wieder Anpassungen erforderlich, denn der Zahlenraum des Datentyps Integer reicht nur bis 2.147.483.647 die maximale Maya Zahl wära aber 2.559.999.999. Es wäre damit eine Real-Zahl erforderlich, die eine andere Berechnung erfordert.
Code
Die eigentliche Umwandlung der Zahlenwerte in Maya Blöcke erfolgt mit folgendem Algorithmus:
for i := 0 to arraylength - 1 do begin // Divisionszahl aus der Formel 2^x * 10^x divnr := round(power(2,arraylength - i - 1)) * round(power(10,arraylength - i - 1)); // Ganzzahlige Division pack[i] := nummer div divnr; // Abzug der Bereits verwendeten Zahlenmenge von der Gesamtmenge nummer := nummer - pack[i] * divnr; // Sollte eine Zahl > 0 sein, zeige zukünftig Null-Symbol if(pack[i] > 0) then zahlstart := true; visible[i] := zahlstart; end;


