Noch ein Tipp - definiere zuerst die Typen und dann lass die Konstanten folgen:
Delphi-Quellcode:
type
...
TEclipse=(ecNone, ecPartial, ecNoncentral, ecCircular, ecCirculartotal, ecTotal, ecHalfshadow);
...
const
EclipseName : array [TEclipse] of string = // vorher: array[0..6]
('', 'Teilfinsternis', 'Teilfinsternis', 'Randfinsternis',
'Teilfinsternis mit Rand', 'Totale Finsternis', 'Halbschatten');
So kannst du die Deklaration für EclipseName verbessern.
Dies vereinfacht deinen Code und erhöht die Sicherheit weil der Compiler sicherstellt, dass die Anzahl der Strings genau auf den Typ TEclipse passt.
Das Gleiche gilt auch für "Bundesland", "Jahreszeit",...
Ausserdem würde ich empfehlen einen eigenen Datentyp für die Längen- und Breitenangaben zu deklarieren:
Delphi-Quellcode:
type
TGeoAngle = Extended;
function Sun_Rise(date:TDateTime; latitude, longitude:TGeoAngle):TDateTime;
Damit wird der Code besser lesbar denn man sieht, dass die Funktion
Sun_Rise() zwei Winkelangaben erwartet.
Der Code enthält EXTREM viele hartcodierte Zahlen; man kann das bei astronomischen Berechnungen nicht ganz vermeiden.
Manche Werte können aber leicht durch Konstanten ersetzt werden.
HOURS_PER_DAY=24; EARTH_DIAMETER=...; AVERAGE_MOON_DISTANCE=...
Mit den Konstanten versteht man besser was da eigentlich gerechnet wird.