Eine Formel zur Bestimmung des Wochentags zu einem Datum: 1.) Bestimme A

Ähnliche Dokumente
1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Informatik 1 - Translation Studies in Information Technology. Musterlösung zum Aufgabenblatt der ersten Pflichtübung im Wintersemester 16/17

Datum Wochen Band DVD Band eingelegt Protokoll kontr. Recovery kontr. Tag Nr. RW Sign. Sign. Sign.

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Kalenderrechnung. Einleitung

System.out.println("TEXT");

Ich kann erklären, warum es Tag und Nacht gibt. Ich kenne die Wochentage und ihre Reihenfolge.

Vorlage zur Dokumentation der täglichen Arbeitszeit

II.1.1. Erste Schritte - 1 -

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Vorlage zur Dokumentation der täglichen Arbeitszeit

Haushaltsbuch Jänner 2013

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Nadel 1 Nadel 2 Nadel 3

Java - Programmierung - Prozedurale Programmierung 1

Wangerooge Fahrplan 2016

Eingabe und Ausgabe in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

JDBC. Allgemeines ODBC. java.sql. Beispiele

Ausgabe:

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

Java: Eine kurze Einführung an Beispielen

Informatik B von Adrian Neumann

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Vorbereitende Aufgaben

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Einstieg in die Informatik mit Java

Wangerooge Fahrplan 2015 Fahrzeit Tidebus 50 Minuten, Schiff und Inselbahn ca. 90 Minuten.

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1 Dreiecksfläche. Für das Dreieck A( 1, 0), B(0, 2), C(1, 0) berechnet das Programm zum Beispiel2 diefläche2.0:

Übungen Programmieren 1 Felix Rohrer. Übungen

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Sequenz Verzweigung (Selektion, Auswahl) Schleife (Repetition, Wiederholung)

Die Programmiersprache C Eine Einführung

public class SternchenRechteckGefuellt {

stadtbus Ravensburg Weingarten Baindt - Baienfurt - Weingarten - Ravensburg - Schmalegg

Hans Scheitter GmbH & Co.KG

Einstieg in die Informatik mit Java

Dr. Monika Meiler. Inhalt

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Java Einführung Exception Handling. Kapitel 17

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Exceptions: Parameterprüfung import java.io.ioexception;

ihrer Klasse benötigt die Funktion einfuegenan:

Anweisungen zur Ablaufsteuerung

Welcome to java. einfach objektorientiert verteilt interpretierend robust secure architekturneutral portabel schnell parallel(multitheded)

Informatik 1 - Translation Studies in Information Technology. Musterlösung zum Aufgabenblatt der zweiten freiwilligen Aufgabe im Wintersemester 08/09,

Javakurs für Anfänger

JAVA - Methoden

Programmieren mit einem einfachen Klassenkonzept

Kurstage Geprüfte(r) Technischer Fachwirt(-in) IHK

Kurstage IT Fachwirt(-in) IHK

Klassenvariablen, Klassenmethoden

Zentralübung Grundlagen der Programmierung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

II.3.1 Rekursive Algorithmen - 1 -

Kapitel 3. Programmierkurs. Arten von Anweisungen. 3.1 Was sind Anweisungen?

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Programmieren in Java

Praktische Informatik I WS 1999/2000

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Klaus Dürrschnabel 7. Mai 2010

Propädeutikum zur Programmierung

Bitte beachten Sie: Es gibt mehr als einen Lösungsweg. Ihre Lösung kann auch richtig sein, wenn sie nicht mit der hier gezeigten Lösung übereinstimmt.

Programmieren in Java

Abonnieren Sie die kostenlose epaper-zeitung unter

Ausdrucksbäume in verschiedenen Darstellungen

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Java-Schulung Grundlagen

Primitive Datentypen

5. Tutorium zu Programmieren

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Kurstage Geprüfte(r) Technischer Fachwirt(-in) IHK

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Selbststudium OOP6 & ALG Programmieren 1 - H1103 Felix Rohrer

Datenstrukturen / Container in Java

Bedienungsanleitung Touch Panel Version Schaltuhr - Systemmenü

Distributed Computing Group

3. Grundlegende Sprachkonstruktionen imperativer Programme

Kurstage Geprüfte(r) Technischer Fachwirt(-in) IHK

Einführung in Java, Teil 7

Mein Kalenderbüchlein

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

Programmieren in Java

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Kalenderrechnen. Olaf Schimmel 13. November 2015

Kurstage Geprüfte(r) Technischer Fachwirt(-in) IHK

Vorkurs Informatik Wintersemester 2015/2016. Programmtexte

Sprachkonstrukte Verzweigungen und Array-Strukturen

boolean ispalindrome = word.equalsignorecase(reverse.tostring());

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

IT Basics 2 Handout u

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Kurstage Geprüfte(r) Technischer Fachwirt(-in) IHK

Transkript:

Eine Formel zur Bestimmung des Wochentags zu einem Datum: 1.) Bestimme A y c A = [ 2,6 m 0,2] + d+ y+ + + 5c dabei ist [x] m d die größte ganze Zahl unterhalb oder gleich x Bsp.: [7,2] = 7 [5] = 5 [-6.9] = -7 die historische Monatsnummer 1 für März,...10 für Dezember, 11 für Januar, 12 für Februar die Nummer des Tages im Monat c die Nummer des Jahrhunderts z.b. 1987 c=19 y Jahreszahl innerhalb des Jahrhunderts 1987 y=87 Vorsicht: Januar und Februar zählen noch zum alten Jahr! 1.1.1900 c=18; y=99 2.) Berechne w = A mod 7 Für den Wochentag gilt dann : w 0 1 2 3 4 5 6 Tag So Mo Di Mi Do Fr Sa 24.11.1975 75 19 A = [ 2,6 9 0,2] + 24+ 75+ + + 95 4 = 23+ 24+ 75+ 18+ 4+ 95 = 235 w = 235mod7= 1 d.h.montag 1

