Julianisches Datum als Einzeiler

  • Hallo,


    mit dem Erscheinen der ersten Heimcomputer kam bald der damalige Trend der "Einzeiler" auf. In fast jeder Monatszeitschrift gab es einen "Einzeiler des Monats". Man wollte (oft mit Sonderzeichen als Abkürzung für Computerbefehle) soviel Basic-Programm wie möglich in eine (begrenzte) Zeile packen. In dieser Zeit kam mir die Idee, es mal mit dem julianischen Datum zu versuchen.


    Die Berechnung dieser Tageszählung umfasst einige Fälle, die ich mit Logik-Operatoren umgangen habe. So sind IF-Abfragen nicht mehr nötig, und die Variablen behalten für weitere Berechnungen ihre Werte.


    j = int ( 365.25 * (y + (m<3) ) + int ( 30.6001 * (1 + (m - (m<3) * 12) ) ) + 1720981.5 + d + u/24


    Die Formel basiert auf den Werten für true = -1 und false = 0. Es gibt Programmiersprachen, bei denen true = +1 ist. Dann müssen Plus- und Minuszeichen (rot) getauscht werden.


    Hierin sind d, m, y der Tag, der Monat und das Jahr des betreffenden Zeitpunkts, u die Uhrzeit (UT). Der Einzeiler ist in dieser Form gültig vom 1. 3. 1900 bis zum 28. 2. 2100


    Man erhält so für den 1. 1. 1985 1h MEZ ( = 0h UT) den Wert 2446066.5, für den 1. 4. 2001 13h MEZ (= 12h UT) den Wert 2452001.0


    salü+cs, volker :hot_beverage:

    Deep Sky visuell, Mond und Sonne im Weißlicht mit 10" f/5 Dobson auf Selbstbau Birke-Multiplex  :dizzy:

  • Moin Volker,


    ich habe mal zwei Fragen:


    1. In welcher Programmiersprache kann man logische Operatoren direkt in Formeln verwenden? Mit m<3 kann man nicht rechnen, ohne zumindest eine Funktion zu benutzen die als Ergebnis Deine -1 liefert.


    2. Alle Programmiersprachen die ich kenne liefern für true stets +1 oder eigentlich sogar "nicht nul" oder "nul" (für nicht wahr) . In welcher Programmiersprache ist true = -1?


    Mach mich schlau bitte ;)


    Gruß Thomas

  • Moin Volker,


    ich habe mal zwei Fragen:


    1. In welcher Programmiersprache kann man logische Operatoren direkt in Formeln verwenden? Mit m<3 kann man nicht rechnen, ohne zumindest eine Funktion zu benutzen die als Ergebnis Deine -1 liefert.


    In Excel kann man auch mit logischen Ergebnissen rechnen, aber das zähle ich nicht unbedingt zu den Programmiersprachen.

  • Hallo Thomas,


    Mit m<3 kann man nicht rechnen

    nein, es ist ein logischer Operator bzw. eine Funktion, die je nach Abhängigkeit von m entweder den Wert -1 (true) oder 0 (false) hat.


    Die Ursprünge des Einzeilers liegen im Basic des Commodore 64 aus den 1980er Jahren. Dort hatte true den Wert -1. Heute programmiere ich in Visual Basic 6, auch da ist true = -1.


    Mit solchen Logikfunktionen kann man sich if-Abfragen und damit Veränderungen der Variablen sparen. Man muss halt schauen, welchen Wert "true" in der jeweiligen Sprache hat und das ggf ändern.

    Deep Sky visuell, Mond und Sonne im Weißlicht mit 10" f/5 Dobson auf Selbstbau Birke-Multiplex  :dizzy:

  • ...hier als Beispiel noch die Originalzeile (noch ohne Uhrzeit, mit anderen Variablennamen und m<=2)



    Natürlich kann man das auch mit if-Abfragen machen, aber die Logikoperatoren sind ja gerade der Punkt im Einzeiler. :slightly_smiling_face:


    salü+cs, volker :hot_beverage:

    Deep Sky visuell, Mond und Sonne im Weißlicht mit 10" f/5 Dobson auf Selbstbau Birke-Multiplex  :dizzy:

  • Habe gerade mal im Visual Basic Manual geschmökert .... da kann man das scheinbar tatsächlich ohne Funktionsbezeichner (wie in anderen Sprachen erforderlich) ausführen. Ist zwar kurz und elegant, aber ich finde dann Quelltext der sich aus lesbaren Formeln zusammensetzt oder eben doch die paar IF Abfragen mehr hat "lesbarer" und dadurch eingängiger. Da Visual Basic ja auch hinter Excel steckt, erklärt sich damit auch die Aussage von HHausHH. Trotzdem wird das ganze Microsoft Gedöns aber wohl nie richtig meins werden. Lang lebe RPG auf AS/400 ! ^^ ...oder eben auch PHP und Python ...


    Trotzdem Danke für den kurzen Exkurs.


    Gruß Thomas


    Nachtrag: in PHP gibt's dafür schon eine feste Funktion .... https://www.php.net/manual/de/function.juliantojd.php

    Also noch kürzer ...

  • Da oute ich mich mal. Über 45 Jahre war ich in der Programmierung bei Otto tätig, zu Anfang noch mit Lochkarten. Die längste Zeit nutzten wir dabei die Assemblersprache, wo man noch jedem Bit die Hand gibt.

    Jetzt, als Rentner, bin ich dann doch zu einem echten Excel-Fan geworden und habe damit auch anspruchsvolle Arbeiten lösen können. Selbst die komplizierten Berechnungen für meine Einnordungs-Routine konnte ich komplett in Excel lösen. Wenn es allerdings auf Performance ankommt, nutze ich immer noch C.


    Meine Erfahrung hat mich aber von den Einzeilern und ähnlichen Konstrukten abgebracht. Nach einem halben Jahr versteht man sein eigenes Coding nicht mehr. Bei Excel ist das auch so, weil es die Einzeiligkeit fördert, deshalb arbeite ich da eher mit Zwischenergebnissen.

  • Hallo,


    das Thema hatte natürlich ein "nostalgisches Augenzwinkern", bitte den ersten Absatz nochmal lesen.


    Es ging hier auch nicht um eine tolle Programmiertechnik oder eine besondere Entdeckung, nur um eine ungewöhnliche, nostalgische Lösung. Der Commodore 64 ist (eine schöne) Geschichte und auch Visual Basic ist steinalt. Niemand will hier die Einzeiler feiern oder gar nochmal aufleben lassen... ;)


    Wie Thomas ( tliastro) oben schon schrieb, gibt es dazu heute in den modernen Programmiersprachen eine eigene Funktion.


    lg, volker :hot_beverage:

    Deep Sky visuell, Mond und Sonne im Weißlicht mit 10" f/5 Dobson auf Selbstbau Birke-Multiplex  :dizzy:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!