diff --git a/sheets/2/exercise-1.tex b/sheets/2/exercise-1.tex index 32bb86b3..b849b911 100644 --- a/sheets/2/exercise-1.tex +++ b/sheets/2/exercise-1.tex @@ -1,11 +1,14 @@ %!TEX root = ./jvk-blatt2.tex + \excercise{Totoro Enters the Game} +\label{ex1} + \begin{Infobox}[Benennung der Task Klassen] Wie du wahrscheinlich festgestellt hast, haben wir ein Namensschema für die Klassen.\\ - Also für Blatt \textbf{X} und Aufgabe \textbf{Y} sollst du die Klassen \lstinline{SheetXTaskY} und \lstinline{SheetXTaskYVerifier} nutzen.\\ + Für Blatt \textbf{X} und Aufgabe \textbf{Y} sollst du die Klassen \lstinline{SheetXTaskY} und \lstinline{SheetXTaskYVerifier} nutzen.\\ Ebenso musst du für jede Aufgabe in der Main Klasse die \lstinline{SheetXTaskY} und \lstinline{SheetXTaskYVerifier} anpassen. Deinen Code musst du (fast) immer in \lstinline{SheetXTaskY} schreiben. \end{Infobox} @@ -26,10 +29,13 @@ PlayfieldModifier pm = new PlayfieldModifier(sim.getPlayfield()); Totoro totoro = new Totoro(); pm.placeEntityAt(totoro, new Position(1,1)); + +} \end{lstlisting} Überprüfe im \fbox{Task Status} Tab, ob dein Code korrekt funktioniert. - \item Damit sich Totoro bewegt, musst du ihm eines der folgenden Kommandos geben und die Simulation mit dem Play Button starten. Im Simulationsfenster musst du dann den Play Button links oben drücken. \\ + \item Damit sich Totoro bewegt, musst du ihm eines der folgenden Kommandos geben und die Simulation mit dem Play Button starten. + Im Simulationsfenster musst du dann den Play Button links oben drücken. \\ \textbf{Tipp:} Neben dem Play Button im Simulationsfenster ist ein Geschwindigkeitsschieberegler, mit dem du die Simulationsgeschwindigkeit anpassen kannst. \begin{lstlisting}[firstnumber=20] @@ -40,24 +46,26 @@ Teste alle 3 Kommandos.\\ \item Mit dem gegebenen Kommando, kann sich Totoro nur nach rechts drehen.\\ - Finde un einen Weg, wie du Totoro dazu bringen kannst, sich nach links (oder nach hinten) umzudrehen? + Finde nun einen Weg, wie du Totoro dazu bringen kannst, sich nach links (oder nach hinten) zu drehen? \textbf{Hinweis:} Du kannst Kommandos mehrfach hintereinander aufrufen. +\newpage \item Gib Totoro nun die folgenden Anweisungen: { \setenumerate{label=\roman*.} \begin{enumerate} \item Bewege dich 2 Schritte geradeaus -\item Dann drehe dich nach rechts +\item Drehe dich nach rechts \item Gehe einen Schritt vor \item Drehe dich nach links \item Gehe vier Schritte geradeaus \item Drehe dich nach rechts -\item Als Letztes gehe einen Schritt geradeaus +\item Gehe als letztes einen Schritt geradeaus \end{enumerate} } -Überprüfe im \fbox{Task Status} Tab, ob du Totoro die richtigen Kommandos gegeben hast, dazu musst du darauf achten, dass Totoro nur diese Kommandos ausführt. +Überprüfe im \fbox{Task Status} Tab, ob du Totoro die richtigen Kommandos gegeben hast. +Achte darauf, dass Totoro genau die in der Aufgabe genannten Kommandos ausführt. \end{enumerate} diff --git a/sheets/2/exercise-2.tex b/sheets/2/exercise-2.tex index 68c927fb..1938da70 100644 --- a/sheets/2/exercise-2.tex +++ b/sheets/2/exercise-2.tex @@ -3,10 +3,10 @@ \excercise{Exceptions} \begin{enumerate} - \item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task2} und \lstinline{Sheet2Task2Verifier}) und mache dich mit dieser vertraut. + \item Instanziiere die Simulation, wie bereits gelernt (\lstinline{Sheet2Task2} und \lstinline{Sheet2Task2Verifier}), und mache dich mit dieser vertraut. \item Betrachte die Klasse \lstinline{Sheet2Task2} mit der Operation \lstinline{run} an der markierten Stelle. - Überlege dir wie du ein Hindernis an einer Stelle, sodass Tutoro den Baum nicht erreicht, platzieren kannst und platziere es dort. Falls du nicht weißt wie man ein Hindernis platziert, schaue dir nochmal Blatt 1 Aufgabe 5 oder die Klasse \lstinline{Sheet2Task2} genauer an. + Überlege dir wie du ein Hindernis an einer Stelle platzieren kannst, sodass Tutoro den Baum nicht erreicht, und platziere es dort. Falls du nicht weißt, wie man ein Hindernis platziert, schaue dir nochmal Blatt 1 Aufgabe 5 oder die Klasse \lstinline{Sheet2Task2} genauer an. Was passiert, wenn man jetzt die Simulation wie zuvor ausführt?\\ @@ -16,11 +16,13 @@ \begin{Infobox}[Exception] Eine Exception ist ein Fehler, der beim Ausführen des Programmes passieren kann, wenn z.B. unvorhergesehene oder verbotene Sachen passieren.\\ -\textbf{Notiz:} Es gibt in PSE später genauere Unterscheidungen zwischen verschiedene Arten von Exceptions, Errors usw. wir wollen das ganze hier mal vereinfacht betrachten. Dabei werden wir allerdings teilweise nicht hundertprozentig genau sein.\\ +\textbf{Notiz:} Es wird in der Vorlesung PSE später genauer zwischen verschiedene Arten von Exceptions und Errors unterschieden. +Für unsere Zwecke reicht es zunächst, das ganze etwas vereinfacht zu betrachten. +Dies kann jedoch zu Ungenauigkeiten führen. Als Nächstes wollen wir den Aufbau einer Exception genauer verstehen. Überlege dazu, was der folgende Programmausschnitt macht: - + \begin{lstlisting}[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=1.5em] public class Main{ //Programmeinstieg @@ -34,12 +36,12 @@ } } \end{lstlisting} - \textbf{Exkurs:} Operatoren sind in eine Programmiersprache eingebaute Funktion, die durch ein Zeichen repräsentiert werden. + \textbf{Exkurs:} Operatoren sind in Programmiersprachen eingebaute Funktionen, die durch ein Zeichen repräsentiert werden. Beispielsweise können wir zwei Zahlen durch den \texttt{-} Operator voneinander abziehen, z.B. mit \texttt{42 - 73}. Damit wir das Ergebnis auch ansehen können und die Rechnung nicht nur ausgewertet wird und dann verschwindet, kann man es entweder in einer Variable speichern oder als Argument in einer Funktion verwenden. -Wenn man beispielsweise das Ergebnis der Subtraktion oben auf der Konsole ausgeben möchte, kann man diese einfach als Parameter in die runden Klammern der Java-internen Funktion \lstinline{System.out.println()} geben. +Wenn man beispielsweise das Ergebnis der Subtraktion oben auf der Konsole ausgeben möchte, kann man diese einfach als Parameter in die runden Klammern der javainternen Funktion \lstinline{System.out.println()} geben. Die meisten Programmiersprachen haben eingebaute, einfache arithmetische Operatoren wie \texttt{+}, \texttt{-}, \texttt{*} oder \texttt{/}.\\ - +\newpage Im oberen Programmausschnitt lässt sich erkennen, dass in Zeile 9 der Programmausführung durch 0 geteilt wird.\\ Dieses ungewollte (''verbotene'') Verhalten wird bei der Programmausführung durch die folgende Exception ersichtlich: \begin{lstlisting}[keywords={}, breaklines=true, numbers=none] @@ -53,10 +55,12 @@ \begin{enumerate}[label=\roman*)] \item Art der Exception: Diese kann in der ersten Zeile abgelesen werden.\\ In unserem Beispiel handelt es sich hier um eine \lstinline{ArithmeticException}. -\item Nachricht der Exception: Diese befindet sich hinter der Exceptionart und soll dem Programmierer ggf. mehr Informationen über den Fehler selbst geben.\\ +\item Nachricht der Exception: Diese befindet sich hinter der Exceptionart und soll dem Programmierer mehr Informationen über den Fehler selbst geben.\\ In unserem Fall ist die Nachricht \lstinline{"/ by zero"}. -\item Fehlerstelle im Programm: Der Stacktrace der Exception beinhaltet Informationen, wo im Programm die Exception geflogen also passiert ist. Genauer, welche Klassen wo Fehler geworfen haben und so den eigentlichen Fehler produziert haben.\\ -Hier interessiert uns fürs Erste nur die zweite Zeile. In unserem Beispiel deutet die zweite Zeile darauf hin, dass die Exception explizit in der \lstinline{Main} Klasse in der \lstinline{divide} +\item Fehlerstelle im Programm: Der Stacktrace der Exception beinhaltet Informationen, an welcher Stelle im Programm die Exception geflogen, also passiert, ist. +Genauer, welche Klassen an welcher Stelle Fehler geworfen haben und so den eigentlichen Fehler produziert haben.\\ +Hier interessiert uns fürs Erste nur die zweite Zeile. +In unserem Beispiel deutet die zweite Zeile darauf hin, dass die Exception explizit in der \lstinline{Main} Klasse in der \lstinline{divide} Operation in Zeile 9 geflogen ist, was wiederum Auswirkungen auf die Main Funktion hatte. \end{enumerate} @@ -65,16 +69,21 @@ \begin{enumerate}[label=\alph*)] \setcounter{enumi}{2} - \item Wie wir gelernt haben, sind Exceptions ein Anzeichen, das etwas passiert ist was nicht passieren sollte, jetzt wollen wir die Exception verhindern.\\ -Dazu benutzen wir die Technik des Auskommentierens, die daraus besteht // vor eine Zeile Code zu schreiben, damit dieser Code beim Ausführen übersprungen wird.\\ -Kommentiere in \lstinline{Sheet2Task2} so lange \lstinline{.move()} Kommandos aus, bis die Exception nicht mehr auftritt. + \item Wie wir gereade gelernt haben, sind Exceptions ein Anzeichen, dass etwas passiert ist was nicht passieren sollte. + Jetzt wollen wir die Exception verhindern.\\ +Dazu benutzen wir die Technik des Auskommentierens. +Für einzelige Kommentare reicht es // vor eine Zeile zu schreiben, damit dieser Code beim Ausführen übersprungen wird. +Mit /* Kommentar */ können wir mehrere Zeilen Code auskommentieren. + +Kommentiere jetzt in \lstinline{Sheet2Task2} so lange \lstinline{.move()} Kommandos aus, bis die Exception nicht mehr auftritt. Spielt die Reihenfolge, in der du die Kommandos auskommentierst eine Rolle für das Ergebnis? -\item Kommentiere erstmal wieder alle Zeilen ein. + +\item Kommentiere ersteinmal alle Zeilen wieder ein. Kannst du trotzdem verhindern, dass die Exception auftritt? Wenn ja wie? -\textbf{Hinweis}: In Aufgabe 1 hast du noch ein weiteres Kommando kennengelernt, mit dem du Tutoro bewegen kannst. +\textbf{Hinweis}: In \ref{ex1} hast du noch ein weiteres Kommando kennengelernt, mit dem du Tutoro bewegen kannst. \item \optional Welche \q{linenumber} aus dem obigen Stacktrace ändert sich, wenn man zwischen den \lstinline{totoro.move()} Aufrufen jeweils Leerzeilen einfügt? \end{enumerate} diff --git a/sheets/2/exercise-3.tex b/sheets/2/exercise-3.tex index bf19109b..7834d4ee 100644 --- a/sheets/2/exercise-3.tex +++ b/sheets/2/exercise-3.tex @@ -3,41 +3,44 @@ \excercise{Vor- und Nachbedingungen} In dieser Aufgabe wollen wir eine neue Funktion von Totoro einführen. -Totoro kann Nüsse mit den Kommandos \lstinline{collectNut()} und \lstinline{dropNut()} aufheben und niederlegen. +Totoro kann Nüsse mit den Kommandos \lstinline{collectNut()} und \lstinline{dropNut()} aufheben und ablegen. \begin{enumerate} \item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task3} und \lstinline{Sheet2Task3Verifier}) und mache dich mit dieser vertraut. \item Auf dem Spielfeld siehst du viele Nüsse. Wenn Totoro auf einem Feld mit Nuss steht, kann er mit dem Kommando \lstinline{collectNut()} eine Nuss aufheben.\\ Lass Totoro nun alle Nüsse auf dem Spielfeld aufheben. -\item Mit dem Kommando \lstinline{dropNut()} kannst du eine Nuss wieder auf dem Spielfeld ablegen, auf welchem sich Totoro befindet.\\ +\item Mit dem Kommando \lstinline{dropNut()} kannst du eine Nuss wieder auf dem Feld ablegen, auf welchem sich Totoro befindet.\\ Verwende das \lstinline{dropNut()} Kommando, um alle Nüsse die Totoro aufgesammelt hat auf das Feld (3,3) zu legen.\\ -\textbf{Hinweis:} auf dem Spielfeld liegen genau 6 Nüsse. +\textbf{Hinweis:} Auf dem Spielfeld liegen genau 6 Nüsse. \end{enumerate} \begin{Infobox}[Vor- und Nachbedingungen] - Damit Operationen richtig funktionieren, müssen oft bestimme Bedingungen gelten, bevor man diese aufruft.\\ -Z.B. darf sich bei dem \lstinline{move()} Kommando, wie wir in der letzten Aufgabe gelernt haben, vor dem Spieler kein Busch befinden.\\ -Da diese Bedingungen gelten müssen bevor man die Operation aufruft, nennt man sie Vorbedingungen.\\ -Meistens findet man diese Vorbedingungen im Javadoc Kommentar (Dokumentation) der Operation. Welchen man sehen kann, wenn man mit der Maus, über dem Funktionsnamen hovert.\\ + Damit Operationen richtig funktionieren, müssen oft bestimme Bedingungen gelten, bevor man diese aufruft. +Zum Beispiel darf sich bei dem \lstinline{move()} Kommando aus der letzten Aufgabe vor dem Spieler kein Busch befinden. +Da diese Bedingungen gelten müssen, bevor man die Operation aufruft, nennt man sie Vorbedingungen.\\ +Meistens findet man diese Vorbedingungen im Javadoc Kommentar (Dokumentation) der Operation. +Diesen kann man sehen, wenn man mit der Maus über dem Funktionsnamen hovert.\\ -So wie bei Vorbedingungen bestimmte Zustände gelten müssen bevor man die Operation aufrufen darf, sind Nachbedingungen Zustände die nach einer Operation gelten.\\ -Nachdem Ausführen von \lstinline{move()} hat sich Totoro eine Position nach vorne (in seine Blickrichtung) bewegt.\\ -Das gilt allerdings, nur wenn vor dem Aufruf von \lstinline{move()} die Vorbedingungen erfüllt sind z.B. es darf sich kein Busch vor Totoro befinden.\\ +So wie bei Vorbedingungen bestimmte Zustände gelten müssen, bevor man die Operation aufrufen darf, sind Nachbedingungen Zustände, die nach einer Operation gelten.\\ +Nachdem Ausführen von \lstinline{move()} hat sich Totoro ein Feld nach vorne (in seine Blickrichtung) bewegt.\\ +Das gilt allerdings nur, wenn vor dem Aufruf von \lstinline{move()} die Vorbedingungen erfüllt sind, wie zum Beispiel, dass sich kein Busch vor Totoro befindet.\\ \end{Infobox} + +\newpage + \begin{Infobox}[JavaDoc] - Im Zusammenhang mit Vor- und Nachbedingungen, ist wichtig zu erwähnen, dass diese neben einer detaillierteren Beschreibung der Funktion im Javadoc einer Operation zu finden sein sollten. + Im Zusammenhang mit Vor- und Nachbedingungen, ist wichtig zu erwähnen, dass diese, neben einer detaillierteren Beschreibung der Funktion, im Javadoc einer Operation zu finden sein sollten. JavaDoc befindet sich als spezieller Kommentar in Quellcode vor einer Operation oder Klasse. Wie andere Kommentare wird er nicht als Programmcode ausgeführt, sondern dient zur Dokumentation der Funktion der zugeordneten Elemente. -In den letzten Aufgaben haben wir bis jetzt immer recht \enquote{einfache} Methoden verwendet, deren Zweck Du vielleicht ganz gut aus dem Quellcode oder Beispielen ableiten konntest. -Beim Schreiben von eigenen Methoden ist es daher sehr wichtig darauf zu achten, dass der Name der Funktion und die Werte, die diese ''empfangen'' kann, für sich sprechende Namen haben. -Vielleicht sind Dir die Funktion von machen Methoden allerdings auch noch nicht ganz klar geworden oder der Name hat zu wenig Kontext hergegeben, um die Funktion der Methode -zu verstehen. -Genau hier setzt die Dokumentation in Form von JavaDoc ein. +In den letzten Aufgaben haben wir bis jetzt immer recht \enquote{einfache} Methoden verwendet, deren Zweck du vielleicht ganz gut aus dem Quellcode oder Beispielen ableiten konntest. +Beim Schreiben von eigenen Methoden ist es daher sehr wichtig darauf zu achten, dass der Name der Funktion und die Werte, die diese ''empfangen'' kann, aussagekräftige und eindeutige Namen haben. +Vielleicht sind dir die Funktion von machen Methoden allerdings auch noch nicht ganz klar geworden oder der Name hat dir zu wenig Kontext gegeben, um die Funktionsweise der Methodezu verstehen. +Genau hier wird die Dokumentation in Form von JavaDoc wichtig. \begin{lstlisting}[numbers=none] /** @@ -56,21 +59,24 @@ Ein Javadoc Kommentar unterscheidet sich nur dahingehend von einem normalen Kommentar, dass dieser mit \lstinline{/**} statt \lstinline{/*} anfängt.\\ -Der erste Satz ist eine kurze Beschreibung was die Operation macht. -Gefolgt davon kommt eine ausführliche Beschreibung der Operation oder Klasse.\\ +Der erste Satz ist eine kurze Beschreibung, was die Operation macht. +Gefolgt davon kommt eine ausführliche Beschreibung der Operation oder Klasse. Der Kommentar sollte alles enthalten, was man jemals über die Operation wissen muss. -Im Javadoc Kommentar sollen dabei insbesondere wie wir vorhin schon erwähnt haben, Vorbedingungen beschrieben werden, also was der Programmierer beachten muss bevor er die Operation nutzen darf. -Wenn dies nicht passiert oder der JavaDoc ungenau ist, ist es sehr wahrscheinlich das daraus ein Bug entstehen kann. +Im Javadoc Kommentar sollen dabei insbesondere Vorbedingungen beschrieben werden. +Wenn dies nicht passiert oder der JavaDoc ungenau ist, ist es sehr wahrscheinlich, dass daraus ein Bug entsteht. -IntelliJ kann diese speziellen JavaDoc-Kommentare erkennen und anzeigt, wenn man mit der Maus im Quelltext über einen Aufruf einer Operation fährt. -Außerdem kann man im Quellcode durch \lstinline{Ctrl + Linksklick} auf Operationen oder Klassen zu den Definitionen von diesen gelangen, wo man auch die zugehörige JavaDoc finden sollte. +IntelliJ kann diese speziellen JavaDoc-Kommentare erkennen und anzeigen, wenn man mit der Maus im Quelltext über einen Aufruf einer Operation fährt. +Außerdem kann man im Quellcode durch \lstinline{Ctrl + Linksklick} auf Operationen oder Klassen zu den Definitionen von diesen gelangen, um die zugehörige Javadoc Letzteres kann man natürlich auch nutzen, um die Funktion einer Operation durch das Lesen des Quellcodes besser zu verstehen. \end{Infobox} \begin{enumerate}\setcounter{enumi}{3} \item Die Kommandos \lstinline{collectNut()} und \lstinline{dropNut()} funktionieren nicht immer. - Welche Bedingungen müssen stimmen damit du die Kommandos korrekt benutzen kannst und wann funktionieren sie nicht?\\ - \textbf{Tipp}: Überprüfe deine Vermutung auch auf dem Spielfeld.\\ + + Welche Bedingungen müssen gelten, damit du die Kommandos korrekt benutzen kannst? + Unter welchen Bedingungen kannst du sie nicht fehlerfrei benutzen? + + Überprüfe deine Vermutung auf dem Spielfeld. \end{enumerate} diff --git a/sheets/2/exercise-4.tex b/sheets/2/exercise-4.tex index 0839941e..3c55bda9 100644 --- a/sheets/2/exercise-4.tex +++ b/sheets/2/exercise-4.tex @@ -10,21 +10,22 @@ \end{enumerate} \begin{Infobox}[Bool'sche Werte] - Um if-Verzweigung verstehen zu können, müssen wir uns zuerst Bool'sche Werte anschauen. Bool'sche Werte sind Variablen oder auch Rückgabewerte von Funktionen, welche nur den Wert \lstinline{true} oder \lstinline{false} (also wahr oder falsch) annehmen können. \\ + Um if-Verzweigung verstehen zu können, müssen wir uns zuerst bool'sche Werte anschauen. + Bool'sche Werte sind Variablen oder auch Rückgabewerte von Funktionen, welche nur den Wert \lstinline{true} oder \lstinline{false} (wahr oder falsch) annehmen können. \\ Im Quellcode hat jeder Wert, ob Rückgabe einer Funktion oder eben Variablen, einen Typ. Dieser Typ bestimmt, welche Werte für diesen Wert zulässig sind. Beispielsweise gibt es einfachen - primitive - Werte wie zum Beispiel Ganzzahlen oder Zeichenketten, die wir bisher sogar schon verwendet haben. -Eine Zeichenkette (in Programmiersprachen in der Regel als \lstinline{String} bezeichnet) kann beispielsweise den Inhalt \lstinline{''Hello World''} haben. -Diesen Wert allerdings in einer Variable, die nur Ganzzahlen speichert (= \lstinline{int} für Integer) zu speichern, macht allerdings wenig Sinn. +Eine Zeichenkette, in Programmiersprachen in der Regel als \lstinline{String} bezeichnet, kann beispielsweise den Inhalt \lstinline{''Hello World''} haben. +Diesen Wert allerdings in einer Variable, die nur Ganzzahlen speichert (= \lstinline{int} für Integer), zu speichern, macht allerdings wenig Sinn. Genau wie \lstinline{int} gibt es noch ein paar andere primitive Typen, welche häufig verwendet werden. Am häufigsten kommen dabei wohl bool'sche Werte mit dem zugehörigen primitiven Typ \lstinline{boolean} zur Verwendung. -Da es sich um einen primitiven Typ handelt, wird er genau wie \lstinline{int} in kleingeschrieben.\\ +Da es sich um einen primitiven Typ handelt, wird er genau wie \lstinline{int} kleingeschrieben.\\ -Es ist wichtig zu erwähnen, dass in Java \lstinline{int} und \lstinline{Integer} dieselben Werte speichern können, aber nicht derselbe Typ sind. +In Java können \lstinline{int} und \lstinline{Integer} dieselben Werte speichern, sind aber nicht der selbe Typ sind. Den genauen Unterschied zwischen den beiden Typen werdet ihr noch in der PSE (Programmierung und Softwareentwicklung) kennenlernen. -Die Funktion \lstinline{totoro.canMove()} zum Beispiel gibt den bool'schen Wert \lstinline{true} zurück, wenn Totoro einen Schritt in seine Blickrichtung gehen kann, also auf diesem Feld sind keine Hindernisse. +Die Funktion \lstinline{totoro.canMove()} zum Beispiel gibt den bool'schen Wert \lstinline{true} zurück, wenn Totoro einen Schritt in seine Blickrichtung gehen kann. Die \lstinline{canMove}-Methode hat also den Rückgabewert \lstinline{boolean}. \end{Infobox} @@ -38,7 +39,8 @@ } \end{lstlisting} - Das beispielhafte IF-Statement bedeutet informal, dass falls \lstinline{totoro.canMove()} den bool'schen Wert \lstinline{true} hat, wird \lstinline{totoro.move()} ausgeführt. Falls \lstinline{totoro.canMove()} den bool'schen Wert \lstinline{false} hat, wird der Code in den geschweiften Klammern übersprungen. + Das beispielhafte IF-Statement bedeutet informel, dass wenn \lstinline{totoro.canMove()} den bool'schen Wert \lstinline{true} hat, wird \lstinline{totoro.move()} ausgeführt. + Falls \lstinline{totoro.canMove()} den bool'schen Wert \lstinline{false} hat, wird der Code in den geschweiften Klammern übersprungen. \begin{lstlisting}[breaklines=true, numbers=none] if (totoro.canMove()) { @@ -48,27 +50,29 @@ } \end{lstlisting} - Nun wurde noch ein ELSE-Statement angehängt. Dadurch dient der Code als Verzweigung mit der Bedingung, dass falls etwas gilt, mache etwas, falls nicht, mache irgendwas anderes. In unserem Beispiel, falls \lstinline{totoro.canMove()} den bool'schen Wert \lstinline{false} hat, wird auf der Konsole der Text "Totoro is to big to fit through the bush" ausgegeben.\\ + Nun wurde noch ein ELSE-Statement angehängt. + Dadurch dient der Code als Verzweigung mit der Bedingung, dass falls etwas gilt, mache etwas, falls nicht, mache irgendwas anderes. + In unserem Beispiel, falls \lstinline{totoro.canMove()} den bool'schen Wert \lstinline{false} hat, wird auf der Konsole der Text ,,Totoro is to big to fit through the bush'' ausgegeben.\\ -Für sowohl das IF- als auch das ELSE-Statement gilt, dass in den geschweiften Klammern beliebig viel Code stehen kann, nicht nur eine Zeile wie in unserem Beispiel. +Für sowohl das IF- als auch das ELSE-Statement gilt, dass in den geschweiften Klammern beliebig viel Code stehen kann und nicht nur eine Zeile, wie in unserem Beispiel. \end{Infobox} \begin{enumerate} \setcounter{enumi}{1} \item Betrachte die Operation \lstinline{movement} der Klasse \lstinline{Sheet2Task4}.\\ Füge das obige IF-Statement an einer geeigneten Stelle ein und führe die Simulation erneut aus. - Dabei sollten die dann noch vorhandenen \lstinline{.move()} Kommandos in den ersten Code-Block vom IF verschoben werden. - Der \lstinline{else} Code-Block soll erstmal leer bleiben. + Dabei sollten die dann vorhandenen \lstinline{.move()} Kommandos in den ersten Code-Block vom IF verschoben werden. + Der \lstinline{else} Code-Block sollte erstmal leer bleiben. \item Schließe nun das Fenster und öffne es erneut. - Lösche den Busch in dem Spielfenster. + Lösche den Busch im Spielfenster. Dazu musst du oben rechts das rote Minus auswählen und dann auf den Busch klicken. Starte dann die Simulation.\\ Totoro sollte sich jetzt anders verhalten, obwohl du den Code nicht geändert hast! \item Jetzt wollen wir den Code so anpassen, dass Totoro die Nuss auch erreicht, wenn ein Busch im Weg ist. - Du musst also einmal den Fall betrachten, dass kein Busch im Weg ist und einmal den Fall, dass ein Busch im Weg ist.\\ - - Überprüfe deinen Code, indem du einmal die Simulation startest, ohne den Busch zu löschen und einmal wenn du den Busch davor gelöscht hast. + Du musst beide Fälle betrachten. + + Überprüfe deinen Code, indem du einmal die Simulation startest, ohne den Busch zu löschen und einmal, nachdem du den Busch davor gelöscht hast. In beiden Fällen sollte Totoro die Nuss erreichen. \end{enumerate} diff --git a/sheets/2/exercise-5.tex b/sheets/2/exercise-5.tex index abbd154c..a98d9902 100644 --- a/sheets/2/exercise-5.tex +++ b/sheets/2/exercise-5.tex @@ -2,7 +2,7 @@ \excercise{While Schleife} -Ziel dieser Aufgabe ist es, die Syntax und die Funktion von While-Schleifen zu verstehen. +Ziel dieser Aufgabe ist es, die Syntax und Funktion von While-Schleifen zu verstehen. \begin{enumerate} \item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task5} und \lstinline{Sheet2Task5Verifier}) und mache dich mit dieser vertraut. @@ -18,14 +18,15 @@ } \end{lstlisting} - Ähnlich wie bei dem If-Statement ist auch bei der While Schleife in den geschweiften Klammern der Code-Block (Schleifen inneres, oft auch: Schleifenrumpf, Englisch: body).\\ + Ähnlich wie bei dem If-Statement ist auch bei der While Schleife in den geschweiften Klammern der Code-Block (Schleifeninnerem, oft auch: Schleifenrumpf, Englisch: body).\\ Das Verhalten von While Schleifen lässt sich einfach darstellen: \begin{enumerate} - \item[1:] Der Computer prüft als Erstes, ob die Bedienung \lstinline{totoro.canMove()} erfüllt ist, also ob sich kein Hindernis im Weg befindet. Wenn ein Hindernis im Weg ist, springe zu Punkt 4. + \item[1:] Der Computer prüft als Erstes, ob die Bedienung \lstinline{totoro.canMove()} erfüllt ist. + Wenn ein Hindernis im Weg ist, springe zu Punkt 4. \item[2:] Das Schleifeninnere \lstinline{totoro.move()} wird ausgeführt. - \item[3:] Springe zurück zu Punkt 1 - \item[4:] Verlasse die Schleife + \item[3:] Springe zurück zu Punkt 1. + \item[4:] Verlasse die Schleife. \end{enumerate} Ebenso sind folgende Beispiele zum Aufheben bzw. Ablegen aller (möglichen) Nüsse hilfreich: @@ -63,10 +64,10 @@ \textbf{Hinweis}: Hier sollte es ausreichen den Code-Block der Schleife aus der Teilaufgabe davor anzupassen. \item Platziere auf jedem zweiten Feld eine Nuss.\\ - Also die Linie soll abwechselnd eine Nuss und ein leeres Feld nacheinander haben.\\ + Die Linie soll abwechselnd eine Nuss und ein leeres Feld nacheinander haben.\\ \textbf{Hinweis}: Hier kannst du entweder die Abfolge direkt kodieren oder mit Variablen vom Typ \lstinline{boolean} und if-Verzweigungen aus Aufgabe 4 arbeiten. - \item \optional Lege auf jedem von Totoro aus erreichbaren Feld genau eine Nuss ab. + \item \optional Lege auf jedem von Totoro erreichbarem Feld genau eine Nuss ab. Beachte hierbei, dass die Büsche auf der oberen und unteren Spur zufällig platziert werden. \textbf{Hinweis}: Hier musst du neben einer While Schleife auch IF-Statements verwenden.\\ diff --git a/sheets/2/exercise-6.tex b/sheets/2/exercise-6.tex index c64cd57a..acfa60e6 100644 --- a/sheets/2/exercise-6.tex +++ b/sheets/2/exercise-6.tex @@ -3,10 +3,11 @@ \excercise{Operationen auf Totoro} \begin{enumerate} - \item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task6} und \lstinline{Sheet2Task6Verifier}) und mache dich mit dieser vertraut. + \item Instanziiere die Simulation, wie bereits gelernt (\lstinline{Sheet2Task6} und \lstinline{Sheet2Task6Verifier}), und mache dich mit dieser vertraut. \item Lasse Totoro im Uhrzeigersinn an den Büschen entlang laufen, bis er wieder an seinem Startpunkt angekommen ist.\\ - Implementiere das Verhalten an der markierten Stelle in der Klasse \lstinline{Sheet2Task6}. Verwende die Konzepte, welche du in den vorherigen Aufgaben kennengelernt hast um die Menge an zu kopierenden Code zu minimieren. - \item Lasse nun Totoro gegen den Uhrzeigersinn an den Büschen entlang laufen, bis er wieder an seinem Startpunkt angekommen ist.\\ + Implementiere das Verhalten an der markierten Stelle in der Klasse \lstinline{Sheet2Task6}. + Verwende die Konzepte, welche du in den vorherigen Aufgaben kennengelernt hast um die Menge an Code zu minimieren. + \item Lasse nun Totoro solange gegen den Uhrzeigersinn an den Büschen entlang laufen, bis er wieder an seinem Startpunkt angekommen ist.\\ Welche der beiden Varianten ist die schnellere?\\ Welche hat weniger Code? @@ -29,7 +30,7 @@ Dafür betrachten wir beispielhaft den folgenden Programmcode: \begin{lstlisting}[numbers=none] -public class Totoro extends Human_like { +public class Totoro extends Creature { // ... diff --git a/sheets/2/exercise-7.tex b/sheets/2/exercise-7.tex index d5498917..fa5a4c6d 100644 --- a/sheets/2/exercise-7.tex +++ b/sheets/2/exercise-7.tex @@ -1,13 +1,12 @@ - - \excercise{Objekte und Klassen} \begin{Infobox}[HowTo: Klassen und Objekte auseinander halten] - Klassen kann man sich wie Baupläne für Objekte vorstellen.\\ - Während Objekte nach dem in den dazugehörigen Klassen definierten Bauplänen gebaute Instanzen sind.\\ + Klassen kann man sich wie Baupläne für Objekte vorstellen, + während Objekte nach dem in den dazugehörigen Klassen definierten Bauplänen gebaute Instanzen sind.\\ \textbf{Beispiel:} Wir haben eine Klasse Student. - Die Klasse definiert dabei, dass ein Student folgende Eigenschaften und Operationen haben soll aber befüllt die Eigenschaften noch nicht mit Werten: + + Die Klasse definiert dabei, dass ein Student folgende Eigenschaften und Operationen haben soll, befüllt aber die Eigenschaften noch nicht mit Werten: \begin{itemize} \item name @@ -18,10 +17,11 @@ \item eat() \end{itemize} - Ein Objekt wäre dabei ein spezifischer Student, also z.B. Du.\\ -Dabei hast Du einen Namen und ein Alter. -Ebenso kannst Du folgende Operationen ausführen wie lernen, essen und über Dich was erzählen.\\ -Es kann aber auch insbesondere mehrere Objekte von einer Klasse geben. Beispielsweise ist demnach dein:e Nebensitzer:in auch ein (anderes) Objekt der Klasse Student.\\ + Ein Objekt wäre dabei ein spezifischer Student, also z.B. du.\\ +Dabei hast du einen Namen und ein Alter. +Ebenso kannst du folgende Operationen ausführen wie lernen, essen und über dich was erzählen.\\ +Es kann aber auch insbesondere mehrere Objekte von einer Klasse geben, z.B. ist dein:e Nebensitzer:in demnach auch ein (anderes) Objekt der Klasse Student.\\ + In Java könnte das dann so aussehen: \begin{lstlisting}[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=1.5em] class Student { @@ -66,6 +66,7 @@ \begin{enumerate} \item Instanziiere die Simulation wie bekannt (Sheet2Task7 und Sheet2Task7Verifier) und mache dich mit dieser vertraut. -\item Dir wird auffallen, dass in dieser Aufgabe mehr als ein Totoro auf dem Spielfeld erscheinen, was unterscheidet die Totoros. +\item Dir wird auffallen, dass in dieser Aufgabe mehr als ein Totoro auf dem Spielfeld erscheinen. + Was unterscheidet die Totoros? \item Versuche nun alle Attribute aufzulisten, welche verschiedene Totoros voneinander unterscheidet. \end{enumerate} diff --git a/sheets/2/jvk-blatt2.tex b/sheets/2/jvk-blatt2.tex index b5685b23..c91dce16 100644 --- a/sheets/2/jvk-blatt2.tex +++ b/sheets/2/jvk-blatt2.tex @@ -1,3 +1,4 @@ + \documentclass{../vorkurs} %!TEX root = ./jvk-blatt2.tex diff --git a/sheets/vorkurs.cls b/sheets/vorkurs.cls index 8c15f6d5..7b6974ef 100644 --- a/sheets/vorkurs.cls +++ b/sheets/vorkurs.cls @@ -18,6 +18,9 @@ \RequirePackage[T1]{fontenc} \RequirePackage[ngerman]{babel} + + + %% Page formatting %\RequirePackage[margin=3cm]{geometry} \RequirePackage[ @@ -61,6 +64,7 @@ %% Testing... \RequirePackage{lipsum} %\RequirePackage{todo} +\RequirePackage{dirtytalk} %%%%%%%%%%%%%%%%%%%