DCV 2023 09/Strukturierte Programmierung Uebungen/Kalender: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Gyula (Diskussion | Beiträge)
Gyula (Diskussion | Beiträge)
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 13: Zeile 13:


=== Aufgabe: Wann ist Sonntag? ===
=== Aufgabe: Wann ist Sonntag? ===
Erstelle eine neue {{JSL|GregorianCalendar}} Instanz und gib das Datum des nächsten '''Sonntags''' aus.
Erstelle eine neue {{JSL| GregorianCalendar}} Instanz und gib das Datum des nächsten '''Sonntags''' aus.


=== Aufgabe: Wieviele Sonntage hat der Monat? ===
=== Aufgabe: Wieviele Sonntage hat der Monat? ===
Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der '''Sonntage''' zurückgibt. Teste diese Methode in der {{JSL|main}} Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.
Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der '''Sonntage''' zurückgibt. Teste diese Methode in der {{JSL|Strart()}} Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.


'''Aufruf:'''
'''Aufruf:'''


{{JSL|System.out.println(getSundays(2021, 10));}}
{{JSL|Console.WriteLine(GetSundays(2023, 10));}}


'''Ausgabe:'''
'''Ausgabe:'''
Zeile 28: Zeile 28:
'''Aufruf:'''
'''Aufruf:'''


{{JSL|System.out.println(getSundays(2021, 9));}}
{{JSL|Console.WriteLine(GetSundays(2023, 9));}}


'''Ausgabe:'''
'''Ausgabe:'''
Zeile 35: Zeile 35:


=== Aufgabe: Wieviele Arbeitstage? ===
=== Aufgabe: Wieviele Arbeitstage? ===
Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der '''Arbeitstage''' zurückgibt (Mo-Fr). Teste diese Methode in der {{JSL|main}} Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.
Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der '''Arbeitstage''' zurückgibt (Mo-Fr). Teste diese Methode in der {{JSL|Start()}} Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.


'''Aufruf:'''
'''Aufruf:'''


{{JSL|System.out.println(getWorkdays(2021, 6));}}
{{JSL|Console.WriteLine(GetWorkdays(2021, 6));}}


'''Ausgabe:'''
'''Ausgabe:'''
Zeile 47: Zeile 47:
'''Aufruf:'''
'''Aufruf:'''


{{JSL|System.out.println(getWorkdays(2021, 3));}}
{{JSL|Console.WriteLine(GetWorkdays(2021, 3));}}


'''Ausgabe:'''
'''Ausgabe:'''
Zeile 55: Zeile 55:
'''Aufruf:'''
'''Aufruf:'''


{{JSL|System.out.println(getWorkdays(2021, 2));}}
{{JSL|Console.WriteLine(GetWorkdays(2021, 2));}}


'''Ausgabe:'''
'''Ausgabe:'''


{{BSL|20}}
{{BSL|20}}


=== Aufgabe: Kalender ===
=== Aufgabe: Kalender ===
Erstelle ein Programm, welches einen Kalender korrekt darstellt. Verwende {{JSL|Calendar}} und {{JSL|Date}} dafür, der aktuelle Tag soll speziell markiert werden.
Erstelle ein Programm, welches einen Kalender korrekt darstellt. Verwende {{JSL|GregorianCalendar}} und {{JSL|DateTime}} dafür, der aktuelle Tag soll speziell markiert werden.


Achte darauf, dass
Achte darauf, dass
Zeile 70: Zeile 69:
* Nicht jeder Monat am Sonntag endet
* Nicht jeder Monat am Sonntag endet


Zum Testen sollst du verschiedene Tage als "heute" mit der Hilfe von {{JSL|Calendar}} verwenden.
Zum Testen sollst du verschiedene Tage als "heute" mit der Hilfe von {{JSL|DateTime(year, month, day)}} verwenden.


Die Ausgabe sollte wie folgt sein:
Die Ausgabe sollte wie folgt sein:
Zeile 83: Zeile 82:


=== Bonusaufgabe: Kalender Regionsunabhängig ===
=== Bonusaufgabe: Kalender Regionsunabhängig ===
Die Leute in Thailand sind traurig weil die Ausgabe deines Kalenderprogramms aus der vorhergehenden Aufgabe nicht korrekt ist, da ihre Woche am Sonntag beginnt. Ändere dein Programm so ab, dass es Kalenderunabhängig den richtigen Wochenstart verwendet. Verwende dafür {{JSL|calendar.getStartOfWeek()}}. Teste dein Programm mit verschiedenen {{JSL|Locales}} in der {{JSL|main()}} Methode.
Die Leute in Thailand sind traurig weil die Ausgabe deines Kalenderprogramms aus der vorhergehenden Aufgabe nicht korrekt ist, da ihre Woche am Sonntag beginnt. Ändere dein Programm so ab, dass es Kalenderunabhängig den richtigen Wochenstart verwendet. Verwende dafür {{JSL|CultureInnfo.DateTimeFormat.Calendar}} und {{JSL|CultureInnfo.DateTimeFormat.FirstDayOfWeek}}. Teste dein Programm mit verschiedenen {{JSL|CultureInfo}} in der {{JSL|Start()}} Methode.


