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