Algorithmus für Monatsdifferenz



  • Datumsrechner schrieb:

    Beispiel: November - März , Ergebnis muß 5 lauten.

    Ob vorwärts oder rückwärts - ich komme einfach nicht auf 5. Erkläre mir die Berechnung.



  • EOP schrieb:

    Datumsrechner schrieb:

    Beispiel: November - März , Ergebnis muß 5 lauten.

    Ob vorwärts oder rückwärts - ich komme einfach nicht auf 5. Erkläre mir die Berechnung.

    Durch einfaches Abzählen: November, Dezember, Januar, Februar, März => 5 Monate

    => Das hat im eigentlichen Sinne nichts mit Subtraktion zu tun. Wenn man klassich subtrahieren wollte, sollte 4 raus kommen.

    @TE: Wenn es nur um Monate geht, würde ich mir mal die Modulo Funktion anschauen. Im speziellen Modulo 12.



  • Datumsrechner schrieb:

    Dabei müssen z.B. Monatsdifferenzen zwischen zwei Zeitangaben berechnet werden.

    Soviel dazu.


  • Mod

    Man könnte einen Haskellinterpreter bemühen:

    GHCi..
    Prelude> length "hallo"
    5
    Prelude> length "November"
    8
    Prelude> length "März"
    4
    Prelude> 8 - 4
    4
    Prelude> 8 + 4
    12
    


  • Haha, der war gut und Mai - Juni = -1.



  • EOP schrieb:

    Haha, der war gut und Mai - Juni = -1.

    -1 % 12 = 11 🤡

    //Edit: Einfach vergessen.... ich brauche erstmal noch ein Kaffee



  • 3 - 4 = -1, da braucht man nicht rummodulen.

    Irgendwie haben wir die eigentliche Aufgabenstellung etwas aus den Augen verloren. Kommt mir jedenfalls so vor. 🙂



  • EOP schrieb:

    3 - 4 = -1, da braucht man nicht rummodulen.

    11 Monate wären es von Juni - Mai, daher kam die Aussage ursprünglich.

    EOP schrieb:

    Irgendwie haben wir die eigentliche Aufgabenstellung etwas aus den Augen verloren. Kommt mir jedenfalls so vor. 🙂

    Kommt mir auch so vor 😃



  • Schlangenmensch, du hast nachtfeuers post wohl nicht genau angesehen und analysiert.



  • Doch... ich denke schon. Nur hat ein Gedankenfehler meinerseits meine nicht ernst gemeinte Anmerkung ziemlich kaputt gemacht. Daher eine kurze Erklärung:

    Du hast zu Nachtfeuers Post den entsprechenden Witz mit Mai - Juni gemacht.
    Ich habe dann (falsch) gedacht, ah, Mai - Juni, sind doch 11 Monate, haha -> also wende ich auf ein "falsches" Ergebnis, eine in einem anderen zusammenhang mögliche Berechnung an und bekomme (zufällig) das richtige Endergebnis.



  • Ich mache keine Witze - bin ein todernster Mensch.



  • Alles klar, dann weiß ich Bescheid.



  • ---



  • Ganz so ausschweifend hättest du das auch nicht kommentieren müssen, Gregor.



  • EOP schrieb:

    Ganz so ausschweifend hättest du das auch nicht kommentieren müssen, Gregor.

    Ich hatte festgestellt, dass das, was ich geschrieben hatte, unausgereift war, wollte das aber auch nicht mehr korrigieren.

    ...und eigentlich sollte der Threadersteller dieses Problemchen zuerst mal für sich selbst klar und deutlich formulieren und dann ganz alleine lösen. Das gehört zu dieser Art von Problemen, die man beim Programmieren drei mal am Tag löst, auch wenn man dafür vielleicht mal 10 Minuten knobeln muss. Wenn jemand an so etwas scheitert und nach einer vorgefertigten Lösung ruft, sollte er lieber etwas anderes machen als programmieren. Dann fehlt nämlich sowohl Talent, als auch Interesse oder auch einfach ganz grundlegendes Verständnis mathematischer Operationen, die man beim Programmieren andauernd braucht, wie zum Beispiel die Subtraktion, die Modulo-Berechnung, das Bestimmen des Minimums zweier Werte, die Bestimmung eines Absolutbetrags eines Werts.

    @Threadersteller: Sorry für dieses Arschlochkommentar. Gib Dir nen Ruck und versuch es noch mal selbst ein bisschen. Es ist nicht so schwer. 😉



  • Weil du recht hast, Gregor, kamen auch nur wenige konstruktive Beiträge.
    Das grundlegende Problem der Denkfaulheit haben anscheinend auch Andere erkannt.


  • Mod

    @Gregor du hast die bereits von Schlangenmensch angedeutete Kombinatorik vergessen.



  • SeppJ schrieb:

    Der Algorithmus, um Differenzen zu berechnen, nennt sich Subtraktion.

    Stimmt, es ist einfach eine Frage der Subtraktion, war in der Zwischenzeit auch selber drauf gekommen, der Post im Forum hat quasi dazu geführt.

    Mann kann ja einfach Jahr für Jahr rechnen, also ensprechend von November - Dezember= (12-11)+1 = 2 und dann nochmal einfach 3 dazu addieren. (Januar-März).
    Vorher müßte man natürlich noch die Jahre abgleichen, um festzustellen, welcher Wert der geringere ist.

    SeppJ schrieb:

    Du möchtest aber vielleicht gleich etwas weiter denken. Ist die Differenz zwischen 30.11. und 1.12. wirklich 1 Monat? Ist die Differenz zwischen 1.12. und 31.12. wirklich 0 Monate?

    Neiin, natürlich nicht :-), mein Ansatz wäre der, ein Datum in 3 Variablen aufzuteilen, also Jahr, Monat, Tag. Dann werden zunächst alle wichtigen Eigenschaften abgefragt, also z.B. Schaltjahr, 30 Tage oder 31 Tage, etc. Anschließend wird, wenn notwendig, subtrahiert.

    SeppJ schrieb:

    Du wirst jedoch feststellen, wenn man weiter denkt, dass ein Datumsrechner dann sehr schnell sehr kompliziert wird.

    Ja, das habe ich mittlerweile auch festgestellt, daß ein eigentlich ganz einfacher zu scheinender Datumsrechner für Hobbyprogrammierer(bisschen VB und bisschen C++, bestenfalls Grundlagenkenntnisse und Inselwissen) nicht mal eben zu programmieren ist. Aber Zeit ist nicht das Problem 🙂



  • @Datumsrechner:
    Kleiner Tipp. Schau dir mal die Funktionen aus time.h an.


  • Mod

    Datumsrechner schrieb:

    SeppJ schrieb:

    Du möchtest aber vielleicht gleich etwas weiter denken. Ist die Differenz zwischen 30.11. und 1.12. wirklich 1 Monat? Ist die Differenz zwischen 1.12. und 31.12. wirklich 0 Monate?

    Neiin, natürlich nicht :-), mein Ansatz wäre der, ein Datum in 3 Variablen aufzuteilen, also Jahr, Monat, Tag. Dann werden zunächst alle wichtigen Eigenschaften abgefragt, also z.B. Schaltjahr, 30 Tage oder 31 Tage, etc. Anschließend wird, wenn notwendig, subtrahiert.

    Wie schon gesagt: Das wird schnell sehr kompliziert. Dein Ansatz geht schon daneben: Ist nun der Abstand zwischen dem 1. Februar und dem 1. März gleich einem Monat und 0 Tagen, aber der Abstand zwischen 1. Dezember und 31. Dezember ist 0 Monate und 30 Tage? Dein Ansatz würde sagen: Ja!

    Der beste Tipp den man zu Datumsrechnungen daher geben kann: Tu's nicht! Wirklich nicht. Nutz fertige Bibliotheken, die haben viel Denkarbeit darein gesteckt und es ist keine Schande, auf der Arbeit anderer Leute aufzubauen. Im Gegenteil ist es ziemlich peinlich, wenn man es selber und falsch macht.


Anmelden zum Antworten