'''Aufruf'''
'''Aufruf'''
{{JML|code=
{{JML|code=
CultureInfo austrian = new CultureInfo("de-AT");
DayOfWeek dow = austrian.DateTimeFormat.FirstDayOfWeek;
//Locale wird auf Thailand gesetzt, hier wird der Buddistische Kalender verwendet
//Locale wird auf Thailand gesetzt, hier wird der Buddistische Kalender verwendet
Locale.setDefault(new Locale.Builder().setRegion("TH").setLanguage("th").build());
PrintCalendar("th-TH", 2565, 4);
printCalendar(2565, 4);


//Locale wird auf Deutschland gesetzt, hier wird der Gregorianische Kalender verwendet
//Locale wird auf Deutschland gesetzt, hier wird der Gregorianische Kalender verwendet
Locale.setDefault(Locale.GERMANY);
PrintCalendar("de-DE", 2022, 4);
printCalendar(2022, 4);
}}
}}
''Ausgabe''
''Ausgabe''

Aktuelle Version vom 27. Oktober 2023, 09:31 Uhr

Im folgenden sollen einige Funktionen der Calendar Api erlernt werden.

Aufgabe: Wann und wo?

Erstelle ein Programm, das das aktuelle Datum und Uhrzeit ausgibt. Verwende 3 verschiedene ToString() und erstelle eine 3 Zeilige Ausgabe:

  1. . Zeile --> Nur das Datum
  2. . Zeile --> Nur die Uhrzeit
  3. . Zeile --> Datum und Uhrzeit

Aufgabe: Mein Geburtstag

Erstelle ein Programm, das den Anwender nach seinem Geburtstag fragt und mit Hilfe von DateTime.Parse() verarbeitet. Als Ergebnis soll das Programm zurückgeben, an was für einem Wochentag der Geburtstag des Anwenders war. Du kannst dafür auch die GregorianCalendar.GetDayOfWeek() Methode verwenden.

Aufgabe: Wann ist Sonntag?

Erstelle eine neue GregorianCalendar Instanz und gib das Datum des nächsten Sonntags aus.

Aufgabe: Wieviele Sonntage hat der Monat?

Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der Sonntage zurückgibt. Teste diese Methode in der Strart() Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.

Aufruf:

Console.WriteLine(GetSundays(2023, 10));

Ausgabe:

5

Aufruf:

Console.WriteLine(GetSundays(2023, 9));

Ausgabe:

4

Aufgabe: Wieviele Arbeitstage?

Erstelle eine Methode welche als Parameter das Jahr und den Monat nimmt und die Anzahl der Arbeitstage zurückgibt (Mo-Fr). Teste diese Methode in der Start() Methode. Wie dieses Problem gelöst wird, steht dir völlig frei.

Aufruf:

Console.WriteLine(GetWorkdays(2021, 6));

Ausgabe:

22

Aufruf:

Console.WriteLine(GetWorkdays(2021, 3));

Ausgabe:

23

Aufruf:

Console.WriteLine(GetWorkdays(2021, 2));

Ausgabe:

20

Aufgabe: Kalender

Erstelle ein Programm, welches einen Kalender korrekt darstellt. Verwende GregorianCalendar und DateTime dafür, der aktuelle Tag soll speziell markiert werden.

Achte darauf, dass

  • Der aktuellen Tag ist mit Stern gekennzeichnet ist
  • Nicht jeder Monat am Montag beginnt
  • Nicht jeder Monat am Sonntag endet

Zum Testen sollst du verschiedene Tage als "heute" mit der Hilfe von DateTime(year, month, day) verwenden.

Die Ausgabe sollte wie folgt sein:

2022 April
| Mo | Di | Mi | Do | Fr | Sa | So |
|    |    |    |    |  1 |  2 |  3 |
|  4*|  5 |  6 |  7 |  8 |  9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 |    |

Bonusaufgabe: Kalender Regionsunabhängig

Die Leute in Thailand sind traurig weil die Ausgabe deines Kalenderprogramms aus der vorhergehenden Aufgabe nicht korrekt ist, da ihre Woche am Sonntag beginnt. Ändere dein Programm so ab, dass es Kalenderunabhängig den richtigen Wochenstart verwendet. Verwende dafür CultureInnfo.DateTimeFormat.Calendar und CultureInnfo.DateTimeFormat.FirstDayOfWeek. Teste dein Programm mit verschiedenen CultureInfo in der Start() Methode.

Aufruf

CultureInfo austrian = new CultureInfo("de-AT");
DayOfWeek dow = austrian.DateTimeFormat.FirstDayOfWeek;

//Locale wird auf Thailand gesetzt, hier wird der Buddistische Kalender verwendet
PrintCalendar("th-TH", 2565, 4);

//Locale wird auf Deutschland gesetzt, hier wird der Gregorianische Kalender verwendet
PrintCalendar("de-DE", 2022, 4);

Ausgabe

2022 04
| Mo | Di | Mi | Do | Fr | Sa | So |
|    |    |    |    |  1 |  2 |  3 |
|  4*|  5 |  6 |  7 |  8 |  9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 |    |

2565 04
| So | Mo | Di | Mi | Do | Fr | Sa |
|    |    |    |    |    |  1 |  2 |
|  3 |  4*|  5 |  6 |  7 |  8 |  9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |