Schaltjahr berechnen

17. November 2016

In den verschiedenen Grundlagen-Tutorials konntest Du viel über die wichtigsten Elemente der Programmierung lernen. Es wird Zeit, dieses Wissen zu kombinieren. Hierfür werden wir berechnen, ob ein bestimmtes Jahr ein Schaltjahr ist, oder nicht.

In Wirtschaftssimulationen, Aufbauspielen und Rundenstrategiespielen wird oft ein reales oder fiktives Datum berücksichtigt. Wenn man einzelne Tage berücksichtigen will, zum Beispiel, wenn eine Spielminute ein Tag ist, dann ist es sinnvoll, das Schaltjahr zu berechnen. Im Beispiel werden wir einige Dinge brauchen, die Du in vorangegangenen Tutorials lernen konntest. Du wirst ein Skript erstellen, Schleifen, ein Array und Zufallszahlen benutzen, ebenso if-Anweisungen, Texte ausgeben und natürlich viele Variablen verwenden.

Mindestens genau so interessant an diesem Beispiel ist der Umstand, dass wir eine mathematische Aufgabe mit Hilfe eines kleinen Programms lösen. Solche Themen kommen einem bei der Programmierung immer wieder unter.

Wie berechnet man das Schaltjahr?

Das Schaltjahr wird durch die Prüfung von 3 Bedingungen ermittelt.

  1. Das Jahr muss durch 4 teilbar sein
  2. Das Jahr darf nicht durch 100 teilbar sein außer
  3. wenn es durch 400 teilbar ist

Wenn diese drei Bedingungen erfüllt sind, ist es ein Schaltjahr. Wenn eines oder mehrere Bedingungen nicht erfüllt sind, ist es kein Schaltjahr.

Vorbereitung

Wie immer, brauchen wir erst einen Raum. Außerdem eine Schrift, die wir fnt_schaltjahr nennen. Ich habe die Größe auf 14 eingestellt und als Schriftart Times New Roman genommen. Dann erzeugen wir ein Objekt mit dem Namen obj_schaltjahr und setzen dieses in den Raum. Zu guter Letzt brauchen wir noch ein Skript mit dem Namen scr_schaltjahr. Mit dem Skript wird geprüft, ob ein vorgegebenes Jahr ein Schaltjahr ist, oder nicht.

Skript scr_schaltjahr

Nach der oberen Beschreibung wissen wir nun, dass das Skript ein Argument erwartet und das Ergebnis der Prüfung in Form von Wahr oder Unwahr zurück gibt. Im Fokus steht aber die eigentliche Prüfung.

Wenn wir die drei Bedingungen, die wir brauchen um ein Schaltjahr zu identifizieren, uns anschauen, stellen wir fest, dass wir uns im ganzzahligen Bereich befinden. Egal ob wir eine Jahreszahl durch 4, 100 oder 400 teilen, wir brauchen ein ganzzahliges Ergebnis, um die Richtigkeit bestätigt zu bekommen. In der Tabelle, welche im Tutorial zur if-Anweisung zu sehen ist, sehen wir verschiedene Ausdrücke. Schnell wird klar, dass wir dafür mod brauchen. mod gibt den Restwert einer Division zurück. Wenn wir eine Zahl dividieren und wir erhalten einen anderen Wert als Null, dann wissen wir, dass die Bedingung nicht erfüllt ist. Beispiel:

Als Jahr können wir eine beliebige Zahl eintrage. Diese wird durch 4 geteilt. Wenn der Restwert 0 ist, geben wir true zurück, ansonsten false.

Im Kern haben wir damit schon die Abfrage für unser Skript. Allerdings müssen wir drei Bedingungen prüfen, nicht nur eine. An dieser Stelle ist es gut, wenn man versucht, die drei Bedingungen in einen natürlichen Satz zu fassen. Was oben in den drei Sätzen steht, lässt sich auch wie folgt sagen:

“Wenn die Jahreszahl durch 400 teilbar ist oder durch 4 teilbar ist, der Restwert, wenn es durch 4 Teilbar ist, größer 0 ist, wenn es durch 100 geteilt wird, ist es ein Schaltjahr.”

Das heißt, unsere Abfrage besteht aus zwei Abschnitten. Der erste Abschnitt ist, dass die Jahreszahl durch 400 teilbar ist. Wenn diese Bedingung erfüllt wurde, ist es immer ein Schaltjahr. Die zweite Bedingung umfasst, dass die Jahreszahl durch 4, aber nicht durch 100 teilbar sein darf. Der Restwert durch 4 muss also 0 ergeben, der Restwert durch 100 muss ungleich 0 sein.

Nun schauen wir uns den passenden Code an:

Zunächst erwarten wir ein Argument. Beim Aufruf des Skripts wird die Jahreszahl benötigt, die wir in der Variable jahr speichern. Dann beginnt die Abfrage. Die if-Abfrage entspricht genau dem oben stehenden Satz. Um sich das zu verdeutlichen, muss man besonders auf die Klammern achten. Erst einmal wird die Teilbarkeit durch 400 geprüft. Wenn diese Bedingung erfüllt ist, geht die Prüfung nicht weiter und es wird gleich true ausgegeben. Wenn die Prüfung nicht erfolgreich war, geht es mit dem oder weiter. Dafür stehen die beiden vertikalen Striche ||. Das bedeutet “oder”. Was folgt ist die Prüfung der Teilbarkeit durch 4. Wenn der Restwert 0 ergibt, wird geschaut, ob die Teilung der Jahreszahl durch 100 ungleich 0 ist. Für das Ungleich steht das !=. Wenn die Prüfung erfolgreich war, wird true ausgegeben. Wenn nicht, dann false.

obj_schaltjahr

Event Create

Wir haben nun unser Skript und möchten dies testen. Hierbei ist es sinnvoll, mehrere Prüfungen vorzunehmen um diese auf dem Bildschirm anzuzeigen. Im Beispiel nehmen wir 10 Prüfungen mit zufälligen Zahlen vor. Da Menschen sehr schlecht darin sind, Zufallszahlen zu erzeugen, übernimmt das unser Programm.

Wir legen die Anzahl der Prüfungen fest. In der Schleife erzeugen wir Zufallszahlen, die zwischen 0 und 2200 liegen. Das Ergebnis speichern wir in das Array jahr. Außerdem erzeugen wir ein zweites Array mit dem Namen test. Hier speichern wir die Ergebnisse ab, die uns das Skript liefert.

Nun haben wir einerseits die Jahreszahlen, andererseits die Testergebnisse. Es gibt natürlich mehrere Wege, um diese Aufgabe zu lösen, doch diese Methode ist für Anfänger die anschaulichste.

Event Draw

Die Ergebnisse werden, mit den Jahreszahlen, auf dem Bildschirm ausgegeben. Wir definieren Schrift und Farbe, anschließend geben wir den Text mit einer for-Schleife aus.

Das Ergebnis kann dann so aussehen.

schaltjahre-berechnen

Wer das Programm noch verfeinern will, baut per Tastendruck einen Neustart und per Escape ein beenden des Programms ein. Das fertige Programm kannst Du hier downloaden:

Hinterlasse einen Kommentar

1 Kommentar auf "Schaltjahr berechnen"

Benachrichtige mich zu:
avatar
1024
Sortiert nach:   neuste | älteste | beste Bewertung
trackback

[…] mit Zufallszahlen zeigt die Grundlagen, wie man im GameMaker Zufallszahlen generiert. Tutorials wie Schaltjahr berechnen und Aktienkurs zeichnen zeigen konkrete Beispiele, wie Zufallszahlen helfen […]