99 19 A = [ 2,611 0,2] + 1+ 99+ + + 95 4 1.1.2000 = 28+ 1+ 99+ 24+ 4+ 95 = 251 w = 251mod7= 6 d.h.samstag Diese Formel gilt für alle Daten ab der Einführung des Gregorianischen Kalenders ab Freitag dem 15.10.1582. Bei dieser Kalenderreform folgte auf Donnerstag, 4.10.1582 (Julianisches Datum) Freitag der 15.10.1582 15.10.1582 82 15 A = [ 2,6 8 0,2] + 15+ 82+ + + 75 = 20+ 15 + 82+ 20+ 3+ 75 = 215 w = 215mod7= 5 d.h.freitag Grund für diese Umstellung war eine verbesserte Schaltjahresregelung : Im Julianischen Kalender war jedes Jahr ein Schaltjahr, dessen Jahreszahl mit 4 teilbar war. Da die Umlaufzeit der Erde um die Sonne 365,2422 Tage beträgt macht man bei der Julianischen Definition in 400 Jahren einen Fehler von 400 (0,25 0,2422) = 3,12 3,12 Tagen. Im Gregorianischen Kalender lässt man deshalb alle 400 Jahre 3 Schalttage ausfallen: Ein Jahrhundert ist nur ein Schaltjahr, wenn die Jahreszahl mit 400 teilbar ist! Schaltjahre: 1600, 2000, 2400, 2800,... keine Schaltjahre : 1700,1800,1900,2100,2200,... 1 Das Zuviel von 0,12 Tagen alle 400 Jahre macht sich erst nach 8 400 3333 3 Jahren also im Jahr 1600+3333=4933 bemerkbar. Spätestens zu diesem Zeitpunkt muss über den Wegfall eines weitern Schalttages nachgedacht werden. 2

// Wochentag.java 13.02.02 // Bestimmt zu einem gegebenen Datum den zugehörigen Wochentag // im Gregorianischen Kalender (ab Fr. 15.10.1582 ) import java.io.*; import java.lang.*; public class Wochentag static String WochentagNummerInString (int tagnummer) switch (tagnummer) case 0: return "Sonntag"; case 1: return "Montag"; case 2: return "Dienstag"; case 3: return "Mittwoch"; case 4: return "Donnerstag"; case 5: return "Freitag"; case 6: return "Samstag"; default: return "ungültiger Tag!"; static int MonatsnummerHistorisch(int monat ) int m; if (monat>=3) m=monat-2; else m=monat+10; return m; 3

static int Jahreszahl_innerhalb_des_Jahrhunderts (int monat, int jahr ) int y; if (monat<3) jahr=jahr-1; //Januar und Februar gehören noch zum alten Jahr y=jahr % 100; return y; static int Jahrhundertzahl(int monat, int jahr ) int c; if (monat<3) jahr=jahr-1; //Januar und Februar gehören noch zum alten Jahr c=jahr/100; return c; static int Gauss(double x ) int g; g=(int)math.floor(x); return g; 4

static int TagEingeben () throws IOException int t; String str; BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Tagnummer eingeben :"); str=eingabe.readline(); t=integer.parseint(str); return t; static int MonatEingeben () throws IOException int m; String str; BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Monatsnummer eingeben :"); str=eingabe.readline(); m=integer.parseint(str); return m; 5

static int JahrEingeben () throws IOException int y; String str; BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Jahreszahl eingeben :"); str=eingabe.readline(); y=integer.parseint(str); return y; static int WochentagNummerGregorianisch (int tag,int monat,int jahr) int d,m,y,c,a,w; d=tag;m=monatsnummerhistorisch(monat ); y=jahreszahl_innerhalb_des_jahrhunderts(monat,jahr ) c=jahrhundertzahl(monat,jahr ); // System.out.println("d= "+d+" m= "+m+" y= "+y+" c= "+c ); A=Gauss(2.6*m-0.2)+d+y+Gauss(y/4.0)+Gauss(c/4.0)+5*c; w=a%7; return w; 6

