From 8218df478809521f30848a2d44b0ff556789ed6a Mon Sep 17 00:00:00 2001
From: wienkop <uwe.wienkop@th-nuernberg.de>
Date: Tue, 20 Apr 2021 11:19:17 +0200
Subject: [PATCH] 2021-04-20 Abschluss des Kapitels Verkettete Strukturen

---
 05-1 BinTree/BinTree.cs                       | 66 ++++++++++++++
 05-1 BinTree/Program.cs                       | 41 +++++++++
 .../05-2 IntroVererbungKfz.csproj             |  9 ++
 05-2 IntroVererbungKfz/KfzCoolStyle.cs        | 10 +++
 05-2 IntroVererbungKfz/KfzOldStyle.cs         | 10 +++
 05-2 IntroVererbungKfz/Program.cs             | 41 +++++++++
 05-UbgBinTree-Di/05-UbgBinTree-Di.csproj      |  9 ++
 05-UbgBinTree-Di/BinTree.cs                   | 85 +++++++++++++++++++
 05-UbgBinTree-Di/Program.cs                   | 21 +++++
 Prog2WienkopSS2021.sln                        | 14 ++-
 10 files changed, 305 insertions(+), 1 deletion(-)
 create mode 100644 05-2 IntroVererbungKfz/05-2 IntroVererbungKfz.csproj
 create mode 100644 05-2 IntroVererbungKfz/KfzCoolStyle.cs
 create mode 100644 05-2 IntroVererbungKfz/KfzOldStyle.cs
 create mode 100644 05-2 IntroVererbungKfz/Program.cs
 create mode 100644 05-UbgBinTree-Di/05-UbgBinTree-Di.csproj
 create mode 100644 05-UbgBinTree-Di/BinTree.cs
 create mode 100644 05-UbgBinTree-Di/Program.cs

diff --git a/05-1 BinTree/BinTree.cs b/05-1 BinTree/BinTree.cs
index 8392dd6..e06a81b 100644
--- a/05-1 BinTree/BinTree.cs	
+++ b/05-1 BinTree/BinTree.cs	
@@ -11,6 +11,12 @@ namespace _05_1_BinTree
             public int number;
             public BItem left = null, right = null;
             public BItem (int Number) { number = Number; }
+            public override string ToString()
+            {
+                string lString = (left == null) ? "null" : left.number.ToString();
+                string rString = (right == null) ? "null" : right.number.ToString();
+                return $"left:{lString} <- {number} -> right:{rString}";
+            }
         }
         BItem root = null;
 
@@ -59,5 +65,65 @@ namespace _05_1_BinTree
             }
             return false;
         }
+        public void InOrderPrint()
+        {
+            InOrderPrint(root);
+        }
+        private void InOrderPrint(BItem item)
+        {   // kleiner -- selbst -- größer
+            if (item != null)
+            {
+                Console.Write("( ");
+                if (item.left != null)
+                    InOrderPrint(item.left);
+                    // linke Elemente ausgeben
+                Console.Write("  "+item.number+ "  ");
+                if (item.right != null)
+                    InOrderPrint(item.right);
+                // rechte Elemente ausgeben
+                Console.Write(" )");
+            }
+        }
+
+        private IEnumerable<int> GetEnum(BItem item)
+        {
+            if (item != null)
+            {
+                foreach (var item2 in GetEnum(item.left))
+                    yield return item2;
+
+                yield return item.number;
+
+                foreach (var item2 in GetEnum(item.right))
+                    yield return item2;
+            }
+        }
+        public IEnumerator<int> GetEnumerator()
+        {
+            foreach (var item in GetEnum(root))
+                yield return item;
+        }
+
+        public void PreOrderPrint()
+        {
+            PreOrderPrint(root);
+        }
+        private void PreOrderPrint(BItem item)
+        {   // kleiner -- selbst -- größer
+            if (item != null)
+            {
+                Console.Write("( ");
+                Console.Write("  " + item.number + "  ");
+
+                if (item.left != null)
+                    PreOrderPrint(item.left);
+                // linke Elemente ausgeben
+
+                if (item.right != null)
+                    PreOrderPrint(item.right);
+                // rechte Elemente ausgeben
+                Console.Write(" )");
+            }
+        }
     }
 }
diff --git a/05-1 BinTree/Program.cs b/05-1 BinTree/Program.cs
index 73d6c66..83400bc 100644
--- a/05-1 BinTree/Program.cs	
+++ b/05-1 BinTree/Program.cs	
@@ -10,8 +10,49 @@ namespace _05_1_BinTree
             bt.BInsert(50);
             bt.BInsert(80);
             bt.BInsert(30);
+
+            bt.BInsert(50);
+
             bt.BInsert(40);
             bt.BInsert(60);
