diff --git a/Exam/Sd1/For2while/exercise.xhtml b/Exam/Sd1/For2while/exercise.xhtml new file mode 100644 index 0000000000000000000000000000000000000000..6a50e0e0fecb55d93b2cbbff8e52607098197c62 --- /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 < 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 0000000000000000000000000000000000000000..660be2a5fdb9e3019ef8fc737d47fba56fc32ff3 --- /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 0000000000000000000000000000000000000000..449a06721c51b70421bcad7b21b0a9c3596d2fef --- /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 0000000000000000000000000000000000000000..e006c9b85a31d427a323cd7400aef815ffebb65f --- /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 0000000000000000000000000000000000000000..db11e0b8892d1c5ddba5f6b6652978da52098484 --- /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; + } +}