Hinweise zur Übung 4 (SWE 1)
-
Bei der Aufgabe 2 dürfen (ausser Math.abs()) keine Funktionen der
Klasse "Math" verwendet werden.
Zum Testen (Vergleich der selbst berechneten Werte mit den genauen
Werten) dürfen aber Math.sin() und Math.cos() verwendet werden.
-
Zu Aufgabe 1: Man kann denselben Algorithmus auch zum Dechiffrieren der
chiffrierten Nachricht verwenden. Das erleichtert (automatisiert) das Testen.
Beispiel: Ein mit dem Buchstaben 'B' (Verschiebung um +1) codierter
Text kann mit dem Buchstaben 'Z' (Verschiebung um -1) wieder dechiffriert
werden.
-
Vorsicht! Ein <Enter> (d.h. ein Zeilenumbruch) wird beim Einlesen eines
Zeichens mit "read()" ebenfalls als ein Zeichen interpretiert. D.h. liest
man zwei Zeichen ein und gibt sie anschliessend wieder aus, sieht das Ergebnis
etwa so aus (Zugehöriges Programm):
Programmstart.
Eingabe: a<Enter>
Ausgabe: a //
<= Hier wird der bei der Eingabe eingelesene Zeilenumbruch mit ausgegeben
// <= Diese Leerzeile resultiert vom zusaetzlich
ausgegebenen Zeilenumbruch
Programmende.
...
Programmstart.
Eingabe: ab
Ausgabe: ab
Programmende.
-
"Zeichenweises Einlesen" bedeutet, dass man jeweils "read()" aufruft, um
ein Zeichen einzulesen. Dabei ist es nicht gefordert, jedes Zeichen mit
<Enter> zu bestaetigen, sondern es kann ein durchgaengiger Text eingegeben
werden und am Ende wird <Enter> gedrueckt.
Bem.: Wenn man "readLine()" verwendet, wuerde es "Zeilenweises Einlesen"
bedeuten, ausserdem wurden Strings in der Übung noch nicht durchbesprochen.
-
Aufgabe 1: Versucht nicht die eingerahmte, zweispaltige Tabelle neben der
Übungsangabe nachzubilden, sie ist eher als Beispiel gedacht. Eine
sinnvollere Variante für die Ein-/Ausgabe wäre z.B.:
c Attack at dawn!# // Eingabe
Cvvcem cv fcyp! //
Ausgabe (des chiffrierten Textes)
oder
Y Cvvcem cv fcyp!# // Eingabe
Attack at dawn! //
Ausgabe (des (de-)chiffrierten Textes)
So werden die Tests auch lesbarer und man braucht nicht seitenweise
Tests um die Grenz- und Sonderfälle auszutesten.
-
Aufgabe 2: Die Fehlerschranke ist folgendermassen definiert:
Ändert sich die der für Cosinus berechnete Wert nur mehr
um einen Wert, der kleiner ist als die Fehlerschranke, so hat das Ergebnis
bereits die geforderte Genauigkeit. Das Ergebnis kann nun ausgegeben werden.
Die Fehlerschranke kann je nach Belieben absolut oder relativ gewaehlt
werden.
Eine in der Technik häufig verwendete Variante (relativer Fehler)
ist z.B. (Wi
... berechneter Wert für Iterationsschrit i):
Fehler = |Wi
- Wi-1| / Wi
= |delta Wi| / Wi
Wenn Fehler < Fehlerschranke => Abbruch
-
Aufgabe 1: Es ist nicht erlaubt für das Einlesen einen String zu verwenden.
Erstens wurden Strings noch nicht besprochen und zweitens geht es mit "read()"
genausogut. Als Hinweis dazu: Das read() blockiert so lange, bis die ganze
Zeile eingegeben wurde. D.h. es ist nicht notwendig irgendetwas selbst
zu buffern. Es ist somit am einfachsten die Standardleseschleife,
wie sie in der Übung vorgestellt wurde entsprechend zu adaptieren.
-
Es sei darauf hingewiesen, dass es auch noch allgemeine
Übungshinweise gibt. Bei Nichteinhaltung dieser Übungshinweise
gibt es u.U. Punkteabzüge!
Man beachte auch die 3 Punkte unter: Was soll eine Übung enthalten?
Zum Beispiel:
-
Gibt es eine Lösungsidee? (Nein, das ist nicht die Angabe, oder ein
Kommentar im Programm)
-
Sind sinnvolle Testfälle vorhanden?
Das sind beides Dinge, die zu (vielen) Punkteabzügen führen,
ohne dass es viel Aufwand gewesen wäre sie zu einem bereits geschriebenen
Programm mitzuliefern (Man hat sie ja sowieso machen müssen).