Lösungsansatz gesucht

Ottonormalkopf

Neues Mitglied
Hi,
ich zerbreche mir schon eine Weile den Kopf, finde aber für meine Übungsaufgabe keinen Ansatz.
Die Aufgabe:
In einem anderen Sonnensystem gibt es einen Planeten „E“ der sich genau wie die Erde
verhält. Tage, Monate, (Schalt-)Jahre verhalten sich wie bei uns, die Kalender sind identisch.
Allerdings ist der Mond schon etwas schneller und benötigt exakt 29 Tage für einen Umlauf.
Am 1. Januar 2013 sei dort Vollmond. Schreiben Sie ein Programm DoubleMoon.java,
das entsprechend einem Kommandozeilenparameter N die ersten N Monate (in jeweils einer
Zeile) ausgibt, in denen es 2-mal Vollmond gibt. Das Format für die Ausgabe ist:
YYYY, Monat

Es darf nur die Klasse "Math" als zusätzliche Klasse verwendet werden, also nicht die Kalenderklasse. Würde mich freuen, wenn jemand einen groben Lösungsvorschlag hätte.

Danke im Voraus!
 
Naja, das ist doch einfach. Die synodische Periode (Zeit zwischen zwei gleichen Stellungen des Mondes, also etwa wie hier interessant Vollmond zu Vollmond) sei hier ganz genau 29,0 Tage. Zum Vergleich, für den echten Mond und die echte Erde hat der Mond eine synodische Periode von 29,5306 Tagen. Jetzt musst du ja nur in einer Schleife Tage zählen, also pro Schleifeniteration immer um +29 inkrementieren (modulo der Anzahl der Tage des aktuellen Monats - mit Berücksichtigung der Schaltjahre). Wenn du vor und nach der Addition von 29 (modulo der Tage des aktuellen Monats) immer noch imselben Monat landest, dann hast du einen der gesuchten N Monate gefunden.
Die Schaltjahrregeln (die ja nicht kompliziert sind), musst du dann halt per Hand implementieren.
 
Ganz so kompliziert ist es eigentlich nicht
Eingenlicht ein Dreizeiler
Java:
static void printIt(float UmlaufdauerErdeSonne, float UmlaufdauerMondErde, int n) {
    int jahr = 2013;
    for (int tag = 0; n > 0; tag += UmlaufdauerMondErde) {
        if ((int) (tag % UmlaufdauerErdeSonne / (UmlaufdauerErdeSonne / 12.0f)) == (int) ((tag + UmlaufdauerMondErde) % UmlaufdauerErdeSonne / (UmlaufdauerErdeSonne / 12.0f))) {
            System.out.println((jahr + (tag / UmlaufdauerErdeSonne)) + " " + (tag % UmlaufdauerErdeSonne / (UmlaufdauerErdeSonne / 12.0f)));
            n--;
        }
    }
}

public static void main(String[] args) {
    printIt(365.25f, 29.0f, 5);
}

Wie man sieht ich gehe einfach von einer Siderischen anomalistischen Umlaufzeit von 365,25 Tagen aus....

Natürlich bräuchte man die von httpdigest erwähnte Schaltjahrregel, aber ehrlich ich habe schon Schwierigkeiten wenn mich einer Fragt wie viele Tage September hat.....
 
n=25
Code:
2013.0      0.0
2014.6674      8.008214
2016.3347      4.016427
2018.0021      0.024640657
2019.6694      8.032854
2021.3368      4.0410676
2023.0835      1.0020534
2024.7509      9.010267
2026.4182      5.0184803
2028.0856      1.026694
2029.7529      9.034907
2031.4203      5.0431213
2033.167      2.0041068
2034.8344      10.0123205
2036.5017      6.020534
2038.1691      2.0287473
2039.8364      10.036961
2041.5038      6.0451746
2043.2505      3.0061603
2044.9178      11.014374
2046.5852      7.0225873
2048.2527      3.0308008
2049.92      11.039015
2051.6667      8.0
2053.334      4.0082135

Wäre toll wenn das jemand verifizieren könnte....

