Skip to content

Commit

Permalink
fixed some spelling issues in the sheet (#175)
Browse files Browse the repository at this point in the history
  • Loading branch information
tillumination authored Sep 29, 2024
1 parent 952d2b1 commit bc8650a
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 81 deletions.
20 changes: 14 additions & 6 deletions sheets/2/exercise-1.tex
Original file line number Diff line number Diff line change
@@ -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}
Expand All @@ -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]
Expand All @@ -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}

39 changes: 24 additions & 15 deletions sheets/2/exercise-2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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?\\

Expand All @@ -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
Expand All @@ -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]
Expand All @@ -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}

Expand All @@ -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}
Expand Down
54 changes: 30 additions & 24 deletions sheets/2/exercise-3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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]
/**
Expand All @@ -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}
Loading

0 comments on commit bc8650a

Please sign in to comment.