From cded429cc9d8821ca5147d365ce21d346c867a63 Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Tue, 16 Jun 2015 08:32:00 +0200
Subject: [PATCH] for --> while exercise

---
 Exam/Sd1/For2while/exercise.xhtml             | 61 +++++++++++++++
 .../For2while/for2while_solution/.gitignore   |  5 ++
 Exam/Sd1/For2while/for2while_solution/pom.xml | 74 +++++++++++++++++++
 .../mi/sd1/for2while/Compute.java             | 39 ++++++++++
 .../mi/sd1/for2while/Compute2.java            | 40 ++++++++++
 5 files changed, 219 insertions(+)
 create mode 100644 Exam/Sd1/For2while/exercise.xhtml
 create mode 100644 Exam/Sd1/For2while/for2while_solution/.gitignore
 create mode 100644 Exam/Sd1/For2while/for2while_solution/pom.xml
 create mode 100644 Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute.java
 create mode 100644 Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute2.java

diff --git a/Exam/Sd1/For2while/exercise.xhtml b/Exam/Sd1/For2while/exercise.xhtml
new file mode 100644
index 000000000..6a50e0e0f
--- /dev/null
+++ b/Exam/Sd1/For2while/exercise.xhtml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xml:lang="de" xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title></title>
+  </head>
+
+  <body><h1>Inhalt</h1><p>Umwandlung einer <code>for(...){...}</code> in eine
+  <code>while(...){...}</code> oder eine <code>do {...} while (...)</code>
+  Schleife.</p><h1>Beschreibung</h1><p>Wir betrachten folgende
+  Klassenmethode:</p> <pre>/**
+    * Wie viele Jahre dauert es, aus einem gegebenem Anfangskapital bei fester Verzinsung einen bestimmten Endbetrag zu erreichen?
+    * 
+    * Beispiel: Bei 1.8% jährlicher Verzinsung dauert es 15 Jahre, bis aus einem Ausgangskapital
+    * von 1000.00 € durch Zinseszinsbildung erstmalig der Betrag von 1300.00€ erreicht bzw. überschritten wird.
+    *  
+    * @param ausgangsKapital
+    * @param gewuenschtesEndkapital  Dieser Wert muss größer als das Ausgangskapital sein.
+    * @param zinsatzJaehrlich  Die jährliche Verzinsung, z.B. 2.5%
+    * @return Die Dauer in Jahren, bis das Endkapital erstmalig erreicht oder überschritten wird.
+    * 
+    */
+   static public int anzahlJahre(double ausgangsKapital, final double gewuenschtesEndkapital, double zinsatzJaehrlich) {
+
+      final double zinsfaktor = (1 + zinsatzJaehrlich / 100);
+      
+      int jahr = 0;
+      for (; ausgangsKapital &lt; gewuenschtesEndkapital; ausgangsKapital *= zinsfaktor) {
+         jahr++;
+      }
+      return jahr;
+   }</pre><h1>Aufgabe</h1><p>Sie sollen die <code>for(...)</code> ersetzen.
+  Mögliche Alternativen sind:</p><ul>
+      <li><code>while(...){...}</code></li>
+
+      <li><code>do {...} while(...)</code></li>
+    </ul><p>Entscheiden Sie zunächst, welche dieser beiden Alternativen
+  sinnvoller ist und <strong>begründen Sie diese Entscheidung</strong> in
+  einem Java Kommentar Ihrer Implementierung. Diese Begründung ergibt bereits
+  Punkte.</p><p>Ersetzen Sie dann in obigem Code die
+  <code>for(...){...}</code> Schleife entsprechend. Sie können dabei wie folgt
+  vorgehen:</p><ol>
+      <li>Starten Sie Ihre Eclipse Umgebung.</li>
+
+      <li>Legen Sie ein Projekt an. Erstellen Sie eine Klasse
+      <code>Zinseszins</code> mit einer <code>main(...)</code> Methode.</li>
+
+      <li>Kopieren Sie obige Methode <code>anzahlJahre(...)</code> in die
+      Klasse <code>Zinseszins</code> und duplizieren Sie diese unter dem Namen
+      <code>anzahlJahreOrig(...)</code>. Die Originalimplementierung bleibt
+      dadurch immer verfügbar.</li>
+
+      <li>Wandeln Sie die <code>for(...){...}</code> Schleife um. Sie können
+      die Methoden <code>anzahlJahreOrig(...)</code> und
+      <code>anzahlJahre(...)</code> testweise mit geeigneten Parametern
+      aufrufen, um die Korrektheit zu überprüfen.</li>
+
+      <li>Laden Sie die komplette Klasse <code>Zinseszins.java</code> als
+      Lösung in das Klausursystem hoch.</li>
+    </ol><p>Hinweis: Nicht übersetzbarer Code wird nicht bewertet.</p></body>
+</html>
diff --git a/Exam/Sd1/For2while/for2while_solution/.gitignore b/Exam/Sd1/For2while/for2while_solution/.gitignore
new file mode 100644
index 000000000..660be2a5f
--- /dev/null
+++ b/Exam/Sd1/For2while/for2while_solution/.gitignore
@@ -0,0 +1,5 @@
+.project
+.classpath
+/.settings/
+/target/
+A1.log
\ No newline at end of file
diff --git a/Exam/Sd1/For2while/for2while_solution/pom.xml b/Exam/Sd1/For2while/for2while_solution/pom.xml
new file mode 100644
index 000000000..449a06721
--- /dev/null
+++ b/Exam/Sd1/For2while/for2while_solution/pom.xml
@@ -0,0 +1,74 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sd1</groupId>
+	<artifactId>for2while</artifactId>
+	<version>0.9</version>
+	<packaging>jar</packaging>
+
+	<name>For2while</name>
+
+	<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.10.1</version>
+				<configuration />
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<configuration>
+					<transformers>
+						<transformer
+							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+							<manifestEntries>
+								<Main-Class>de.hdm_stuttgart.mi.sda1.catalog2sax.App</Main-Class>
+							</manifestEntries>
+						</transformer>
+					</transformers>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute.java b/Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute.java
new file mode 100644
index 000000000..e006c9b85
--- /dev/null
+++ b/Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute.java
@@ -0,0 +1,39 @@
+package de.hdm_stuttgart.mi.sd1.for2while;
+
+public class Compute {
+
+   /**
+    * @param args Unused
+    */
+   public static void main(String[] args) {
+      
+      double ausgangskapital = 1000,
+             gewuenschtesKapital = 1300,
+             jahresZins = 1.8 /* in Prozent*/;
+      
+      System.out.format("Es braucht %d Jahre", anzahlJahre(ausgangskapital, gewuenschtesKapital, jahresZins));
+      
+   }
+   
+   /**
+    * Wie viele Jahre dauert es, aus einem gegebenem Anfangskapital bei fester Verzinsung einen bestimmten Endbetrag zu erreichen?
+    * 
+    * Beispiel: Bei 1.8% jährlicher Verzinsung dauert es 15 Jahre, bis aus einem Ausgangskapital
+    * von 1000.00 € durch Zinseszinsbildung erstmalig der Betrag von 1300.00€ erreicht bzw. überschritten wird.
+    *  
+    * @param ausgangsKapital
+    * @param gewuenschtesEndkapital  Dieser Wert muss größer als das Ausgangskapital sein.
+    * @param zinssatzJaehrlich  Die jährliche Verzinsung, z.B. 2.5%
+    * @return Die Dauer in Jahren, bis das Endkapital erstmalig erreicht oder überschritten wird.
+    * 
+    */
+   static public int anzahlJahre(double ausgangsKapital, final double gewuenschtesEndkapital, double zinssatzJaehrlich) {
+      final double zinsfaktor = (1 + zinssatzJaehrlich / 100);
+      int jahr = 0;
+      do {
+         jahr++;
+         ausgangsKapital *= zinsfaktor;
+      } while (ausgangsKapital < gewuenschtesEndkapital);
+      return jahr;
+   }
+}
diff --git a/Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute2.java b/Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute2.java
new file mode 100644
index 000000000..db11e0b88
--- /dev/null
+++ b/Exam/Sd1/For2while/for2while_solution/src/main/java/de/hdm_stuttgart/mi/sd1/for2while/Compute2.java
@@ -0,0 +1,40 @@
+package de.hdm_stuttgart.mi.sd1.for2while;
+
+public class Compute2 {
+
+   /**
+    * @param args Unused
+    */
+   public static void main(String[] args) {
+      
+      double ausgangskapital = 1000,
+             gewuenschtesKapital = 1300,
+             jahresZins = 1.8 /* in Prozent*/;
+      
+      System.out.format("Es braucht %d Jahre", anzahlJahre(ausgangskapital, gewuenschtesKapital, jahresZins));
+      
+   }
+   
+   /**
+    * Wie viele Jahre dauert es, aus einem gegebenem Anfangskapital bei fester Verzinsung einen bestimmten Endbetrag zu erreichen?
+    * 
+    * Beispiel: Bei 1.8% jährlicher Verzinsung dauert es 15 Jahre, bis aus einem Ausgangskapital
+    * von 1000.00 € durch Zinseszinsbildung erstmalig der Betrag von 1300.00€ erreicht bzw. überschritten wird.
+    *  
+    * @param ausgangsKapital
+    * @param gewuenschtesEndkapital  Dieser Wert muss größer als das Ausgangskapital sein.
+    * @param zinsatzJaehrlich  Die jährliche Verzinsung, z.B. 2.5%
+    * @return Die Dauer in Jahren, bis das Endkapital erstmalig erreicht oder überschritten wird.
+    * 
+    */
+   static public int anzahlJahre(double ausgangsKapital, final double gewuenschtesEndkapital, double zinsatzJaehrlich) {
+
+      final double zinsfaktor = (1 + zinsatzJaehrlich / 100);
+      
+      int jahr = 0;
+      for (; ausgangsKapital < gewuenschtesEndkapital; ausgangsKapital *= zinsfaktor) {
+         jahr++;
+      }
+      return jahr;
+   }
+}
-- 
GitLab