Maya-Zahlen I

Aus Informatik
Wechseln zu: Navigation, Suche

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

Zahl 0
Zahl 1
Zahl 5

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: y = 2^x \cdot 10^x 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 \sum_{x=0}^{n-1} 2^x \cdot 10^x \cdot 19 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;

Download

Datei:MayaZahlen.zip