From bffb8ecfcebf9b1f8125d945d9550cae2899d97b Mon Sep 17 00:00:00 2001
From: Uwe Wienkop <uwe.wienkop@th-nuernberg.de>
Date: Tue, 23 Nov 2021 11:34:36 +0100
Subject: [PATCH] Woche 08 Mehrdimensionale Felder + String-Intro

---
 08 2D_Felder/Program.cs                       | 42 +++++++----
 .../08 2D_Felder_Ubg_Di.csproj                |  9 +++
 08 2D_Felder_Ubg_Di/Program.cs                | 69 +++++++++++++++++++
 .../08 ZeichenkettenIntro.csproj              |  9 +++
 08 ZeichenkettenIntro/Program.cs              | 58 ++++++++++++++++
 Prog1_WS2021_22.sln                           | 16 ++++-
 6 files changed, 187 insertions(+), 16 deletions(-)
 create mode 100644 08 2D_Felder_Ubg_Di/08 2D_Felder_Ubg_Di.csproj
 create mode 100644 08 2D_Felder_Ubg_Di/Program.cs
 create mode 100644 08 ZeichenkettenIntro/08 ZeichenkettenIntro.csproj
 create mode 100644 08 ZeichenkettenIntro/Program.cs

diff --git a/08 2D_Felder/Program.cs b/08 2D_Felder/Program.cs
index 02d1caa..f9f17f9 100644
--- a/08 2D_Felder/Program.cs	
+++ b/08 2D_Felder/Program.cs	
@@ -45,7 +45,7 @@ namespace _08_2D_Felder
 
             FeldAusgeben(g2);
 
-            int[,] h = new int[7, 18];
+            int[,] h = new int[10, 6];
             FeldAusgeben(h);
 
             for (int z = 0; z < h.GetLength(0); z++)
@@ -69,7 +69,7 @@ namespace _08_2D_Felder
 
             int[,] hh = FeldKopieren(h);
 
-            // Ganz linke Spalte mit 2 belegen:
+            // Ganz linke Spalte von der zweiten bis zur vorletzten Zeile mit 2 belegen:
             for (int z = 1; z < h.GetLength(0)-1; z++)    // .GetLength(0) ~ Anzahl der Zeilen
                 h[z, 0] = 2;
             FeldAusgeben(h);
@@ -90,19 +90,20 @@ namespace _08_2D_Felder
 
             ///////////////////////////////////////////////////////////////////////////
             /// Ausgefranste Felder (Jagged Arrays)
+            /// Feld von Feldern
 
-            int[][] k = new int[5][];
-            k[0] = new int[5];
+            int[][] k = new int[5][];   // 5er Feld von ...
+            k[0] = new int[5];          // Feld an der Zeilen-Pos. 0
             k[1] = new int[1];
             k[3] = new int[] { 4, 5, 6, 7, 8, 9, 3 };
 
-            for (int z = 0; z < k.Length; z++)
+            for (int zeile = 0; zeile < k.Length; zeile++)      // Schleife über die Zeilen
             {
-                if (k[z] != null)
+                if (k[zeile] != null)                           // Hat diese Zeile ÜBERHAUPT Elemente?
                 {
-                    for (int i = 0; i < k[z].Length; i++)
+                    for (int i = 0; i < k[zeile].Length; i++)   // Schleife über die Elemente einer Zeile
                     {
-                        Console.Write($"{k[z][i]} ");
+                        Console.Write($"{k[zeile][i]} ");
                     }
                     Console.WriteLine();
                 }
@@ -113,15 +114,28 @@ namespace _08_2D_Felder
             }
 
 
+            int[][,] k2;    // Feld von 2D-Feldern
+            int[][,,] k3;    // Feld von 3D-Feldern
 
-            /////////////////////////////////////////////////////////////////////
-            ///
-            int anz = 6;
-            bool[] bf = new bool[1000000];
+            int[,][] k4;    // 2D Feld von 1D Feldern
+            int[,][,] k5;    // 2D Feld von 2D Feldern
 
-            for (int i = 0; i < bf.Length; i++)
-                bf[i] = true;
 
