From a15ba3eacaf2f7765567f0b08313e06a39556390 Mon Sep 17 00:00:00 2001
From: wienkop <uwe.wienkop@th-nuernberg.de>
Date: Tue, 26 Oct 2021 11:58:31 +0200
Subject: [PATCH] 2021-10-26 Funktionen (By-val, By-ref, Rekursion)

---
 04 Dreiecke_Mo_Ubg/Program.cs          |  4 +-
 04 Funktionen_2/04 Funktionen_2.csproj |  9 +++++
 04 Funktionen_2/Program.cs             | 53 ++++++++++++++++++++++++++
 04 IntroFunktionen/Program.cs          | 24 ++++++++----
 04 Uebung_Di/04 Uebung_Di.csproj       |  9 +++++
 04 Uebung_Di/Program.cs                | 36 +++++++++++++++++
 Prog1_WS2021_22.sln                    | 14 ++++++-
 7 files changed, 138 insertions(+), 11 deletions(-)
 create mode 100644 04 Funktionen_2/04 Funktionen_2.csproj
 create mode 100644 04 Funktionen_2/Program.cs
 create mode 100644 04 Uebung_Di/04 Uebung_Di.csproj
 create mode 100644 04 Uebung_Di/Program.cs

diff --git a/04 Dreiecke_Mo_Ubg/Program.cs b/04 Dreiecke_Mo_Ubg/Program.cs
index cf9d2ac..a33482a 100644
--- a/04 Dreiecke_Mo_Ubg/Program.cs	
+++ b/04 Dreiecke_Mo_Ubg/Program.cs	
@@ -6,7 +6,7 @@ namespace _04_Dreiecke_Mo_Ubg
     {
         static void Quadrat(int n)
         {
-            for (int zeile = 1; zeile <= n; zeile++)
+            for (int zeile = 0; zeile < n; zeile++)
             {
                 for (int spalte = 0; spalte < n; spalte++)
                 {
@@ -28,7 +28,7 @@ namespace _04_Dreiecke_Mo_Ubg
         }
         static void SinPlot()
         {
-            for (double x = 0.0; x < 2*Math.PI; x+=0.1)
+            for (double x = 0.0; x < 2*Math.PI; x+=0.15)
             {
                 int anzLeerzeichen = (int)((Math.Sin(x)+1.0)*30.0);
                 for (int spalte = 0; spalte < anzLeerzeichen; spalte++)
diff --git a/04 Funktionen_2/04 Funktionen_2.csproj b/04 Funktionen_2/04 Funktionen_2.csproj
new file mode 100644
index 0000000..a956b8c
--- /dev/null
+++ b/04 Funktionen_2/04 Funktionen_2.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_04_Funktionen_2</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/04 Funktionen_2/Program.cs b/04 Funktionen_2/Program.cs
new file mode 100644
index 0000000..2da0d27
--- /dev/null
+++ b/04 Funktionen_2/Program.cs	
@@ -0,0 +1,53 @@
+using System;
+
+namespace _04_Funktionen_2
+{
+    class Program
+    {
+        // Übergabemechanismus: CALL-BY-VALUE, Wertübergabe
+        static int Incr_ByVal(int meineZahl)
+        {
+            meineZahl++;
+            return meineZahl;
+            // RETURN-BY-VALUE
+        }
+
+        // Übergabemechanismus: CALL-BY-REFERENCE, Referenzübergabe
+        // Bei ref-Parametern wird kein Wert, sondern eine Referenz auf 
+        //    eine andere Variable (z.B. aus Main) übergeben!
+        static void Incr_ByRef(ref int meineZahl)
+        {
+            meineZahl++;
+        }
+
+
+
+        // Fakultät(1)   --> 1
+        // Fakultät(n>1) --> n * Fakultät(n-1)
+        static int Fakultaet(int n)
+        {
+            if (n == 1)
+                return 1;
+            else
+                return n * Fakultaet(n - 1);
+        }
+        static void Main(string[] args)
+        {
+            int zahl = 10;
+            int erg;
+
+            Incr_ByVal(20);           // Incr(20)
+            erg=Incr_ByVal(zahl);     // Incr(10)
+            Incr_ByVal(zahl * zahl);  // Incr(100)
+            //Incr(Convert.ToInt32(Console.ReadLine()));  // Eingabe: "123"  --> Incr(123)
+
+            Fakultaet(3);
+
+            // Incr_ByRef(ref 10);  -- FEHLER: Muss Variable sein
+            Incr_ByRef(ref zahl);     // ACHTUNG! Hier wird nicht der Wert von Zahl, sondern
+                                      //   eine Referenz auf die Variable (der Speicherplatz) übergeben!!!
+            Console.WriteLine(zahl);
+
+        }
+    }
+}
diff --git a/04 IntroFunktionen/Program.cs b/04 IntroFunktionen/Program.cs
index 1f5cce1..495feab 100644
--- a/04 IntroFunktionen/Program.cs	
+++ b/04 IntroFunktionen/Program.cs	
@@ -12,15 +12,19 @@ namespace _04_IntroFunktionen
         // ... liefern einen Return-Wert (void = kein Returnwert)
         //     Eine Funktion kann mehrere return-Anweisungen haben! return beendet die Funktion sofort!
 
-        static bool Primzahltest(int zahl)
+        static bool Primzahltest(int meineZahl)
         {
-            if (zahl % 2 == 0)
+            if (meineZahl < 2)
                 return false;
-
-            int teilergrenze = (int)Math.Sqrt(zahl);
-            for (int teiler = 3; /* n == 0 && */ teiler <= teilergrenze; teiler += 2)
+            if (meineZahl == 2)
+                return true;
+            if (meineZahl % 2 == 0)
+                return false;
+            
+            int teilergrenze = (int)Math.Sqrt(meineZahl);
+            for (int teiler = 3; teiler <= teilergrenze; teiler += 2)
             {
-                if (zahl % teiler == 0)
+                if (meineZahl % teiler == 0)
                     return false;
             }
             return true;
@@ -49,8 +53,12 @@ namespace _04_IntroFunktionen
             }
             //dings();
             Console.WriteLine(zahlIstPrimzahl);
-            
-            zahl = incr(Convert.ToInt32(Console.ReadLine()));
+
+            incr(zahl);         // --> incr(11)
+            incr(zahl + 1);     // --> incr(12)
+            incr(10);           // --> incr(10)
+            zahl = incr(zahl);
+            zahl = incr(Convert.ToInt32(Console.ReadLine()));  // --> incr(123)
 
             Console.WriteLine(zahl*zahl);
             Console.WriteLine(kreisflaeche(1.5));
diff --git a/04 Uebung_Di/04 Uebung_Di.csproj b/04 Uebung_Di/04 Uebung_Di.csproj
new file mode 100644
index 0000000..66fb473
--- /dev/null
+++ b/04 Uebung_Di/04 Uebung_Di.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_04_Uebung_Di</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/04 Uebung_Di/Program.cs b/04 Uebung_Di/Program.cs
new file mode 100644
index 0000000..d5aafaa
--- /dev/null
+++ b/04 Uebung_Di/Program.cs	
@@ -0,0 +1,36 @@
+using System;
+
+namespace _04_Uebung_Di
+{
+    class Program
+    {
+        static void Quadrat(int n)
+        {
+            for (int zeile = 0; zeile < n; zeile++)
+            {
+                for (int i = 0; i < n; i++)
+                {
+                    // Console.Write($"{zeile*n+i,3}");
+                    Console.Write("X");
+                }
+                Console.WriteLine();
+            }
+        }
+        static void Dreieck(int n)
+        {
+            for (int zeile = 1; zeile <= n; zeile++)
+            {
+                for (int i = 0; i < zeile; i++)
+                {
+                    Console.Write("X");
+                }
+                Console.WriteLine();
+            }
+        }
+        static void Main(string[] args)
+        {
+            Quadrat(5);
+            Dreieck(10);
+        }
+    }
+}
diff --git a/Prog1_WS2021_22.sln b/Prog1_WS2021_22.sln
index 1a54378..5348870 100644
--- a/Prog1_WS2021_22.sln
+++ b/Prog1_WS2021_22.sln
@@ -33,7 +33,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04 Do_While_Schleife", "04
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04 IntroFunktionen", "04 IntroFunktionen\04 IntroFunktionen.csproj", "{B22C3D1C-0375-451F-885F-51015FE6633C}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "04 Dreiecke_Mo_Ubg", "04 Dreiecke_Mo_Ubg\04 Dreiecke_Mo_Ubg.csproj", "{40E4407D-F055-463C-96E6-63F948EF19E7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04 Dreiecke_Mo_Ubg", "04 Dreiecke_Mo_Ubg\04 Dreiecke_Mo_Ubg.csproj", "{40E4407D-F055-463C-96E6-63F948EF19E7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04 Uebung_Di", "04 Uebung_Di\04 Uebung_Di.csproj", "{F17A5B61-A944-4719-8CBA-BBD034A73B96}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "04 Funktionen_2", "04 Funktionen_2\04 Funktionen_2.csproj", "{258D6D4B-BECB-44FA-A15A-2C310EBD9477}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -105,6 +109,14 @@ Global
 		{40E4407D-F055-463C-96E6-63F948EF19E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{40E4407D-F055-463C-96E6-63F948EF19E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{40E4407D-F055-463C-96E6-63F948EF19E7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F17A5B61-A944-4719-8CBA-BBD034A73B96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F17A5B61-A944-4719-8CBA-BBD034A73B96}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F17A5B61-A944-4719-8CBA-BBD034A73B96}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F17A5B61-A944-4719-8CBA-BBD034A73B96}.Release|Any CPU.Build.0 = Release|Any CPU
+		{258D6D4B-BECB-44FA-A15A-2C310EBD9477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{258D6D4B-BECB-44FA-A15A-2C310EBD9477}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{258D6D4B-BECB-44FA-A15A-2C310EBD9477}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{258D6D4B-BECB-44FA-A15A-2C310EBD9477}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
GitLab