diff --git a/EnumRechenOperationen/EnumRechenOperationen.csproj b/EnumRechenOperationen/EnumRechenOperationen.csproj new file mode 100644 index 0000000000000000000000000000000000000000..206b89a9a8b9320db4b017a262b565f104489193 --- /dev/null +++ b/EnumRechenOperationen/EnumRechenOperationen.csproj @@ -0,0 +1,10 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + +</Project> diff --git a/EnumRechenOperationen/RechenOperationen.cs b/EnumRechenOperationen/RechenOperationen.cs new file mode 100644 index 0000000000000000000000000000000000000000..c358a34be11658e62dea8159ee26a1b504de29aa --- /dev/null +++ b/EnumRechenOperationen/RechenOperationen.cs @@ -0,0 +1,37 @@ +namespace Uebung; + +enum Operation { Add, Sub, Mult, Div } + +class Program +{ + static double Berechne(Operation op, double x, double y) + { + double ergebnis; + + switch (op) + { + case Operation.Add: + ergebnis = x + y; + break; + case Operation.Sub: + ergebnis = x - y; + break; + case Operation.Mult: + ergebnis = x * y; + break; + default: // Operator.Div: + ergebnis = x / y; + break; + } + + return ergebnis; + } + + static void Main(string[] args) + { + Console.WriteLine($"Berechne(Add, 5, 4) = {Berechne(Operation.Add, 5, 4)}"); + Console.WriteLine($"Berechne(Sub, 5, 4) = {Berechne(Operation.Sub, 5, 4)}"); + Console.WriteLine($"Berechne(Mult, 5, 4) = {Berechne(Operation.Mult, 5, 4)}"); + Console.WriteLine($"Berechne(Div, 5, 4) = {Berechne(Operation.Div, 5, 4)}"); + } +} diff --git a/MagischesQuadrat/MagischesQuadrat.cs b/MagischesQuadrat/MagischesQuadrat.cs new file mode 100644 index 0000000000000000000000000000000000000000..611fbe21754401afc23d5ddc39cda3720b003325 --- /dev/null +++ b/MagischesQuadrat/MagischesQuadrat.cs @@ -0,0 +1,31 @@ + +static bool MagicQuadrat(int[,] a) +{ + if (a.GetLength(0) != a.GetLength(1)) + return false; + + int diagSum = 0; + for (int i = 0; i < a.GetLength(0); i++) + diagSum += a[i, i]; + + for (int i = 0; i < a.GetLength(0); i++) + { + int rowSum = 0; + for (int j = 0; j < a.GetLength(1); j++) + rowSum += a[i, j]; + + if (diagSum != rowSum) + return false; + + } + + return true; +} + +int[,] testArray1 = { { 8, 1, 6 }, { 3, 5, 7 }, { 4, 9, 2 } }; +int[,] testArray2 = { { 8, 1, 6 }, { 3, 5, 7 }, { 4, 9, 3 } }; +int[,] testArray3 = { { 8, 1, 6 }, { 3, 5, 7 } }; + +Console.WriteLine(MagicQuadrat(testArray1)); +Console.WriteLine(MagicQuadrat(testArray2)); +Console.WriteLine(MagicQuadrat(testArray3)); diff --git a/MagischesQuadrat/MagischesQuadrat.csproj b/MagischesQuadrat/MagischesQuadrat.csproj new file mode 100644 index 0000000000000000000000000000000000000000..206b89a9a8b9320db4b017a262b565f104489193 --- /dev/null +++ b/MagischesQuadrat/MagischesQuadrat.csproj @@ -0,0 +1,10 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + +</Project> diff --git a/Millionaer/Millionaer.csproj b/Millionaer/Millionaer.csproj new file mode 100644 index 0000000000000000000000000000000000000000..206b89a9a8b9320db4b017a262b565f104489193 --- /dev/null +++ b/Millionaer/Millionaer.csproj @@ -0,0 +1,10 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + +</Project> diff --git a/Millionaer/Program.cs b/Millionaer/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..efc764b8c4a4171fb83c98756d40c240961e7393 --- /dev/null +++ b/Millionaer/Program.cs @@ -0,0 +1,16 @@ +static int Millionaer(double betrag, double zins) +{ + int jahre = 0; + + while (betrag < 1000000) + { + betrag += betrag * (zins/100); + jahre++; + // Debug-Ausgabe + Console.WriteLine($"Betrag nach {jahre} Jahren: {betrag:f2}"); + } + + return jahre; +} + +Console.WriteLine(Millionaer(1000, 3)); diff --git a/PersonAbteilung/Abteilung.cs b/PersonAbteilung/Abteilung.cs new file mode 100644 index 0000000000000000000000000000000000000000..e1aa26a65f8e0cdfbff20be30acedf2bd4bd59e6 --- /dev/null +++ b/PersonAbteilung/Abteilung.cs @@ -0,0 +1,69 @@ +// Klasse Abteilung +namespace Uebung12; + +class Abteilung +{ + string name; // Name der Abteilung + Person[] mitarbeiter; // Array mit Mitarbeitern + + // Parameter Konstruktor + public Abteilung(string name, params Person[] mitarbeiter) + { + this.name = name; + this.mitarbeiter = mitarbeiter; + } + + // Konstruktor für Erzeugung aus Datei + public Abteilung(string dateiname) + { + StreamReader sr = new StreamReader(dateiname); + + // Abteilungsnamen einlesen + string? zeile = sr.ReadLine() ?? ""; + string[] daten = zeile.Split(':'); + this.name = daten[0].Trim(); + + // Mitarbeiterfeld anlegen + int anzahl = Convert.ToInt32(daten[1]); + this.mitarbeiter = new Person[anzahl]; + + // Mitarbeiter einlesen + int i = 0; + while ((zeile = sr.ReadLine()) != null) + { + daten = zeile.Split(';', ','); + + int persnr = Convert.ToInt32(daten[0]); + string vorname = daten[2].Trim(); + string nachname = daten[1].Trim(); + string email = daten[3].Trim(); + + this.mitarbeiter[i++] = new Person(persnr, vorname, nachname, email); + } + } + + public override string ToString() + { + return name + " (" + mitarbeiter.Length + ")"; + } + + public void Ausgabe() + { + // Ausgabe des Abteilungsnamens - es wird implizit ToString() aufgerufen + Console.WriteLine(this); + // Ausgabe der Mitarbeiter + for (int i = 0; i < mitarbeiter.Length; i++) + Console.WriteLine(mitarbeiter[i]); + } + + public Person? Suche(string email) + { + for (int i = 0; i < mitarbeiter.Length; i++) + { + if (mitarbeiter[i].GetEmail() == email) + return mitarbeiter[i]; + } + + return null; + } +} diff --git a/PersonAbteilung/Person.cs b/PersonAbteilung/Person.cs new file mode 100644 index 0000000000000000000000000000000000000000..e5a7ff5b75529df191bac979aa3809c57cc8c53a --- /dev/null +++ b/PersonAbteilung/Person.cs @@ -0,0 +1,80 @@ +namespace Uebung12; + +// Hauptprogramm in Program.cs +class Person +{ + int persnr; + string vorname; + string nachname; + string email; + + // Parameter Konstruktur + public Person(int persnr, string vorname, string nachname, string email) + { + if (vorname == null || vorname.Length < 2 || + nachname == null || nachname.Length < 2) + throw new ArgumentException("Ungültiger Name"); + else if (!EmailGueltig(email)) + throw new ArgumentException("Ungültige Email"); + + this.persnr = persnr; + this.vorname = vorname; + this.nachname = nachname; + this.email = email; + } + + #region Methoden + // Getter für Name + public string GetName() + { + return nachname + ", " + vorname; + } + + // Getter und Setter für Email + public string GetEmail() => email; // ist das gleiche wie nur return email; + + public void SetEmail(string newEmail) + { + if (!EmailGueltig(newEmail)) // Aufgabe 11.3 + throw new ArgumentException("Ungültige Email"); + this.email = newEmail; + } + + // ToString-Methode mit override + public override string ToString() + { + return $"{persnr}: {GetName()}; {email}"; + } + + // Gültigkeitstest für Email. Achtung: static! + // Die Methode überprüft nur für einen String, ob er eine gültige Email-Adresse darstellt. + // Als Objekt-Methode geht das nicht, denn wir wollen ja gar kein Objekt haben, + // das eine ungültige Adresse hat! + public static bool EmailGueltig(string email) + { + if (email == null || email.Length == 0) + return false; + + // erstes Zeichen ist Buchstabe + if (!Char.IsLetter(email[0])) + return false; + + // Merker für @ und . danach + bool atGefunden = false; + bool pktNachAtGefunden = false; + + // Schleife über email + foreach (char c in email) + { + if (c == ' ') + return false; + else if (c == '@') + atGefunden = true; + else if (atGefunden && c == '.') + pktNachAtGefunden = true; + } + + return pktNachAtGefunden; + } + #endregion +} diff --git a/PersonAbteilung/PersonAbteilung.csproj b/PersonAbteilung/PersonAbteilung.csproj new file mode 100644 index 0000000000000000000000000000000000000000..206b89a9a8b9320db4b017a262b565f104489193 --- /dev/null +++ b/PersonAbteilung/PersonAbteilung.csproj @@ -0,0 +1,10 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + +</Project> diff --git a/PersonAbteilung/Program.cs b/PersonAbteilung/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..c63cbfa6059e14589b68b699fbdbcffad3b7f0bb --- /dev/null +++ b/PersonAbteilung/Program.cs @@ -0,0 +1,60 @@ +namespace Uebung12; + +// Test-Klasse für Abteilung +class Program +{ + static void Main(string[] args) + { + // Main aus letzter Übung + Person person = new Person(12, "Anne", "Meier", "ameier@thn.de"); + + Console.WriteLine(person.GetName()); + Console.WriteLine(person); + person.SetEmail("ameier@th-nuernberg.de"); // Ändern der Email + Console.WriteLine(person); + + + // Test für Anlage einer Abteilung + Person[] mitarbeiterPR = new Person[6]; + + mitarbeiterPR[0] = new Person(13, "Donald", "Duck", "dd@entenhausen.com"); + mitarbeiterPR[1] = new Person(21, "Gustav", "Gans", "gg@entenhausen.com"); + mitarbeiterPR[2] = new Person(37, "Micky", "Maus", "mm@entenhausen.com"); + mitarbeiterPR[3] = new Person(42, "Duffy", "Duck", "dd@warner.com"); + mitarbeiterPR[4] = new Person(76, "Silvester", "Cat", "silly@cat.org"); + mitarbeiterPR[5] = new Person(88, "Tweety", "Bird", "birdy@twitter.com"); + + Abteilung pr = new Abteilung("Public Relations", mitarbeiterPR); + Console.WriteLine(); + Console.WriteLine(pr); + Console.WriteLine(); + pr.Ausgabe(); + Console.WriteLine(); + + // Test-Emails für Suche + string[] emails = { "mm@entenhausen.com", "dsmith@th-nuernberg.de", + "ahuber@thn.de", "silly@cat.org" }; + + Console.WriteLine(); + Console.WriteLine("Suche:"); + foreach (string email in emails) + { + Person? p = pr.Suche(email); + if (p != null) + Console.WriteLine("Person gefunden: " + p); + else + Console.WriteLine("Person zu email " + email + " nicht gefunden"); + } + Console.WriteLine(); + + // Einlesen einer Abteilung aus Datei: + string dateiname = "Marketing.txt"; + // Damit's auf Windows und Unix klappt verwenden wir hier Path.Combine + // Dabei werden die Namen mit Path.PathSeparator (\ auf Windows, / auf Unix) verknüpft + string dateipfad = Path.Combine("..", "..", "..", dateiname); + Console.WriteLine("Öffne Datei: " + dateipfad); + Abteilung marketing = new Abteilung(dateipfad); + marketing.Ausgabe(); + Console.WriteLine(); + } +} \ No newline at end of file diff --git a/Uebung12.sln b/Uebung12.sln new file mode 100644 index 0000000000000000000000000000000000000000..9594ab00276b09f0d63bfa011462c9b419c7f9cd --- /dev/null +++ b/Uebung12.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 25.0.1706.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PersonAbteilung", "PersonAbteilung\PersonAbteilung.csproj", "{6811F6BC-B3F5-4894-A64D-A026D1FCECCF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnumRechenOperationen", "EnumRechenOperationen\EnumRechenOperationen.csproj", "{C7625BE2-6E42-4EEB-9BDA-7FDA8986A4C3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MagischesQuadrat", "MagischesQuadrat\MagischesQuadrat.csproj", "{6DD50361-EE2D-4AEF-A307-EE9ADA930199}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Millionaer", "Millionaer\Millionaer.csproj", "{088F39F4-2753-480A-A633-828AEC9D1DD5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6811F6BC-B3F5-4894-A64D-A026D1FCECCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6811F6BC-B3F5-4894-A64D-A026D1FCECCF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6811F6BC-B3F5-4894-A64D-A026D1FCECCF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6811F6BC-B3F5-4894-A64D-A026D1FCECCF}.Release|Any CPU.Build.0 = Release|Any CPU + {C7625BE2-6E42-4EEB-9BDA-7FDA8986A4C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7625BE2-6E42-4EEB-9BDA-7FDA8986A4C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7625BE2-6E42-4EEB-9BDA-7FDA8986A4C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7625BE2-6E42-4EEB-9BDA-7FDA8986A4C3}.Release|Any CPU.Build.0 = Release|Any CPU + {6DD50361-EE2D-4AEF-A307-EE9ADA930199}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6DD50361-EE2D-4AEF-A307-EE9ADA930199}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DD50361-EE2D-4AEF-A307-EE9ADA930199}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6DD50361-EE2D-4AEF-A307-EE9ADA930199}.Release|Any CPU.Build.0 = Release|Any CPU + {088F39F4-2753-480A-A633-828AEC9D1DD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {088F39F4-2753-480A-A633-828AEC9D1DD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {088F39F4-2753-480A-A633-828AEC9D1DD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {088F39F4-2753-480A-A633-828AEC9D1DD5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0BA7133D-AEF5-4356-9B80-C02CB1DA77E4} + EndGlobalSection +EndGlobal