+            ///////////////////////////////////////////////////////////
+            /// Ranges
+            /// int[] g1 = { 1, 2, 3, 4, 5, 6 };
+            int w1 = g1[0];
+            //int w2 = g1[^1];    // ~ g1[g1.Length-1]
+            //int w3 = g1[^2];    // ~ g1[g1.Length-2]
+
+
+            //// Liefern eine Ausschnitt-KOPIE des Feldes g1
+            //int[] w4 = g1[1..3];    // 2,3    EXKLUSIVER rechter Index
+            //int[] w5 = g1[3..];     // 4,5,6
+            //int[] w5 = g1[3..^0];   // 4,5,6  ~~  ^0 EXKLUSIVER rechter Index
+
+            //int[] w6 = g1[..3];     // 1,2,3
+            //int[] w7 = g1[..];      // Kopie von g1
         }
     }
 }
diff --git a/08 2D_Felder_Ubg_Di/08 2D_Felder_Ubg_Di.csproj b/08 2D_Felder_Ubg_Di/08 2D_Felder_Ubg_Di.csproj
new file mode 100644
index 0000000..e9216a6
--- /dev/null
+++ b/08 2D_Felder_Ubg_Di/08 2D_Felder_Ubg_Di.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_08_2D_Felder_Ubg_Di</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/08 2D_Felder_Ubg_Di/Program.cs b/08 2D_Felder_Ubg_Di/Program.cs
new file mode 100644
index 0000000..114ee30
--- /dev/null
+++ b/08 2D_Felder_Ubg_Di/Program.cs	
@@ -0,0 +1,69 @@
+using System;
+
+namespace _08_2D_Felder_Ubg_Di
+{
+    class Program
+    {
+        static void FeldAusgeben(int[,] feld)
+        {
+            for (int z = 0; z < feld.GetLength(0); z++)   // GetLength(n) ~ Anzahl der Elemente in der Dimension n
+            {
+                for (int i = 0; i < feld.GetLength(1); i++)
+                    Console.Write($"{feld[z, i],3}  ");
+
+                Console.WriteLine();
+            }
+            Console.WriteLine("-----------------------------");
+        }
+        /// <summary>
+        /// Initialisiert ein neu anzulegendes n*n Feld mit aufsteigenden Werten
+        /// </summary>
+        /// <param name="n">Größe des Feldes</param>
+        /// <returns>n*n Feld</returns>
+        static int[,] InitFeld(int n)
+        {
+            int[,] feld = new int[n, n];
+            int wert = 1;
+
+            for (int z = 0; z < feld.GetLength(0); z++)   // GetLength(n) ~ Anzahl der Elemente in der Dimension n
+            {
+                for (int i = 0; i < feld.GetLength(1); i++)
+                    feld[z, i] = wert++;
+                //feld[z, i] = z * n + i + 1;
+            }
+            return feld;
+        }
+
+        static void Vierer(int [,] f)
+        {
+            for (int z = 0; z < f.GetLength(0); z++)   // GetLength(n) ~ Anzahl der Elemente in der Dimension n
+                for (int i = 0; i < f.GetLength(1); i++)
+                    if (f[z, i] % 4 == 0)
+                        f[z, i] = 0;
+        }
+
+
+
+        static void Diagonale(int[,] f)
+        {
+            for (int i = 0; i < f.GetLength(1); i++)
+            {
+                f[i, i] = -1;                       // Hauptdiagonale
+                f[i,f.GetLength(0) - 1 - i] = -2;   // Nebendiagonale
+            }
+        }
+        static void Main(string[] args)
+        {
+            int[,] f= InitFeld(12);
+            Vierer(f);
+            Diagonale(f);
+            FeldAusgeben(f);
+
+            // 8x8 Spielfeld
+            // Ausgabefunktion für Felder schreiben
+            // Elemente mit 1..64 vorbelegen
+            // Alle durch 4 teilbaren Werte mit 0 überschreiben
+            // Diagonale mit -1 eintragen
+        }
+    }
+}
diff --git a/08 ZeichenkettenIntro/08 ZeichenkettenIntro.csproj b/08 ZeichenkettenIntro/08 ZeichenkettenIntro.csproj
new file mode 100644
index 0000000..1b6e81f
--- /dev/null
+++ b/08 ZeichenkettenIntro/08 ZeichenkettenIntro.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_08_ZeichenkettenIntro</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/08 ZeichenkettenIntro/Program.cs b/08 ZeichenkettenIntro/Program.cs
new file mode 100644
index 0000000..326d949
--- /dev/null
+++ b/08 ZeichenkettenIntro/Program.cs	
@@ -0,0 +1,58 @@
+using System;
+
+namespace _08_ZeichenkettenIntro
+{
+    class Program
+    {
+        static void ASCII_Tabelle()
+        {
+            string s = "ABC..XYZ abc..xyz 012..789";
+            //for (int i = 0; i < s.Length; i++)
+            //{
+            //    Console.WriteLine(s[i]);
+            //}
+            foreach (char c in s)
+            {
+                Console.WriteLine($"{c} - {(int)c}");
+            }
+
+            Console.WriteLine("-------------------");
+
+            for (int i = 32; i < 128; i++)
+            {
+                Console.WriteLine($"{i,3} - {(char)i}");
+            }
+        }
+        static string InGrossbuchstabenKonvertieren(string s)
+        {
+            string erg = "";
+            foreach (char c in s)
+            {
+                if (c >= 'a' && c <= 'z')           // Handelt es sich um einen Kleinbuchstaben?
+                    erg += (char)(c - ('a' - 'A'));  // Differenz zwischen Klein- u. Großbuchstaben abziehen
+                else
+                    erg += c;
+            }
+            return erg;
+        }
+        static string InKleinbuchstabenKonvertieren(string s)
+        {
+            string erg = "";
+            foreach (char c in s)
+            {
+                if (c >= 'A' && c <= 'Z')           // Handelt es sich um einen Kleinbuchstaben?
+                    erg += (char)(c + ('a' - 'A'));  // Differenz zwischen Klein- u. Großbuchstaben abziehen
+                else
+                    erg += c;
+            }
+            return erg;
+        }
+        static void Main(string[] args)
+        {
+            string s = "Hello World!";
+
+            Console.WriteLine(InGrossbuchstabenKonvertieren(s));
+            Console.WriteLine(InKleinbuchstabenKonvertieren(s));
+        }
+    }
+}
diff --git a/Prog1_WS2021_22.sln b/Prog1_WS2021_22.sln
index a3378c6..e5d0619 100644
--- a/Prog1_WS2021_22.sln
+++ b/Prog1_WS2021_22.sln
@@ -57,9 +57,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "07 ArraysByRef", "07 Arrays
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "07 DoubleUngenauigkeiten", "07 DoubleUngenauigkeiten\07 DoubleUngenauigkeiten.csproj", "{982D3EE4-33F6-48B9-8E8A-68DCCDFA3A84}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08 RefVsOut", "08 RefVsOut\08 RefVsOut.csproj", "{4724CACD-310A-4F71-B140-400D77C92EC7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 RefVsOut", "08 RefVsOut\08 RefVsOut.csproj", "{4724CACD-310A-4F71-B140-400D77C92EC7}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08 2D_Felder", "08 2D_Felder\08 2D_Felder.csproj", "{EE89CDF4-D279-4F6D-82E0-26175D60DF5D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 2D_Felder", "08 2D_Felder\08 2D_Felder.csproj", "{EE89CDF4-D279-4F6D-82E0-26175D60DF5D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08 2D_Felder_Ubg_Di", "08 2D_Felder_Ubg_Di\08 2D_Felder_Ubg_Di.csproj", "{00DFDFC9-A638-4392-934F-D83ADD9D9530}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08 ZeichenkettenIntro", "08 ZeichenkettenIntro\08 ZeichenkettenIntro.csproj", "{36213D4C-1100-4634-A883-1BC46FD24298}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -183,6 +187,14 @@ Global
 		{EE89CDF4-D279-4F6D-82E0-26175D60DF5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EE89CDF4-D279-4F6D-82E0-26175D60DF5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EE89CDF4-D279-4F6D-82E0-26175D60DF5D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{00DFDFC9-A638-4392-934F-D83ADD9D9530}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{00DFDFC9-A638-4392-934F-D83ADD9D9530}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{00DFDFC9-A638-4392-934F-D83ADD9D9530}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{00DFDFC9-A638-4392-934F-D83ADD9D9530}.Release|Any CPU.Build.0 = Release|Any CPU
+		{36213D4C-1100-4634-A883-1BC46FD24298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{36213D4C-1100-4634-A883-1BC46FD24298}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{36213D4C-1100-4634-A883-1BC46FD24298}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{36213D4C-1100-4634-A883-1BC46FD24298}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
GitLab