+
+            bt.InOrderPrint();
+            Console.WriteLine("\n--------");
+            bt.PreOrderPrint();
+            //f1();
+
+            foreach (var item in bt)
+            {
+                Console.WriteLine(item);
+            }
         }
+
+        static int fak(int n)
+        {
+            if (n == 1)
+                return 1;
+            else
+                return n * fak(n - 1);
+        }
+
+        static void f1()
+        {
+            // ...
+            f1();
+            //
+        }
+        static void f2()
+        {
+            // ...
+            f3();
+            //
+        }
+        static void f3()
+        {
+            // ...
+            
+        }
+
+
     }
 }
diff --git a/05-2 IntroVererbungKfz/05-2 IntroVererbungKfz.csproj b/05-2 IntroVererbungKfz/05-2 IntroVererbungKfz.csproj
new file mode 100644
index 0000000..f4d6baf
--- /dev/null
+++ b/05-2 IntroVererbungKfz/05-2 IntroVererbungKfz.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_05_2_IntroVererbungKfz</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/05-2 IntroVererbungKfz/KfzCoolStyle.cs b/05-2 IntroVererbungKfz/KfzCoolStyle.cs
new file mode 100644
index 0000000..b16b11e
--- /dev/null
+++ b/05-2 IntroVererbungKfz/KfzCoolStyle.cs	
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _05_2_IntroVererbungKfz
+{
+    class KfzCoolStyle
+    {
+    }
+}
diff --git a/05-2 IntroVererbungKfz/KfzOldStyle.cs b/05-2 IntroVererbungKfz/KfzOldStyle.cs
new file mode 100644
index 0000000..adb183a
--- /dev/null
+++ b/05-2 IntroVererbungKfz/KfzOldStyle.cs	
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _05_2_IntroVererbungKfz
+{
+    class KfzOldStyle
+    {
+    }
+}
diff --git a/05-2 IntroVererbungKfz/Program.cs b/05-2 IntroVererbungKfz/Program.cs
new file mode 100644
index 0000000..60ff173
--- /dev/null
+++ b/05-2 IntroVererbungKfz/Program.cs	
@@ -0,0 +1,41 @@
+using System;
+
+namespace _05_2_IntroVererbungKfz
+{
+    //Kraftfahrzeuge:
+    //
+    //Steuerberechnung PKW:
+    //Hubraumsteuer
+    //Den Anteil für den Hubraum berechnen Sie dabei anhand der von der Motorenart abhängigen Hubraumsteuer:
+
+    //Motorenart Steuern pro angefangenen 100 Kubikzentimetern Hubraum
+    //Benzin- / Ottomotor	2,00 Euro
+    //Dieselmotor 9,50 Euro
+    //Datenquelle: Bundesfinanzministerium
+
+    //Ein Dieselfahrzeug mit einem Motorhubraum von 1.500 ccm kostet folglich 142,50 Euro Hubraumsteuer.
+
+    //CO2-Steuer
+    //Zusätzlich wird die Steuer für den CO2-Ausstoß berechnet. Jedes Gramm CO2-Ausstoß pro Kilometer, das über 
+    //dem Sockelwert liegt, kostet zwei Euro Steuern. Die Sockelwerte – „Freibeträge“ für unterschiedliche 
+    //Zeitpunkte der Erstzulassung – können Sie der folgenden Tabelle entnehmen ...
+    //----------
+
+    // Steuerberechnung Motorrad
+    // Wie hoch ist die Steuer für Krafträder über 125 ccm?
+    // Je angefangene 25 ccm Hubraum müssen Sie jährlich eine Kfz-Steuer von 1,84 Euro entrichten.
+    //
+    // Steuerberechnung LKW
+    //Ein Lkw unterliegt der Kraftfahrzeugsteuer und muss besteuert werden
+    //Beim Lkw wird eine Steuer über Gewicht und andere Bedingungen erhoben
+    //Lkw-Steuer richtet sich auch nach Schadstoffklassen und Geräuschklassen
+    //Der Höchstsatz für die günstigste Lkw-Steuerklasse beträgt 556,00 Euro
+
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            Console.WriteLine("Hello World!");
+        }
+    }
+}
diff --git a/05-UbgBinTree-Di/05-UbgBinTree-Di.csproj b/05-UbgBinTree-Di/05-UbgBinTree-Di.csproj
new file mode 100644
index 0000000..7c7e6c6
--- /dev/null
+++ b/05-UbgBinTree-Di/05-UbgBinTree-Di.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_05_UbgBinTree_Di</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/05-UbgBinTree-Di/BinTree.cs b/05-UbgBinTree-Di/BinTree.cs
new file mode 100644
index 0000000..252b31d
--- /dev/null
+++ b/05-UbgBinTree-Di/BinTree.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace _05_UbgBinTree_Di
+{
+    // Programmieren Sie einen binären Baum, mit den Datenfeldern
+    // string Name
+    // int leftCount, rightCount  -- Anzahl der Elemente im linken bzw. rechten Ast
+    // und den folgenden Methoden
+    // void Insert(string Name) -- Einfügen des Namens
+    // int Level(string Name) -> Liefert die Ebene zurück auf der sich der
+    //                           Knoten befindet (root=0, Nicht gefunden=-1)
+
+    // Diskutieren Sie Ansätze, wie ein Knoten gelöscht werden könnte
+    // Diskutieren Sie, wie ein Baum ausgegeben werden könnte
+
+    class BinTree
+    {
+        class BItem
+        {
+            public string name;
+            public BItem left = null, right = null;
+            public int lCount=0, rCount = 0;
+            public BItem(string Name) { name = Name; }
+            public override string ToString()
+            {
+                string lString = (left == null) ? "null" : left.name;
+                string rString = (right == null) ? "null" : right.name;
+                return $"left:{lString} -- {name}|{lCount}|{rCount} -- right:{rString}";
+            }
+        }
+        BItem root = null;
+
+        public void BInsert(string InsName)
+        {
+            BItem newItem = new BItem(InsName);
+            if (root == null)
+                root = newItem;
+            else
+            {
+                bool done = false;
+                BItem item = root;
+                do
+                {
+                    if (InsName.CompareTo(item.name) < 0) // links oder rechts
+                    {
+                        item.lCount++;
+                        if (item.left == null)
+                        {
+                            item.left = newItem;
+                            done = true;
+                        }
+                        else
+                            item = item.left;
+                    }
+                    else
+                    {
+                        item.rCount++;
+                        if (item.right == null)
+                        {
+                            item.right = newItem;
+                            done = true;
+                        }
+                        else
+                            item = item.right;
+                    }
+                } while (!done);
+            }
+        }
+        public int Level(string Name)
+        {
+            int level = 0;
+            BItem item = root;
+            while (item != null)
+            {
+                if (Name == item.name)
+                    return level;
+                level++;
+                item = (Name.CompareTo(item.name) < 0) ? item.left : item.right;
+            }
+            return -1;
+        }
+    }
+}
diff --git a/05-UbgBinTree-Di/Program.cs b/05-UbgBinTree-Di/Program.cs
new file mode 100644
index 0000000..935842a
--- /dev/null
+++ b/05-UbgBinTree-Di/Program.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace _05_UbgBinTree_Di
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            BinTree tree = new BinTree();
+            tree.BInsert("Claudia");
+            tree.BInsert("Anton");
+            tree.BInsert("Dieter");
+            tree.BInsert("Berta");
+            tree.BInsert("Emil");
+
+            Console.WriteLine(tree.Level("Claudia"));
+            Console.WriteLine(tree.Level("Anton"));
+            Console.WriteLine(tree.Level("Emil"));
+        }
+    }
+}
diff --git a/Prog2WienkopSS2021.sln b/Prog2WienkopSS2021.sln
index f17d85e..b562fd2 100644
--- a/Prog2WienkopSS2021.sln
+++ b/Prog2WienkopSS2021.sln
@@ -33,7 +33,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04-2 DoppeltVerketteteListe
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "05-UbgCycleList-Mo", "05-UbgCycleList-Mo\05-UbgCycleList-Mo.csproj", "{69264CD7-160B-45D5-8880-703EEBD6D7C2}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "05-1 BinTree", "05-1 BinTree\05-1 BinTree.csproj", "{7C9FA089-4364-4326-A973-99FD15DAFBC1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "05-1 BinTree", "05-1 BinTree\05-1 BinTree.csproj", "{7C9FA089-4364-4326-A973-99FD15DAFBC1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "05-2 IntroVererbungKfz", "05-2 IntroVererbungKfz\05-2 IntroVererbungKfz.csproj", "{95016962-76A2-4029-9933-F87AAE6EC416}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "05-UbgBinTree-Di", "05-UbgBinTree-Di\05-UbgBinTree-Di.csproj", "{5CFBEC1D-F6F6-4A12-ACE6-560B677CCE3C}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -105,6 +109,14 @@ Global
 		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7C9FA089-4364-4326-A973-99FD15DAFBC1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{95016962-76A2-4029-9933-F87AAE6EC416}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{95016962-76A2-4029-9933-F87AAE6EC416}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{95016962-76A2-4029-9933-F87AAE6EC416}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{95016962-76A2-4029-9933-F87AAE6EC416}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5CFBEC1D-F6F6-4A12-ACE6-560B677CCE3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5CFBEC1D-F6F6-4A12-ACE6-560B677CCE3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5CFBEC1D-F6F6-4A12-ACE6-560B677CCE3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5CFBEC1D-F6F6-4A12-ACE6-560B677CCE3C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
GitLab