From 80f2a38c8652eec0b45717a183f3cd97c6d9a3cd Mon Sep 17 00:00:00 2001 From: Uwe Wienkop <uwe.wienkop@th-nuernberg.de> Date: Mon, 14 Jun 2021 19:26:44 +0200 Subject: [PATCH] 2021-06-14 BTree<T> --- 11-5 BinTreePersVerwaltung/BinTree.cs | 84 +++++++++++++++++++ 11-5 BinTreePersVerwaltung/Personal.cs | 13 ++- 11-5 BinTreePersVerwaltung/Program.cs | 18 +++- 12-1NewOverride/12-1 NewOverride.csproj | 9 ++ 12-1NewOverride/Program.cs | 40 +++++++++ .../12-2 Delegateaufrufausbreitung.csproj | 0 .../Program.cs | 0 12-UbgTransformingServer-Mo/Program.cs | 23 ++++- 12-UbgTransformingServer-Mo/Server.cs | 12 ++- Prog2WienkopSS2021.sln | 12 +++ 10 files changed, 203 insertions(+), 8 deletions(-) create mode 100644 11-5 BinTreePersVerwaltung/BinTree.cs create mode 100644 12-1NewOverride/12-1 NewOverride.csproj create mode 100644 12-1NewOverride/Program.cs rename 12Delegateaufrufausbreitung/12Delegateaufrufausbreitung.csproj => 12-2 Delegateaufrufausbreitung/12-2 Delegateaufrufausbreitung.csproj (100%) rename {12Delegateaufrufausbreitung => 12-2 Delegateaufrufausbreitung}/Program.cs (100%) diff --git a/11-5 BinTreePersVerwaltung/BinTree.cs b/11-5 BinTreePersVerwaltung/BinTree.cs new file mode 100644 index 0000000..fd655e4 --- /dev/null +++ b/11-5 BinTreePersVerwaltung/BinTree.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using System.Text; + +namespace _11_5_BinTreePersVerwaltung +{ + class BinTree<T> where T:IComparable<T> + { + class Node + { + public T data; + public Node left = null, right = null; + public Node(T Data) { data = Data; } + + public IEnumerable<T> enumerate() + { + if (left != null) + foreach (T item in left.enumerate()) + yield return item; + yield return data; + if (right != null) + foreach (T item in right.enumerate()) + yield return item; + } + public void print() // Methode der Klasse Node + { + if (left != null) + left.print(); + Console.WriteLine(this.data); + if (right != null) + right.print(); + } + } + private Node root = null; + + public void Insert(T Data) + { + Node newItem = new Node(Data); + if (root == null) // Gibt es schon einen Baum? + root = newItem; // Nein: Neues Element ist Wurzel des Baums + else + { + Node tmp = root; + bool found = false; + do // Solange die Einfügeposition noch nicht gefunden ist, tue ... + { + if (newItem.data.CompareTo(tmp.data) < 0) // x < y => (x-y) < 0 + { // links oder rechts von dem aktuellen Element einfügen? + // LINKS + if (tmp.left == null) + { // Ist der linke Ast noch leer? + tmp.left = newItem; // Dann hier einfügen + found = true; + } + else + tmp = tmp.left; // Sonst dem linken Ast folgen + } + else + { // RECHTS + if (tmp.right == null) + { // Ist der rechte Ast noch leer? + tmp.right = newItem; // Dann hier einfügen + found = true; + } + else // Sonst dem rechten Ast folgen + tmp = tmp.right; + } + } while (!found); + } + } + + public IEnumerator GetEnumerator() + { + foreach (T item in root.enumerate()) + yield return item; + } + public void Print() + { + if (root != null) + root.print(); + } + } +} diff --git a/11-5 BinTreePersVerwaltung/Personal.cs b/11-5 BinTreePersVerwaltung/Personal.cs index e93ee44..c394b71 100644 --- a/11-5 BinTreePersVerwaltung/Personal.cs +++ b/11-5 BinTreePersVerwaltung/Personal.cs @@ -6,7 +6,14 @@ namespace _11_5_BinTreePersVerwaltung { abstract class Personal { - public string Name { get; set; } + public virtual string Name { get; set; } + + //private string Name2x; + //public string Name2 + //{ + // get { return Name2x; } + // set { Name2x = value; } + //} public Personal (string Name) { this.Name = Name; } abstract public double Kosten { get; } } @@ -15,6 +22,10 @@ namespace _11_5_BinTreePersVerwaltung protected double gehalt; public Mitarbeiter(string Name, double Gehalt) : base(Name) { gehalt = Gehalt; } public override double Kosten { get => 12.65 * gehalt; } + public override string ToString() + { + return base.ToString(); + } } class Führungskraft : Personal { diff --git a/11-5 BinTreePersVerwaltung/Program.cs b/11-5 BinTreePersVerwaltung/Program.cs index 92edc87..4a33340 100644 --- a/11-5 BinTreePersVerwaltung/Program.cs +++ b/11-5 BinTreePersVerwaltung/Program.cs @@ -6,12 +6,22 @@ namespace _11_5_BinTreePersVerwaltung { static void Main(string[] args) { - Personal[] persFeld = new Personal[10]; - persFeld[0] = new Mitarbeiter("Xaver", 3000); - foreach (var item in persFeld) + BinTree<int> bt = new BinTree<int>(); + bt.Insert(50); + bt.Insert(25); + bt.Insert(40); + + foreach (var item in bt) { - Console.WriteLine(item.Kosten); + Console.WriteLine(item); } + + //Personal[] persFeld = new Personal[10]; + //persFeld[0] = new Mitarbeiter("Xaver", 3000); + //foreach (var item in persFeld) + //{ + // Console.WriteLine(item.Kosten); + //} } } } diff --git a/12-1NewOverride/12-1 NewOverride.csproj b/12-1NewOverride/12-1 NewOverride.csproj new file mode 100644 index 0000000..6f8b25a --- /dev/null +++ b/12-1NewOverride/12-1 NewOverride.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + <RootNamespace>_12NewOverride</RootNamespace> + </PropertyGroup> + +</Project> diff --git a/12-1NewOverride/Program.cs b/12-1NewOverride/Program.cs new file mode 100644 index 0000000..e5dec54 --- /dev/null +++ b/12-1NewOverride/Program.cs @@ -0,0 +1,40 @@ +using System; + +namespace _12NewOverride +{ + class Base + { + public virtual void DoItOverride() { Console.WriteLine("Base.DoItOverride"); } + public virtual void DoItNew() { Console.WriteLine("Base.DoItNew"); } + } + class Abgeleitet : Base + { + public override void DoItOverride() { Console.WriteLine("Abgeleitet.DoItOverride"); } + public virtual new void DoItNew() { Console.WriteLine("Abgeleitet.DoItNew"); } + } + class AbgeleitetAbgeleitet : Abgeleitet + { + public override void DoItOverride() { Console.WriteLine("AbgelAbgel.DoItOverride"); } + public new void DoItNew() { Console.WriteLine("AbgelAbgel.DoItNew"); } + } + + class Program + { + static void Main(string[] args) + { + Abgeleitet a1 = new Abgeleitet(); + a1.DoItOverride(); + a1.DoItNew(); + Console.WriteLine(); + + Base b1 = a1; + b1.DoItOverride(); + b1.DoItNew(); + Console.WriteLine(); + + Abgeleitet c1 = new AbgeleitetAbgeleitet(); + c1.DoItOverride(); + c1.DoItNew(); + } + } +} diff --git a/12Delegateaufrufausbreitung/12Delegateaufrufausbreitung.csproj b/12-2 Delegateaufrufausbreitung/12-2 Delegateaufrufausbreitung.csproj similarity index 100% rename from 12Delegateaufrufausbreitung/12Delegateaufrufausbreitung.csproj rename to 12-2 Delegateaufrufausbreitung/12-2 Delegateaufrufausbreitung.csproj diff --git a/12Delegateaufrufausbreitung/Program.cs b/12-2 Delegateaufrufausbreitung/Program.cs similarity index 100% rename from 12Delegateaufrufausbreitung/Program.cs rename to 12-2 Delegateaufrufausbreitung/Program.cs diff --git a/12-UbgTransformingServer-Mo/Program.cs b/12-UbgTransformingServer-Mo/Program.cs index 62cc11d..41d95ba 100644 --- a/12-UbgTransformingServer-Mo/Program.cs +++ b/12-UbgTransformingServer-Mo/Program.cs @@ -8,13 +8,29 @@ namespace _12_UbgTransformingServer public Client(string Name) { this.Name = Name; } // ToDo: statische "Listener" Methode + public static void Ausgabe(string s) + { + Console.WriteLine("static: "+s); + } // ToDo: nicht-statische "Listener" Methode + public void Listener(string s) + { + Console.WriteLine($"nicht-statisch/{Name}: {s}"); + } } class Program { // ToDo: Realisieren Sie die folgenden Transformationen: // * Signature ( ... ) fügt der Nachricht eine Signatur an // * OldNewCorp ( ... ) ersetzt ZZZ durch AAA + public static void OldNewCorp(ref string s) + { + s = s.Replace("ZZZ", "AAA"); + } + public static void Signature(ref string s) + { + s += "\nNachricht vom AAA Server versendet"; + } // * Beautify ( ... ) ersetzt "liebe Kunden" durch "verehrte Kunden" static void Main(string[] args) { @@ -27,12 +43,17 @@ namespace _12_UbgTransformingServer Client huber = new Client("Huber"); // ToDo: Registrieren Sie einige Listener + server.Notifier += Client.Ausgabe; + server.Notifier += mueller.Listener; + server.Notifier += meier.Listener; server.SendMsg("Herzlich Willkommen, liebe Kunden! ZZZ Corporation"); // ToDo: Registrieren Sie weitere Listener an und entfernen // Sie einen Listener - + server.Transformations += OldNewCorp; + server.Transformations += Signature; + // ToDo: Entfernen Sie die Signature Transformation server.SendMsg("Wir wünschen einen erfolgreichen Tag, liebe Kunden, ZZZ Corporation"); } diff --git a/12-UbgTransformingServer-Mo/Server.cs b/12-UbgTransformingServer-Mo/Server.cs index 1f864c8..7eb6ed5 100644 --- a/12-UbgTransformingServer-Mo/Server.cs +++ b/12-UbgTransformingServer-Mo/Server.cs @@ -4,19 +4,27 @@ using System.Text; namespace _12_UbgTransformingServer { - delegate void Callback(string notifier); + delegate void MeinDelegate(string notifier); delegate void Transform(ref string msg); class MsgServer { // ToDo: Notify-Event anlegen + public event Action<string> Notifier; // ToDo: Transformations-Event anlegen + public event Transform Transformations; public void SendMsg(string msg) { Console.WriteLine($"\n\n\nOriginal-Nachricht: {msg}"); // ToDo: Alle in Transformations gespeicherten Transformationen anwenden - + Transformations?.Invoke(ref msg); + Console.WriteLine($"Transformierte-Nachricht: {msg}"); + // OldNewCorp(ref msg); msg = OldNewCorp(msg); + // Signature(ref msg); msg = Signature(msg); + + // ToDo: Den "transformierten" String an alle in Notify gespeicherten Listener versenden + Notifier?.Invoke(msg); } } } diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln index bba39f8..191214c 100644 --- a/Prog2WienkopSS2021.sln +++ b/Prog2WienkopSS2021.sln @@ -103,6 +103,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "12-UbgTransformingServer-Mo EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "12-UbgTransformingServer-Di", "12-UbgTransformingServer-Di\12-UbgTransformingServer-Di.csproj", "{1F7AE01D-084E-4204-89F0-9E6FAC37F151}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "12-1 NewOverride", "12-1NewOverride\12-1 NewOverride.csproj", "{A312D95F-276F-455B-8BFC-D744F6A51BFA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "12-2 Delegateaufrufausbreitung", "12-2 Delegateaufrufausbreitung\12-2 Delegateaufrufausbreitung.csproj", "{30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -309,6 +313,14 @@ Global {1F7AE01D-084E-4204-89F0-9E6FAC37F151}.Debug|Any CPU.Build.0 = Debug|Any CPU {1F7AE01D-084E-4204-89F0-9E6FAC37F151}.Release|Any CPU.ActiveCfg = Release|Any CPU {1F7AE01D-084E-4204-89F0-9E6FAC37F151}.Release|Any CPU.Build.0 = Release|Any CPU + {A312D95F-276F-455B-8BFC-D744F6A51BFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A312D95F-276F-455B-8BFC-D744F6A51BFA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A312D95F-276F-455B-8BFC-D744F6A51BFA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A312D95F-276F-455B-8BFC-D744F6A51BFA}.Release|Any CPU.Build.0 = Release|Any CPU + {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30C34E16-FFAF-48A5-8F3F-AE3A7CF7B56D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- GitLab