Arbeiten mit .NET: Grundlagen: Datentypen/ Andere Typen
In diesem Kapitel besprechen wir einige weitere Datentypen. Diese sind ausnahmslos als Strukturen definiert und sind somit Wertetypen. – Boolean ist grundlegend für die gesamte praktische Arbeit; die anderen Typen sind als Beispiele für viele weitere Datentypen zu verstehen.
Boolean
[Bearbeiten]Der Datentyp System.Boolean steht für einen logischen Wert. Eine Variable dieses Typs kann nur zwei verschiedene Werte annehmen: entweder true oder false.[1]
- In anderen Programmiersprachen sind logische Werte so definiert, dass die ganze Zahl 1 für "true" steht und alles andere für "false"; oder es wird 0 als "false" definiert und alles andere als "true". .NET ist auch in dieser Hinsicht ganz eindeutig: Es gelten die Werte true und false; diese haben nichts mit Zahlen zu tun. Dies hat auch Auswirkungen darauf, wie logische Werte zugewiesen und Vergleiche ausgeführt werden.
Es wird auch von booleschen Werten gesprochen; die Variablen heißen vorzugsweise boolesche Variable. Zeigen wir wie üblich ein paar Beispiele zu ihrer Verwendung:
static void Main(string[] args)
{
int i1 = 123;
double d1 = i1 / 10.0;
Boolean b1 = true; // direkte Zuweisung von true
Boolean b2 = i1 == 135; // Zuweisung als Ergebnis der Gleichheitsprüfung
// direkte Ausgabe mit Boolean.TrueString bzw. Boolean.FalseString
Console.WriteLine(b1);
Console.WriteLine(b2);
// gesteuerte Ausgabe mit eigenen Strings
Console.WriteLine(b2 ? "wahr" : "falsch");
Console.WriteLine(12.3 == d1 ? "gleich" : "ungleich");
Console.ReadKey();
}
Sub Main()
Dim i1 as Integer = 123
Dim d1 As Double = i1 / 10.0
Dim b1 As Boolean = true ' direkte Zuweisung von true
Dim b2 As Boolean = (i1 = 135) ' Zuweisung als Ergebnis der Gleichheitsprüfung
' direkte Ausgabe mit Boolean.TrueString bzw. Boolean.FalseString
Console.WriteLine(b1)
Console.WriteLine(b2)
' gesteuerte Ausgabe mit eigenen Strings
Console.WriteLine(IIf(b2, "wahr", "falsch"))
Console.WriteLine(IIf(12.3 = d1, "gleich", "ungleich"))
Console.ReadKey()
End Sub
Boolesche Variable werden wie folgt benutzt:
- Vergleiche beliebiger Datentypen liefern als Ergebnis immer einen booleschen Wert. Diese werden unter Vergleichsoperatoren behandelt.
- Boolesche Werte können in Kombinationen geprüft werden. Dies wird unter Boolesche Operatoren behandelt.
- Bei allen Verfahren in den Abschnitten zu Kontrollstrukturen, d.h. zur Kontrolle des Programmablaufs, werden stets boolesche Werte als Ergebnis verwendet, ob Bedingungen erfüllt sind oder nicht.
- In den Abschnitten zu Typumwandlungen werden behandelt:
- Umwandlung eines booleschen Wertes in einen String
- Umwandlung eines Strings in einen booleschen Wert
Die wichtigste Bedeutung sind die Bedingungen bei Kontrollstrukturen.
Datum und Uhrzeit
[Bearbeiten]Für die Verarbeitung von Datum und Uhrzeit sowie Zeitspannen gibt es zwei Datentypen. Beides sind Strukturen, also Wertetypen.
Klassenname | CLS | Standard | Minimum | Maximum |
---|---|---|---|---|
DateTime | nein | 01.01.0001 00:00:00 | 01.01.0001 00:00:00 | 31.12.9999 23:59:59 |
TimeSpan | nein | 0 | –263 Ticks ≈ – 10675199 Tage |
263–1 Ticks ≈ + 10675199 Tage |
DateTime
[Bearbeiten]Der Datentyp System.DateTime steht für die Speicherung eines Zeitpunktes, also von Datum und Uhrzeit. Er wird gerechnet in Ticks, wobei 1 Tick 100 Nanosekunden entspricht, und gezählt vom 1. Januar des Jahres 1 um 00:00 Uhr. Daraus ergibt sich auch der mögliche Maximalwert. Genauer: Alle DateTime-Werte beziehen sich auf den Gregorianischen Kalender. Zusätzlich wird registriert, ob es sich um eine UTC-Angabe (Coordinated Universal Time, entspricht GMT), um eine lokale Zeitangabe (ggf. mit Sommerzeit) oder nicht um eine spezielle Zeit handelt.
Hinweis: In Programmierer-Foren liest man immer wieder Formulierungen der Art: "Ich habe einen DateTime der Form tt.mm.jjjj und möchte ihn als jjjj/mm/dd haben." Durch die Erläuterung, was ein DateTime ist, sollte schon klar sein, dass eine solche Formulierung völlig abwegig ist: Die genannten Schreibweisen sind nur verschiedene Darstellungen als Zeichenketten für dasselbe Datum.
Ein DateTime ist ein DateTime ist ein DateTime. "tt.mm.jjjj" oder "jjjj/mm/dd" o.a. sind nur besondere Schreibweisen als Zeichenketten, aber keine abweichenden Formen von DateTime. |
Für einen DateTime-Wert stehen die folgenden Angaben zur Verfügung:
- Year, Month, Day
- Hour, Minute, Second, Millisecond, Ticks
- Date, TimeOfDay
- DayOfYear, DayOfWeek, Kind (nämlich die Art der Zeit: UTC, lokal, Unspecified)
Die aktuellen Werte können mit DateTime.Today, DateTime.Now (lokale Zeit) bzw. DateTime.UtcNow (UTC) abgefragt werden. Außerdem gibt es viele Konstruktoren; einige werden im folgenden Beispiel genannt. Für die Ausgabe haben wir uns auf DateTime.Now beschränkt.
static void Main(string[] args)
{
// ein paar Möglichkeiten, einen DateTime zu erzeugen
DateTime d1 = new DateTime(); // Standardwert
Write(d1);
d1 = new DateTime(500000000000000000); // Anzahl der Ticks
Write(d1);
d1 = new DateTime(2010, 4, 1); // nach Jahr, Monat, Tag
Write(d1);
d1 = new DateTime(2009, 12, 31, 18, 14, 23); // Datum + Uhrzeit
Write(d1);
d1 = DateTime.Today; // aktuelles Datum
Write(d1);
d1 = DateTime.Now; // ... mit Uhrzeit
Write(d1);
d1 = DateTime.UtcNow; // ... nach UTC
Write(d1);
}
static void Write(DateTime d0)
{
// mehrere Möglichkeiten, die Bestandteile anzuzeigen
Console.WriteLine(d0);
Console.WriteLine( String.Format("Jahr: {0} Monat: {1} Tag: {2}",
d0.Year, d0.Month, d0.Day) );
Console.WriteLine( String.Format("Std. {0} min. {1} sek. {2}",
d0.Hour, d0.Minute, d0.Second) );
Console.WriteLine( "Langversion: " + d0.ToLongDateString() + " " + d0.ToLongTimeString() );
Console.WriteLine( String.Format("Der {0}. Tag im Jahr, der {1}. Tag der Woche = {2} / {3}",
d0.DayOfYear, (int)d0.DayOfWeek,
d0.DayOfWeek, d0.ToString("dddd") ) );
Console.WriteLine("---------------------------------------");
}
Sub Main()
' ein paar Möglichkeiten, einen DateTime zu erzeugen
Dim d1 As DateTime = New DateTime() ' Standardwert
Write(d1)
d1 = new DateTime(500000000000000000) ' Anzahl der Ticks
Write(d1)
d1 = new DateTime(2010, 4, 1) ' nach Jahr, Monat, Tag
Write(d1)
d1 = new DateTime(2009, 12, 31, 18, 14, 23) ' Datum + Uhrzeit
Write(d1)
d1 = DateTime.Today ' aktuelles Datum
Write(d1)
d1 = DateTime.Now ' ... mit Uhrzeit
Write(d1)
d1 = DateTime.UtcNow ' ... nach UTC
Write(d1)
Console.ReadKey()
End Sub
Sub Write(d0 As DateTime)
' mehrere Möglichkeiten, die Bestandteile anzuzeigen
Console.WriteLine(d0)
Console.WriteLine( String.Format("Jahr: {0} Monat: {1} Tag: {2}", _
d0.Year, d0.Month, d0.Day) )
Console.WriteLine( String.Format("Std. {0} min. {1} sek. {2}", _
d0.Hour, d0.Minute, d0.Second) )
Console.WriteLine( "Langversion: " + d0.ToLongDateString() + " " + d0.ToLongTimeString() )
Console.WriteLine( String.Format("Der {0}. Tag im Jahr, der {1}. Tag der Woche = {2} / {3}", _
d0.DayOfYear, CInt(d0.DayOfWeek), d0.DayOfWeek, d0.ToString("dddd") ) )
Console.WriteLine("---------------------------------------")
End Sub
Nacheinander werden verschiedene Datumsangaben – teilweise mit Uhrzeit – festgelegt. Jeder Wert wird an die Write-Methode übergeben und dort mit diversen Bestandteilen ausgegeben.
Hinweis zu DayOfWeek: Dabei handelt es sich um einen Wert der DayOfWeek-Enumeration zwischen 0 für Sonntag und 6 für Samstag/Sonnabend. Mit d0.DayOfWeek wird immer die englische Bezeichnung des Wochentags ausgegeben; über Parameter der ToString-Methode kann die Kurz- oder Langfassung aus einer anderen Sprache abgefragt werden.
DateTime-Werte können wie folgt genutzt werden:
- In den Abschnitten zu Datentypen verarbeiten werden behandelt:
- Vergleiche zwischen DateTime-Werten
- In den Abschnitten zu Typumwandlungen werden behandelt:
- Umwandlung eines DateTime in einen String
- Umwandlung eines Strings in einen DateTime
Wie mit DateTime-Werten gerechnet werden kann, wird kurz unter Berechnungen und ausführlich unter Rechnen mit Datum und Zeit behandelt.
TimeSpan
[Bearbeiten]Der Datentyp System.TimeSpan steht für die Speicherung einer Zeitspanne, also eines Zeitraums von Tagen, Stunden usw. Er wird ebenfalls gerechnet in Ticks, kann aber negative Werte ebensogut enthalten wie positive. Ein Wert kann direkt zugewiesen werden; er ist aber sehr oft das Ergebnis eines Vergleichs (der Abstand) zwischen zwei DateTime-Werten.
Für einen TimeSpan-Wert stehen die folgenden Angaben zur Verfügung:
- Days, Hours, Minutes, Seconds, Milliseconds, Ticks
- TotalDays, TotalHours, TotalMinutes, TotalSeconds, TotalMilliseconds
Die Total-Werte zeigen den betreffenden Wert als ganzzahligen Anteil und den Rest als Bruchteil an. Die anderen Werte teilen den ganzen Wert in die betreffenden Anteile auf. Dies wird im folgenden Beispiel gezeigt.
static void Main(string[] args)
{
// ein paar Möglichkeiten, einen TimeSpan zu erzeugen
DateTime d1 = new DateTime(2010, 1, 1);
TimeSpan t1 = DateTime.Now - d1; // Abstand vom Jahresanfang 2010
Write(t1);
t1 = DateTime.Now - DateTime.Today; // Abstand seit Tagesanfang
Write(t1);
t1 = new TimeSpan(500000000000); // Anzahl der Ticks
Write(t1);
t1 = new TimeSpan(3, 16, 0); // Std., Min., Sek.
Write(t1);
t1 = new TimeSpan(2, 8, 0, 0); // Tage, Std., Min., Sek.
Write(t1);
Console.ReadKey();
}
static void Write(TimeSpan d0)
{
// mehrere Möglichkeiten, die Bestandteile anzuzeigen
Console.WriteLine(d0);
Console.WriteLine( String.Format(" {0} Tage {1} Std. {2} min. {3} sek.",
d0.Days, d0.Hours, d0.Minutes, d0.Seconds) );
Console.Write(" TotalDays ..: ");
Console.WriteLine(d0.TotalDays);
Console.Write(" TotalHours .: ");
Console.WriteLine(d0.TotalHours);
Console.Write(" TotalMinutes: ");
Console.WriteLine(d0.TotalMinutes);
}
Sub Main()
' ein paar Möglichkeiten, einen TimeSpan zu erzeugen
Dim d1 As DateTime = new DateTime(2010, 1, 1)
Dim t1 As TimeSpan = DateTime.Now - d1 ' Abstand vom Jahresanfang 2010
Write(t1)
t1 = DateTime.Now - DateTime.Today ' Abstand seit Tagesanfang
Write(t1)
t1 = New TimeSpan(500000000000) ' Anzahl der Ticks
Write(t1)
t1 = New TimeSpan(3, 16, 0) ' Std., Min., Sek.
Write(t1)
t1 = New TimeSpan(2, 8, 0, 0) ' Tage, Std., Min., Sek.
Write(t1)
Console.ReadKey()
End Sub
Sub Write(d0 As TimeSpan)
' mehrere Möglichkeiten, die Bestandteile anzuzeigen
Console.WriteLine(d0)
Console.WriteLine( String.Format(" {0} Tage {1} Std. {2} min. {3} sek.", _
d0.Days, d0.Hours, d0.Minutes, d0.Seconds) )
Console.Write(" TotalDays ..: ")
Console.WriteLine(d0.TotalDays)
Console.Write(" TotalHours .: ")
Console.WriteLine(d0.TotalHours)
Console.Write(" TotalMinutes: ")
Console.WriteLine(d0.TotalMinutes)
End Sub
Diese Ausgabe zeigt einige Möglichkeiten am Beispiel "Abstand seit Tagesanfang".
Berechnungen
[Bearbeiten]Mit DateTime- und TimeSpan-Werten können die unterschiedlichsten Berechnungen erledigt werden.
- Vergleich zweier DateTime-Werte
Zwei DateTime-Werte können voneinander subtrahiert werden; das Ergebnis ist ein TimeSpan-Wert. Je nachdem, welches Datum früher und welches später liegt, ist das Ergebnis positiv, 0 oder negativ.
Der erste TimeSpan im vorigen Code-Beispiel ist auf diese Weise entstanden.
- Einen Wert verändern
Es gibt diverse Methoden wie Add, AddYears, AddDays, AddSeconds, mit denen ein DateTime-Wert um eine genaue Zeitspanne (durch einen TimeSpan) oder um eine Anzahl Jahre, Tage, Sekunden usw. verändert werden kann. Die Zeitspanne bzw. Anzahl kann auch negativ sein: Bei einem positiven Wert geht man in Richtung Zukunft, bei einem negativen Wert in Richtung Vergangenheit.
In gleicher Weise gibt es Methoden wie Add, Subtract usw., mit denen ein TimeSpan-Wert verändert werden kann.
Hinweis: Bei DateTime- und TimeSpan-Werten handelt es sich um Wertetypen. Das Ergebnis ist also immer ein neuer Wert, auch wenn es derselben Variablen zugewiesen wird.
- Datum und Zeit verknüpfen
Es kommt immer wieder vor, dass ein Datum mit einer Uhrzeit zusammengefasst werden soll.
- Für WinForms-Anwendungen gibt es den DateTimePicker, mit dem entweder ein Datum oder eine Uhrzeit ausgewählt werden kann. Man braucht also zwei Controls: Bei der Variante Datum erhält man mit DateTimePicker.Value das Datum mit der Uhrzeit 00:00:00, bei der Variante Uhrzeit erhält man damit die Uhrzeit zusammen mit dem aktuellen Datum. Dann ist das Datum mit der Zeit zu verbinden.
Für diese Aufgabe gibt es eine umständliche Lösung, für die der gesuchte DateTime-Wert aus den Einzelteilen zusammengesetzt wird (Variante 1), und eine praktische Lösung, die passende Möglichkeiten von DateTime benutzt (Variante 2):
static void Main(string[] args)
{
DateTime d1 = new DateTime(2010, 5, 21); // ein bestimmtes Datum
DateTime d2 = DateTime.Now; // eine bestimmte Zeit
Console.WriteLine(d1);
Console.WriteLine(d2);
// Variante 1: Bestandteile zusammensetzen
DateTime d3 = new DateTime(d1.Year, d1.Month, d1.Day,
d2.Hour, d2.Minute, d2.Second);
Console.WriteLine(d3);
// Variante 2: beides verbinden
d3 = d1.Add(d2.TimeOfDay);
Console.WriteLine(d3);
Console.ReadKey();
}
Sub Main()
Dim d1 As DateTime = new DateTime(2010, 5, 21) ' ein bestimmtes Datum
Dim d2 As DateTime = DateTime.Now ' eine bestimmte Zeit
Console.WriteLine(d1)
Console.WriteLine(d2)
' Variante 1: Bestandteile zusammensetzen
Dim d3 As DateTime = new DateTime(d1.Year, d1.Month, d1.Day, _
d2.Hour, d2.Minute, d2.Second)
Console.WriteLine(d3)
' Variante 2: beides verbinden
d3 = d1.Add(d2.TimeOfDay)
Console.WriteLine(d3)
Console.ReadKey()
End Sub
Weitere Beispiele werden unter Rechnen mit Datum und Zeit behandelt. Mehr Informationen sind natürlich in der .NET-Hilfe zu finden.
Point, Size
[Bearbeiten]Als Beispiele für weitere Wertetypen sollen hier System.Drawing.Point und System.Drawing.Size genannt werden, die vor allem für WinForms-Anwendungen von Bedeutung sind.
Der Datentyp Point steht für ganzzahlige (x,y)-Koordinaten (genauer: vom Typ Int32) und bezeichnet einen Punkt, z.B. die Position eines Pixels auf dem Bildschirm oder beim Ausdruck auf dem Papier. Er enthält den X-Wert und den Y-Wert und bietet Verfahren zum Rechnen mit Punkten, z.B. zum Verschieben.
Der Datentyp Size speichert ein geordnetes Paar (x,y) ganzer Zahlen und bezeichnet meistens Breite und Höhe eines Rechtecks. Er enthält den Width-Wert und den Height-Wert und bietet Verfahren zum Rechnen mit diesen Größen.
Im folgenden Beispiel zeigen wir ein paar Möglichkeiten, um aus einem gegebenen Punkt einen neuen zu berechnen; dabei wird Size für die Größe der Verschiebung benutzt. Fügen Sie dazu im Projekt-Explorer per Rechtsclick auf "Referenzen" einen Verweis auf die Assembly System.Drawing.dll hinzu.
using System;
using System.Drawing;
namespace Wikibooks.CSharp.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
Point start = new Point(100, 50);
Console.WriteLine(start);
Point final = start + new Size(200, 50);
Console.WriteLine(final);
final = Point.Add(final, new Size(130, 30) );
Console.WriteLine(final);
final.X = final.X – 30;
Console.WriteLine(final);
Console.ReadKey();
}
}
}
Imports System
Imports System.Drawing
Namespace Wikibooks.VBNet.ConsoleApp
Module Program
Sub Main()
Dim start As Point = new Point(100, 50)
Console.WriteLine(start)
Dim final As Point = start + new Size(200, 50)
Console.WriteLine(final)
final = Point.Add(final, new Size(130, 30) )
Console.WriteLine(final)
final.X = final.X - 30
Console.WriteLine(final)
Console.ReadKey()
End Sub
End Module
End Namespace
Übrigens gibt es auch die Typen PointF und SizeF, die Koordinaten bzw. Größe mit Single-Werten speichern.
Zusammenfassung
[Bearbeiten]Es gibt noch viele weitere Datentypen. Beispielhaft haben wir kennengelernt:
- Boolean steht für die logischen Werte true/false und dient zur Steuerung im Programmablauf.
- DateTime enthält einen Zeitpunkt mit Datum und/oder Uhrzeit, TimeSpan bezeichnet eine Zeitdauer.
- Point und Size werden z.B. für Positionen und Größen auf dem Bildschirm verwendet.
Alle diese Datentypen sind Strukturen und somit Wertetypen.
Übungen
[Bearbeiten]
Übung 1 | Der Datentyp Boolean | Zur Lösung |
Welche der folgenden Aussagen sind wahr, welche sind falsch?
- Der Boolean-Datentyp ist ein Wertetyp.
- Eine Boolean-Variable kann die Werte wahr, falsch, unbekannt annehmen.
- Der Wert true entspricht der Zahl 1, der Wert false der Zahl 0.
- Einer booleschen Variable kann ein Wert dadurch zugewiesen werden, dass das Ergebnis einer Prüfung auf Gleichheit bestimmt wird.
- Einer booleschen Variable kann ein Wert dadurch zugewiesen werden, dass das Ergebnis einer Prüfung auf "größer/gleich" bestimmt wird.
- Das Ergebnis einer Prüfung kann zur Steuerung des Programmablaufs verwendet werden.
- Für diese Prüfung muss eine einzelne Prüfung (keine Kombination von Prüfung) eingesetzt werden.
Übung 2 | Datum und Zeit – Definition | Zur Lösung |
Welche der folgenden Aussagen sind wahr, welche sind falsch?
- Der Datentyp DateTime stellt ein Datum mit Uhrzeit dar.
- Der Datentyp DateTime ist ein Referenztyp.
- Der Datentyp DateTime speichert die Tage als ganze Zahl und die Uhrzeit als Bruchteil (Dezimalanteil) eines Tages.
- Der Datentyp TimeSpan ist ein Wertetyp.
- Der Datentyp TimeSpan speichert die Dauer als ganze Zahl.
- Der Datentyp DateTime kann auch negative Werte enthalten.
- Der Datentyp TimeSpan kann auch negative Werte enthalten.
- Wenn man einen DateTime-Wert von einem anderen DateTime-Wert subtrahiert, erhält man einen neuen DateTime-Wert.
- Mit Day bekommt man das Datum, das in einem DateTime-Wert enthalten ist.
- Mit Time bekommt man die Uhrzeit, die in einem DateTime-Wert enthalten ist.
- Mit Day bekommt die Anzahl der Tage eines TimeSpan-Wertes.
- Bei einem DateTime-Wert kann zwischen der lokalen Uhrzeit und der UTC unterschieden werden.
- Bei einem TimeSpan-Wert kann zwischen der lokalen Uhrzeit und der UTC unterschieden werden.
Übung 3 | Datum und Zeit – Verarbeitung | Zur Lösung |
Erstellen Sie ein Programm zur Altersbestimmung. Gehen Sie dazu wie folgt vor:
- Deklarieren Sie Variable für Ihre Geburt und das heutige Datum sowie eine Variable für das Alter (wie üblich als Jahr).
- Lassen Sie die Uhrzeit der Geburt ausgeben.
- Berechnen Sie das aktuelle Alter. Fügen Sie dabei mit if insgesamt drei Bedingungen ein, ob der Geburtstag im laufenden Jahr schon vorbei ist oder nicht. (Die Bedingungen können einzeln oder verknüpft angegeben sein.) Lassen Sie das Ergebnis ausgeben.
- Lassen Sie einen Glückwunsch ausgeben, wenn heute Geburtstag ist.
- Lassen Sie das Geburtsdatum ausgeben unter Einschluss des Wochentags.
Benutzen Sie Console.Write für die Ausgabe fester Texte und Variabler; nur dort, wo die Zeile zu Ende ist, wird Console.WriteLine verwendet.
Übung 4 | Die Typen Point und Size | Zur Lösung |
Welche der folgenden Aussagen sind richtig, welche sind falsch?
- Ein Point enthält zwei Werte vom Typ Int16.
- Die Bestandteile eines Point-Wertes stehen für die (x,y)-Koordinaten eines Punktes.
- Die Bestandteile eines Point-Wertes werden als X-Wert und Y-Wert benutzt.
- Ein Size enthält zwei Werte vom Typ Int16.
- Die Bestandteile eines Size-Wertes stehen z.B. für die Breite und Höhe eines Rechtecks.
- Die Bestandteile eines Size-Wertes werden als X-Wert und Y-Wert benutzt.
- Zu einem Point-Wert kann ein Size-Wert addiert werden; dies führt zu einem entsprechend verschobenen Point-Wert.
- Ein Point-Wert kann nicht dadurch geändert werden, dass der X-Wert direkt geändert wird.
Lösung zu Übung 1 | Der Datentyp Boolean | Zur Übung |
Die Aussagen 1, 4, 5, 6 sind richtig, die Aussagen 2, 3, 7 sind falsch.
Lösung zu Übung 2 | Datum und Zeit – Definition | Zur Übung |
Die Aussagen 1, 4, 5, 7, 12 sind richtig, die Aussagen 2, 3, 6, 8, 9, 10, 11, 13 sind falsch.
Lösung zu Übung 3 | Datum und Zeit – Verarbeitung | Zur Übung |
Bei Nummer 3 muss einer der Teile a, b, c gültig sein, die beiden anderen fehlen bzw. müssen auskommentiert werden.
static void Main(string[] args)
{
// 1. Deklarationen
DateTime today = DateTime.Now;
DateTime birth = new DateTime(1963, 11, 27, 2, 30, 0);
int alter;
// 2. Geburtszeit
Console.Write("Die Geburtszeit war: ");
Console.WriteLine(birth.TimeOfDay);
// 3. das aktuelle Alter
alter = today.Year - birth.Year;
// 3a. drei Bedingungen nacheinander
// if ( today.Month < birth.Month ) {
// alter = alter - 1;
// } else if ( today.Month == birth.Month ) {
// if (today.Day < birth.Day)
// alter = alter - 1;
// }
// 3b. zwei Bedingungen nacheinander
if ( today.Month < birth.Month ) {
alter = alter - 1;
} else if ( today.Month == birth.Month && today.Day < birth.Day) {
alter = alter - 1;
}
// 3c. drei Bedingungen zusammen
// if ( ( today.Month < birth.Month )
// || (today.Month == birth.Month && today.Day < birth.Day) ) {
// alter = alter - 1;
// }
Console.Write("Das aktuelle Alter beträgt: ");
Console.Write(alter);
Console.WriteLine(" Jahre.");
// 4. ist heute Geburtstag?
if ( today.Month == birth.Month && today.Day == birth.Day ) {
Console.WriteLine("Herzlichen Glückwunsch zum heutigen Geburtstag!");
}
// 5. der Geburtstag in Langfassung
Console.WriteLine(birth.ToLongDateString());
Console.ReadKey();
}
Sub Main()
' 1. Deklarationen
Dim today As DateTime = DateTime.Now
Dim birth As DateTime = new DateTime(1963, 11, 27, 2, 30, 0)
Dim alter As Integer
' 2. Geburtszeit
Console.Write("Die Geburtszeit war: ")
Console.WriteLine(birth.TimeOfDay)
' 3. das aktuelle Alter
alter = today.Year - birth.Year
' 3a. drei Bedingungen nacheinander
' If ( today.Month < birth.Month ) Then
' alter = alter - 1
' Else If ( today.Month = birth.Month ) Then
' If (today.Day < birth.Day)
' alter = alter - 1
' End If
' End If
' 3b. zwei Bedingungen nacheinander
If ( today.Month < birth.Month ) Then
alter = alter - 1
Else If ( today.Month = birth.Month And today.Day < birth.Day) Then
alter = alter - 1
End If
' 3c. drei Bedingungen zusammen
' If ( ( today.Month < birth.Month ) _
' Or (today.Month = birth.Month And today.Day < birth.Day) ) Then
' alter = alter - 1
' End If
Console.Write("Das aktuelle Alter beträgt: ")
Console.Write(alter)
Console.WriteLine(" Jahre.")
' 4. ist heute Geburtstag?
If ( today.Month = birth.Month And today.Day = birth.Day ) Then
Console.WriteLine("Herzlichen Glückwunsch zum heutigen Geburtstag!")
End If
' 5. der Geburtstag in Langfassung
Console.WriteLine(birth.ToLongDateString())
Console.ReadKey()
End Sub
Lösung zu Übung 4 | Die Typen Point und Size | Zur Übung |
Die Aussagen 2, 3, 5, 7 sind richtig, die Aussagen 1, 4, 6, 8 sind falsch.
- ↑ Der Begriff Boolean ist nach dem Mathematiker George Boole, dem Begründer der booleschen Algebra, benannt.