Bearbeitung:
n=25
Code:
von 2013 Jan. (2013.0)        bis 2013 Jan. (2013.0793)
von 2015 Okt. (2014.7467)    bis 2015 Okt. (2014.8262)
von 2016 Jun. (2016.4141)    bis 2016 Jun. (2016.4935)
von 2018 Jan. (2018.0021)    bis 2018 Jan. (2018.0814)
von 2018 Mär. (2018.1609)    bis 2018 Mär. (2018.2402)
von 2020 Okt. (2019.7488)    bis 2020 Okt. (2019.8282)
von 2021 Jul. (2021.4956)    bis 2022 Jul. (2021.575)
von 2023 Mär. (2023.1628)    bis 2023 Mär. (2023.2423)
von 2025 Okt. (2024.7509)    bis 2025 Okt. (2024.8302)
von 2026 Jul. (2026.4976)    bis 2027 Jul. (2026.577)
von 2028 Mär. (2028.1649)    bis 2028 Mär. (2028.2444)
von 2030 Nov. (2029.8323)    bis 2030 Nov. (2029.9117)
von 2032 Aug. (2031.5791)    bis 2032 Aug. (2031.6584)
von 2033 Apr. (2033.2465)    bis 2033 Apr. (2033.3258)
von 2035 Dez. (2034.9138)    bis 2035 Dez. (2034.9932)
von 2037 Aug. (2036.581)    bis 2037 Aug. (2036.6605)
von 2038 Mai. (2038.3279)    bis 2038 Mai. (2038.4072)
von 2040 Dez. (2039.9158)    bis 2040 Dez. (2039.9952)
von 2042 Aug. (2041.5831)    bis 2042 Aug. (2041.6626)
von 2043 Mai. (2043.33)        bis 2043 Mai. (2043.4093)
von 2045 Dez. (2044.9178)    bis 2045 Dez. (2044.9973)
von 2047 Sep. (2046.6646)    bis 2047 Sep. (2046.744)
von 2048 Mai. (2048.332)    bis 2048 Mai. (2048.4114)
von 2052 Okt. (2051.746)    bis 2052 Okt. (2051.8254)
von 2053 Jun. (2053.4133)    bis 2053 Jun. (2053.493)

(Da ist noch Einiges im Argen)
 
Ich hatte ein round() zu viel:
Code:
von 2013 Jan. 0 0.0
bis 2013 Jan. 29 29.0
29 0

von 2014 Okt. 638 272.75
bis 2014 Okt. 667 301.75
29 638

von 2016 Jun. 1247 151.25
bis 2016 Jun. 1276 180.25
29 609

von 2018 Jan. 1827 0.75
bis 2018 Jan. 1856 29.75
29 580

von 2018 Mär. 1885 58.75
bis 2018 Mär. 1914 87.75
29 58

von 2019 Okt. 2465 273.5
bis 2019 Okt. 2494 302.5
29 580

von 2021 Jul. 3103 181.0
bis 2021 Jul. 3132 210.0
29 638

von 2023 Mär. 3712 59.5
bis 2023 Mär. 3741 88.5
29 609

von 2024 Okt. 4292 274.25
bis 2024 Okt. 4321 303.25
29 580

von 2026 Jul. 4930 181.75
bis 2026 Jul. 4959 210.75
29 638

von 2028 Mär. 5539 60.25
bis 2028 Mär. 5568 89.25
29 609

von 2029 Nov. 6148 304.0
bis 2029 Nov. 6177 333.0
29 609

von 2031 Aug. 6786 211.5
bis 2031 Aug. 6815 240.5
29 638

von 2033 Apr. 7395 90.0
bis 2033 Apr. 7424 119.0
29 609

von 2034 Dez. 8004 333.75
bis 2034 Dez. 8033 362.75
29 609

von 2036 Aug. 8613 212.25
bis 2036 Aug. 8642 241.25
29 609

von 2038 Mai. 9251 119.75
bis 2038 Mai. 9280 148.75
29 638

von 2039 Dez. 9831 334.5
bis 2039 Dez. 9860 363.5
29 580

von 2041 Aug. 10440 213.0
bis 2041 Aug. 10469 242.0
29 609

von 2043 Mai. 11078 120.5
bis 2043 Mai. 11107 149.5
29 638

von 2044 Dez. 11658 335.25
bis 2044 Dez. 11687 364.25
29 580

von 2046 Sep. 12296 242.75
bis 2046 Sep. 12325 271.75
29 638

von 2048 Mai. 12905 121.25
bis 2048 Mai. 12934 150.25
29 609

von 2051 Okt. 14152 272.5
bis 2051 Okt. 14181 301.5
29 1247

von 2053 Jun. 14761 151.0
bis 2053 Jun. 14790 180.0
29 609

Jetzt sollte es stimmen 😉
Die dritte ist die Differenz zwischen 1. und 2. Ereignis desselben Monats und die Differenz zum vorherigen Ereignis
Ich kann da kein Muster erkennen🙁
 

Zurück
Oben