diff --git a/BuchstabenHistogramm/BuchstabenHistogramm.cs b/BuchstabenHistogramm/BuchstabenHistogramm.cs new file mode 100644 index 0000000000000000000000000000000000000000..d2cb7c44e1965a5d6cc2c655fddad56b8052e4c2 --- /dev/null +++ b/BuchstabenHistogramm/BuchstabenHistogramm.cs @@ -0,0 +1,69 @@ +class Program +{ + static int BuchstabenIndex(char b) + { + // Sonderfälle, zur Abwechslung mal mit switch statt if + switch (b) + { + case 'Ä': + case 'ä': + b = 'a'; break; + case 'Ö': + case 'ö': + b = 'o'; break; + case 'Ü': + case 'ü': + b = 'u'; break; + case 'ß': + b = 's'; break; + } + + // Index-Berechnung + if (b >= 'A' && b <= 'Z') + return b - 'A'; + else if (b >= 'a' && b <= 'z') + return b - 'a'; + else + return -1; + } + + static void Main() + { + // Hauptprogramm + string gedicht = + @"Joachim Ringelnatz: Genau besehn + Wenn man das zierlichste Näschen + Von seiner liebsten Braut + Durch ein Vergrößerungsgläschen + Näher beschaut, + Dann zeigen sich haarige Berge, + Daß einem graut."; + + // string satz = "Der böse Aal beißt"; + + string test = "Aaboösßz ?."; + foreach (char c in test) + Console.WriteLine($"BuchstabenIndex('{c}') = " + BuchstabenIndex(c)); + + int[] histogram = new int[26]; + + // Buchstaben zählen + foreach (char c in gedicht) + { + int i = BuchstabenIndex(c); + if (i >= 0) + histogram[i]++; + } + + // Histogramm ausgeben + for (int i = 0; i < histogram.Length; i++) + { + char buchstabe = (char)('a' + i); + int anzahl = histogram[i]; + Console.Write($"{buchstabe} ({anzahl,2}) "); + for (int j = 0; j < anzahl; j++) + Console.Write('\u2584'); + Console.WriteLine(); + } + } +} diff --git a/BuchstabenHistogramm/BuchstabenHistogramm.csproj b/BuchstabenHistogramm/BuchstabenHistogramm.csproj new file mode 100644 index 0000000000000000000000000000000000000000..206b89a9a8b9320db4b017a262b565f104489193 --- /dev/null +++ b/BuchstabenHistogramm/BuchstabenHistogramm.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/EntferneZeichen/EntferneZeichen.cs b/EntferneZeichen/EntferneZeichen.cs new file mode 100644 index 0000000000000000000000000000000000000000..72cd2f1277b0d02e68be693995c88029f19fca6e --- /dev/null +++ b/EntferneZeichen/EntferneZeichen.cs @@ -0,0 +1,44 @@ +class Program +{ + // Entfernt alle Vorkommen der angegebenen Zeichen aus dem String + static string EntferneZeichen(string s, params char[] sonderzeichen) + { + string ergebnis = ""; + + foreach (char c in s) + { + bool istSonderzeichen = false; + + for (int i = 0; i < sonderzeichen.Length && !istSonderzeichen; i++) + if (c == sonderzeichen[i]) + istSonderzeichen = true; + + if (!istSonderzeichen) + ergebnis += c; + } + + return ergebnis; + } + + + // Entfernt alle Vorkommen der angegebenen Zeichen aus dem String + // mit Hilfe der String-Replace-Funktion. + // Effizienter wäre es allerdings mit StringBuilder.Replace() + static void EntferneZeichen2(ref string s, params char[] sonderzeichen) + { + for (int i = 0; i < sonderzeichen.Length; i++) + s = s.Replace(sonderzeichen[i].ToString(), ""); + } + + + static void Main(string[] args) + { + // Testfälle für EntferneSonderzeichen + Console.WriteLine(EntferneZeichen("a b c", ' ')); + Console.WriteLine(EntferneZeichen("0153-3563-7545", '-')); + Console.WriteLine(EntferneZeichen("ottos mops hopst", 'o')); + + // mit Params-Aufruf + Console.WriteLine(EntferneZeichen("Er sagte: Guten Tag!", ':', ' ', '!')); + } +} diff --git a/EntferneZeichen/EntferneZeichen.csproj b/EntferneZeichen/EntferneZeichen.csproj new file mode 100644 index 0000000000000000000000000000000000000000..9ec5c75a740caa9a6e17ce35b9099a596b01707c --- /dev/null +++ b/EntferneZeichen/EntferneZeichen.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/HammingDistance/HammingDistance.cs b/HammingDistance/HammingDistance.cs new file mode 100644 index 0000000000000000000000000000000000000000..4cb69a76f8f11c33d8935bbb8b7a1e746910eb12 --- /dev/null +++ b/HammingDistance/HammingDistance.cs @@ -0,0 +1,30 @@ +class Program +{ + // Hamming-Abstand + static int HammingDistance(string s1, string s2) + { + int ergebnis = 0; + if (s1.Length != s2.Length) + return -1; // verschieden lang, lassen sich nicht vergleichen + else // s1.Length == s2.Length ... gleich lang + { + for (int i = 0; i < s1.Length; i++) + { + // zeichenweise: wenn nicht gleich, dann wird gezählt + if (s1[i] != s2[i]) + ergebnis++; + } + } + return ergebnis; + } + + static void Main(string[] args) + { + // Hamming-Abstand + Console.Write("Hamming-Distance:\n"); + Console.WriteLine($"Foo, Bar\t{HammingDistance("Foo", "Bar")}"); + Console.WriteLine($"Hello, Hallo\t{HammingDistance("Hello", "Hallo")}"); + Console.WriteLine($"Prog, Prog\t{HammingDistance("Prog1", "Prog1")}"); + Console.WriteLine($"Hallo, Welt\t{HammingDistance("Hallo", "Welt")}"); + } +} diff --git a/HammingDistance/HammingDistance.csproj b/HammingDistance/HammingDistance.csproj new file mode 100644 index 0000000000000000000000000000000000000000..6f4623a81bd1cabbd5f89f647c59c88e7811b9e1 --- /dev/null +++ b/HammingDistance/HammingDistance.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/Palindrom/Palindrom.cs b/Palindrom/Palindrom.cs new file mode 100644 index 0000000000000000000000000000000000000000..7f8d2256e303ca0b7f2723d485fefb0e1b99ac49 --- /dev/null +++ b/Palindrom/Palindrom.cs @@ -0,0 +1,61 @@ +class Program +{ + // Hier nochmal die Funktion aus anderem Projekt reinkopiert. + // In der Praxis würden wir die Funktion aus dem anderen Projekt (andere Klasse) + // einfach aufrufen - ohne den Code zu kopieren. Ist aber für die Übung einfacher so. + static string EntferneZeichen(string s, params char[] sonderzeichen) + { + string ergebnis = ""; + + foreach (char c in s) + { + bool istSonderzeichen = false; + + for (int i = 0; i < sonderzeichen.Length && !istSonderzeichen; i++) + if (c == sonderzeichen[i]) + istSonderzeichen = true; + + if (!istSonderzeichen) + ergebnis += c; + } + + return ergebnis; + } + + + // Palindrom-Test + static bool IstPalindrom(string s) + { + s = EntferneZeichen(s, ' ', ',', ';', ':', '.', '!', '?', '-', '\''); + s = s.ToUpper(); + + // Zeichen in s müssen von vorn und hinten kommend übereinstimmen + //for (int i = 0, j = s.Length - 1; i < s.Length / 2; i++, j--) + // if (s[i] != s[j]) + // return false; + + // Ohne j geht es auch ganz einfach so: + for (int i = 0; i < s.Length / 2; i++) + if (s[i] != s[^(i + 1)]) + return false; + + return true; + } + + + static void Main(string[] args) + { + string[] texte = { "ANNA", "Anna", "legal", "Otto", "Lagerregal", "123421", + "Hermine - sie mag Ameisen im Reh.", + "Einhorn roh? Nie!" }; + + foreach (var text in texte) + { + Console.Write($"\"{text}\" ist "); + if (IstPalindrom(text)) + Console.WriteLine("ein Palindrom."); + else + Console.WriteLine("kein Palindrom."); + } + } +} diff --git a/Palindrom/Palindrom.csproj b/Palindrom/Palindrom.csproj new file mode 100644 index 0000000000000000000000000000000000000000..9ec5c75a740caa9a6e17ce35b9099a596b01707c --- /dev/null +++ b/Palindrom/Palindrom.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/SeparatorCounter/SeparatorCounter.cs b/SeparatorCounter/SeparatorCounter.cs new file mode 100644 index 0000000000000000000000000000000000000000..b8ca8548767898163afd064b2322f1b6374a8ddc --- /dev/null +++ b/SeparatorCounter/SeparatorCounter.cs @@ -0,0 +1,29 @@ +class Program +{ + static void SeparatorCounter(string s, out int period, out int comma, out int semicolon) + { + period = 0; + comma = 0; + semicolon = 0; + + for (int i = 0; i < s.Length; i++) + if (s[i] == '.') + period++; + else if (s[i] == ',') + comma++; + else if (s[i] == ';') + semicolon++; + } + + static void Main(string[] args) + { + int punkt, komma, semi; + string test = "A, B, C; D; E; F. G; H; I"; + + SeparatorCounter(test, out punkt, out komma, out semi); + + Console.WriteLine("Punkte: " + punkt); + Console.WriteLine("Kommas: " + komma); + Console.WriteLine("Semikolons: " + semi); + } +} diff --git a/SeparatorCounter/SeparatorCounter.csproj b/SeparatorCounter/SeparatorCounter.csproj new file mode 100644 index 0000000000000000000000000000000000000000..9ec5c75a740caa9a6e17ce35b9099a596b01707c --- /dev/null +++ b/SeparatorCounter/SeparatorCounter.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/Uebung09.sln b/Uebung09.sln new file mode 100644 index 0000000000000000000000000000000000000000..3e2c36d7b6d9f5fcfff38e1a780c7d70d5dd42a1 --- /dev/null +++ b/Uebung09.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HammingDistance", "HammingDistance\HammingDistance.csproj", "{DB77F902-F669-4437-8918-0A499330B35B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntferneZeichen", "EntferneZeichen\EntferneZeichen.csproj", "{AF1FCBE7-81D6-4C6F-B2C7-8B27B417A94F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Palindrom", "Palindrom\Palindrom.csproj", "{D6320D94-94B5-4980-BDBA-A0DE98443FC1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SeparatorCounter", "SeparatorCounter\SeparatorCounter.csproj", "{E619C3E7-9BCA-43A4-AFAC-4B656F5B0D97}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuchstabenHistogramm", "BuchstabenHistogramm\BuchstabenHistogramm.csproj", "{AB8315A5-2A94-4D30-B7A9-18627B67C213}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DB77F902-F669-4437-8918-0A499330B35B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB77F902-F669-4437-8918-0A499330B35B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB77F902-F669-4437-8918-0A499330B35B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB77F902-F669-4437-8918-0A499330B35B}.Release|Any CPU.Build.0 = Release|Any CPU + {AF1FCBE7-81D6-4C6F-B2C7-8B27B417A94F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF1FCBE7-81D6-4C6F-B2C7-8B27B417A94F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF1FCBE7-81D6-4C6F-B2C7-8B27B417A94F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF1FCBE7-81D6-4C6F-B2C7-8B27B417A94F}.Release|Any CPU.Build.0 = Release|Any CPU + {D6320D94-94B5-4980-BDBA-A0DE98443FC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6320D94-94B5-4980-BDBA-A0DE98443FC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6320D94-94B5-4980-BDBA-A0DE98443FC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6320D94-94B5-4980-BDBA-A0DE98443FC1}.Release|Any CPU.Build.0 = Release|Any CPU + {E619C3E7-9BCA-43A4-AFAC-4B656F5B0D97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E619C3E7-9BCA-43A4-AFAC-4B656F5B0D97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E619C3E7-9BCA-43A4-AFAC-4B656F5B0D97}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E619C3E7-9BCA-43A4-AFAC-4B656F5B0D97}.Release|Any CPU.Build.0 = Release|Any CPU + {AB8315A5-2A94-4D30-B7A9-18627B67C213}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB8315A5-2A94-4D30-B7A9-18627B67C213}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB8315A5-2A94-4D30-B7A9-18627B67C213}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB8315A5-2A94-4D30-B7A9-18627B67C213}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6F1FE9D2-3B51-43A6-A1E3-96B8C2923A7D} + EndGlobalSection +EndGlobal diff --git a/ZeilenSpaltenSummen/Program.cs b/ZeilenSpaltenSummen/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..b2c6f2204679d3f656e2e9da9dc94b1f00f4cdc2 --- /dev/null +++ b/ZeilenSpaltenSummen/Program.cs @@ -0,0 +1,59 @@ +namespace Uebung +{ + class Program + { + // 2D-Array: Spalten- und Zeilensummen + static void FeldAusgeben(int[,] f) + { + for (int z = 0; z < f.GetLength(0); z++) + { + for (int s = 0; s < f.GetLength(1); s++) + { + Console.Write($"{f[z, s]} "); + } + Console.WriteLine(); + } + } + + static int ZeileSpalte(int k, int[,] m) + { + int summe = 0; // mit 0 initialisieren spart den else-Zweig + + if (k >= 0) // keine negativen Indizes + { + if (k < m.GetLength(0)) // Es gibt die Zeile. + { + for (int i = 0; i < m.GetLength(1); i++) // Anzahl aller Spalten + { + summe += m[k, i]; + } + } + if (k < m.GetLength(1)) // Es gibt die Spalte. + { + for (int i = 0; i < m.GetLength(0); i++) // Anzahl aller Zeilen + { + summe -= m[i, k]; + } + } + } + + return summe; + } + + static void Main(string[] args) + { + //Spalten- und Zeilensummen + Console.Write("\nSpalten- und Zeilensummen:\n"); + int[,] meinFeld = { { 1, 2, 6, 8 }, + { 3, 4, 7, 2 }, + { 5, 6, 5, 4 }, + { 7, 8, 9, 1 }, + { 8, 7, 1, 2 }, + { 2, 9, 2, 1 } }; + FeldAusgeben(meinFeld); + Console.WriteLine("\nRechnung Zeilen/Spalten"); + int meineSumme = ZeileSpalte(2, meinFeld); + Console.WriteLine($"Summe: {meineSumme}\n"); + } + } +} \ No newline at end of file diff --git a/ZeilenSpaltenSummen/ZeilenSpaltenSummen.csproj b/ZeilenSpaltenSummen/ZeilenSpaltenSummen.csproj new file mode 100644 index 0000000000000000000000000000000000000000..9ec5c75a740caa9a6e17ce35b9099a596b01707c --- /dev/null +++ b/ZeilenSpaltenSummen/ZeilenSpaltenSummen.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>