public static void main (String[ ] args) throws IOException System.out.println ("Das Programm gibt zu einem beliebigen Datum ab Fr. 15.10.1582 "); System.out.println ("den zugehörigen Wochentag aus : "); System.out.println ("---------------------------------------------------"); int tag,monat,jahr,wotagnr; tag =TagEingeben(); monat=monateingeben(); jahr =JahrEingeben(); wotagnr=wochentagnummergregorianisch(tag,monat,jahr); System.out.println ("Der "+tag+"."+monat+"."+jahr+"ist ein " +WochentagNummerInString (wotagnr) ); System.out.println ("-------------------------------------------------"); // End of class 7

Für Interessierte die Herleitung der Formel für den Wochentag: ( Ein mathematischer Leckerbissen!) Der 1.3.1600 war ein Mittwoch und hat damit die Wochentagnummer 3. Wegen 365 mod 7 =1 gilt dann Datum Wochentagnummer 1.3.1601 3+1=4 1.3.1602 3+2=5 1.3.1603 3+3=6 1.3.1604 (3+5)mod7=1 1.3.1605 (3+6)mod7=2 1.3.1606 (3+7)mod7=3...... in t Jahren gibt es t t t 4 + 100 400 Schaltjahre Damit hat der 1.3.(1600+t) die Tagesnummer n 1600+t = (3 + t + t t t 4 + 100 400 ) mod 7 Schreibt man die Jahreszahl in der Form 100 c+ y (2002=100 20+ 2) so gilt: 1600 + t = 100c + y oder t = 100c 1600 + y also Mit t = 100(c-16) +y t y y = 25(c 16) + = 25(c 16) + 4 t y y (c 16) (c 16) (c 16) 100 = + 100 = + 100 = t (c 16) y (c 16) y 1 = + = ; < da y 99 400 4 400 400 4 8

gilt n 1600+t = (3 + 100(c-16) + y + y c 16 25(c 16) (c 16) + ) mod 7 = (3 1600 400 +16 + y +124c + y c 16 + ) mod 7 =( 1981 + 124c + y + + 4 4 4 ) mod 7 =( 1985 + 124c + y + + 4 4 ) mod 7 ; 124c = 18 7c 2c ; 1985 = 284 7+ 3 =( 3-2c + y + + ) mod 7 Damit hat der 1.3.(100c+y) diese Tagesnummer n 1600+t Führt man statt n 1600+t die Bezeichnung (1.3.) t ein so ergibt sich (1.3.) t = =( (1.3.) t + 0 ) mod 7 (1.4.) t = =( (1.3.) t + 3 ) mod 7 (1.5.) t =( (1.4.) t + 2 ) mod 7 =( (1.3.) t + 5 ) mod 7 (1.6.) t =( (1.5.) t + 3 ) mod 7 =( (1.3.) t + 1 ) mod 7 (1.7.) t =( (1.6.) t + 2 ) mod 7 =( (1.3.) t + 3 ) mod 7 (1.8.) t =( (1.7.) t + 3 ) mod 7 =( (1.3.) t + 6 ) mod 7 (1.9.) t =( (1.8.) t + 3 ) mod 7 =( (1.3.) t + 2 ) mod 7 (1.10.) t =( (1.9.) t + 2 ) mod 7 =( (1.3.) t + 4 ) mod 7 (1.11.) t =( (1.10.) t + 3 ) mod 7 =( (1.3.) t + 0 ) mod 7 (1.12.) t =( (1.11.) t + 2 ) mod 7 =( (1.3.) t + 2 ) mod 7 (1.1.) t =( (1.12.) t + 3 ) mod 7 =( (1.3.) t + 5 ) mod 7 (1.2.) t =( (1.1.) t + 3 ) mod 7 =( (1.3.) t + 1 ) mod 7 9

Will man nun den Wochentag für ein beliebiges Datum d.m.100c+y erhalten ( Monatsnummer historisch!) muss man folgendes berücksichtigen: (1.3.) 100c+y =( 3-2c + y + + ) mod 7 (d.m.) 100c+y =(1.3.) 100c+y + r m + (d-1) (d.m.) 100c+y =( ( 2+ r m ) + d +y + + + 5c ) mod 7 m 1 2 3 4 5 6 7 8 9 10 11 12 r m +2 2 5 0 3 5 1 4 6 2 4 0 3 13m 1 r 2 mod7 2,6 m 0,2 mod7 5 Interessanterweise gilt zufällig m + = = [ ] und damit: (d.m.) 100c+y =( [ 2,6m 0,2] + d + y + + + 5c) mod 7 10