diff --git a/sheets/3/exercise-1.tex b/sheets/3/exercise-1.tex index 26495f63..5faf2477 100644 --- a/sheets/3/exercise-1.tex +++ b/sheets/3/exercise-1.tex @@ -12,7 +12,7 @@ Mit einer For-Schleife kann man genau bestimmen wie oft der Code in der Schleife ausgeführt wird.\newline Anstatt eine Sequenz von Operationen $n$-mal untereinander zu schreiben, um sie $n$-mal auszuführen, kann man den repetitiven Code einmal in den Rumpf eine For-Schleife schreiben. - Im \enquote{Kopf} der for-Schleife kann man dann angeben, wie oft der Schleifenrumpf ausgeführt werden soll.\newline + Im \enquote{Kopf} der For-Schleife kann man dann angeben, wie oft der Schleifenrumpf ausgeführt werden soll.\newline Hier ein Beispiel: @@ -67,13 +67,13 @@ \item Hebe jetzt mit Totoro jeweils 2, 5, 16 und 20 Nüsse vom Feld \texttt{(0,22)} auf. - Dazu musst du eine weitere For-Schleife benutzen, in der du auch den Schleifenrumpf anpasst. + Dazu musst du eine weitere For-Schleife verwenden, in der du auch den Schleifenrumpf anpasst. \item Verwende für diese Teilaufgabe den Totoro in der Variable \lstinline{totoroF}. Hebe alle Nüsse auf Totoro's Startposition auf. - Laufe jetzt 5 Schritte mit einer For-Schleife und lege jeden Schritt so viele Nüsse ab, wie du schon Schritte gelaufen bist. + Laufe jetzt 5 Schritte mit einer For-Schleife und lege bei jedem Schritt so viele Nüsse ab, wie du schon Schritte gelaufen bist. \textbf{Hinweis:} Dafür musst du eine For-Schleife in der For-Schleife verwenden. Du kannst die Variable \lstinline{i} der äußeren For-Schleife in der Schleifenbedingung (an der 2. Stelle im Schleifenkopf) der inneren For-Schleife benutzen. diff --git a/sheets/3/exercise-2.tex b/sheets/3/exercise-2.tex index 036d3aec..9e61aa30 100644 --- a/sheets/3/exercise-2.tex +++ b/sheets/3/exercise-2.tex @@ -15,8 +15,8 @@ Laufe mit Totoro bis zum ersten Feld mit einer Nuss und gib die Anzahl der Nüsse unter Totoro auf der Konsole aus.\newline \textbf{Wichtig}: Mit der Operation \lstinline{totoro.getCurrentlyCollectableNuts();} bekommt man eine Liste aller Nuss-Objekte, die auf Totoro's aktuellem Feld liegen. - Du kannst die den Datentyp List wie eine Sequenz (Aneinanderreihung) von Objekten desselben Typs - in diesem Fall des Typs \lstinline{Nut} - vorstellen. - Eine Liste hat eine Länge die angibt wie viele Elemente in ihr enthalten sind. + Du kannst dir den Datentyp List wie eine Sequenz (Aneinanderreihung) von Objekten desselben Typs, in diesem Fall des Typs \lstinline{Nut}, e vorstellen. + Eine Liste hat eine Länge, die angibt wie viele Elemente in ihr enthalten sind. Diese Länge kann mit der \lstinline{size()}-Methode auf Listen-Objekten abgefragt werden. \end{enumerate} @@ -64,7 +64,7 @@ \textbf{Vorsicht:} Mit dem Vergleichsoperator \enquote{\lstinline{==}} sollte man in der Regel nur primitive Datentypen (= etwa Werte vom Typ \lstinline{int}, Fließkommazahlen wie \lstinline{double} und ein paar andere Typen, die wir der Einfachheit halber hier weglassen) vergleichen!\newline Zum Vergleichen von zwei Objekten sollte immer die \lstinline{equals}-Methode, die auf jedem Objekt definiert ist, verwendet werden: - + \begin{lstlisting}[numbers=none] if (totoro.getPosition().equals(new Position(1, 1))){ System.out.println("Totoro is on Position (1, 1)"); @@ -86,22 +86,22 @@ Nun wollen wir daran arbeiten möglichst viele Nüsse auf dem Spielfeld einzusammeln. Dazu wollen wir Totoro erstmals so lange geradeaus laufen lasse, bis sich unter ihm eine oder mehrere Nüsse befinden. - Wenn Totoro auf eine Nuss trifft, sollst du erst mal anhalten. + Wenn Totoro auf eine Nuss trifft, sollte er erst mal anhalten. \end{enumerate} \begin{Infobox}[Endlosschleifen und \lstinline{break}] Eine While-Schleife, in der die Schleifenbedingung \lstinline{true} ist, nennt man eine Endlosschleife. - Das heißt, dass die Schleife niemals aufhören wird den Code im Schleifenrumpf auszuführen, wenn das nicht durch eine Exception oder den Stop der Ausführung des Programms verhindert wird! - Deshalb kann es passieren, dass du den Stopp Knopf in der Eclipse Konsole brauchst, um die Schleife wieder abzubrechen.\newline + Das heißt, dass die Schleife niemals aufhören wird, den Code im Schleifenrumpf auszuführen, wenn das nicht durch eine Exception oder den Stop der Ausführung des Programms verhindert wird! + Deshalb kann es passieren, dass du den Stopp Knopf in der IntelliJ Konsole benötigst, um die Schleife wieder abzubrechen.\newline - Endlosschleifen möchte man in der Regel wann immer möglich vermeiden. - Aber man kann auch eine \lstinline{while(true)}-Schleife planmäßig im Quellcode und ohne das Auslösen von Exceptions beenden. + Endlosschleifen möchte man wenn möglich immer vermeiden. + Man kann jedoch auch eine \lstinline{while(true)}-Schleife planmäßig in den Quellcode einbauen und ohne das Auslösen von Exceptions beenden. Dafür braucht man das Schlüsselwort \lstinline{break}.\newline Wenn du im Rumpf einer Schleife \lstinline{break;} aufrufst, dann wird die Schleife sofort unterbrochen. Auch die Schleifenbedingung wird dann nicht mehr überprüft und der Code nach der Schleife wird weiter ausgeführt. - Das funktioniert auch in For-Schleifen, ist aber hier eher untypisch, da man dort meistens die Zählvariablen zur Begrenzung der Wiederholungen benutzt. + Das funktioniert auch in For-Schleifen, ist aber hier eher untypisch, da dort meistens die Zählvariablen zur Begrenzung der Wiederholungen benutzt wird. \begin{lstlisting}[numbers=none] while(true){ @@ -117,16 +117,17 @@ \begin{enumerate}\setcounter{enumi}{3} \item - Mit dem neuen Wissen wollen wir nun an unserem Code aus Teilaufgabe c) weiterarbeiten. + Mit diesem neuen Wissen wollen wir nun an unserem Code aus Teilaufgabe c) weiterarbeiten. - Wenn Totoro also auf einem Feld mit genau einer Nuss steht, soll er die Nuss aufsammeln, sich dann nach rechts drehen und einen weiteren Schritt machen. + Wenn Totoro also auf einem Feld mit genau einer Nuss steht, soll er die Nuss aufsammeln und + sich dann nach rechts drehen und einen weiteren Schritt machen. Wenn sich mehr als eine Nuss unter Totoro befinden, soll er die Schleife erstmals mit einem \lstinline{break} verlassen. - Dann soll der wieder anfangen zu laufen, bis unter ihm wieder eine oder mehrere Nüsse auftauchen. - + Dannach soll er wieder weiter laufen, bis er Nüsse findet. \item - Wenn sich jetzt mehr als eine Nuss unter Totoro befinden sollten, dann soll Totoro genau eine Nuss aufsammeln, sich nach links drehen und dann wieder einen Schritt nach vorne machen. + Wenn sich jetzt mehr als eine Nuss unter Totoro befinden, + soll Totoro genau eine Nuss aufsammeln, und sich dann nach links drehen und wieder einen Schritt nach vorne machen. - Momentan soll Totoro noch nicht alle Nüsse aufgesammelt bekommen, ohne gegen einen Busch zu laufen. + Momentan sollte Totoro noch nicht in der Lage sein, alle Nüsse aufzusammlen, ohne gegen einen Busch zu laufen. \end{enumerate} \begin{Infobox}[Logische Operatoren] @@ -155,7 +156,7 @@ \begin{lstlisting}[numbers=none] if (!totoro.canMove() && totoro.getCurrentlyCollectableNuts().size() == 7) { - //totoro hat genau 7 Nüsse UND kann sich NICHT nach vorne gehen. + //totoro hat genau 7 Nüsse UND kann sich NICHT nach vorne bewegen. } \end{lstlisting} @@ -176,11 +177,11 @@ Dafür musst du vor jedem \lstinline{move()} Kommando prüfen, ob Totoro sich überhaupt nach vorne bewegen kann. \item - Jetzt wollen wir, dass Totoro auch irgendwann aufhört. - Er soll aufhören zu laufen oder Nüsse einzusammeln, wenn er schon 20 Nüsse gesammelt hat oder wenn er auf einem Feld mit exakt 9 Nüssen ankommt. + Totoro's Taschen sind leider relativ klein, daher soll er + aufhören zu laufen oder Nüsse einzusammeln, wenn er schon 20 Nüsse gesammelt hat oder er auf einem Feld mit exakt 9 Nüssen ankommt. Mit \lstinline{totoro.getNutsInPocket()} kannst du die Anzahl der Nüsse in Totoro's Inventory abfragen. - \textbf{Tipp:} Hierfür kannst du entweder das Argument der Endlosschleife ändern oder \lstinline{break} Verwenden. + \textbf{Tipp:} Hierfür kannst du entweder das Argument der Endlosschleife ändern oder \lstinline{break} verwenden. Falls du die Entscheidung, was Totoro auf einem Feld machen soll, mit einem \lstinline{if-else}-Verzweigung implementiert hast, kannst du hier ein \lstinline{else if(...)} einführen. \end{enumerate} \newpage diff --git a/sheets/3/exercise-3.tex b/sheets/3/exercise-3.tex index 2cda8856..df0d681e 100644 --- a/sheets/3/exercise-3.tex +++ b/sheets/3/exercise-3.tex @@ -88,7 +88,7 @@ In der Klasse \lstinline{Sheet3Task3} findest du auch die folgende Operation. \begin{lstlisting} - private void dropFourNutssAndTurnLeft(Totoro totoro) { + private void dropFourNutsAndTurnLeft(Totoro totoro) { //write the Code for f) here //make totoro drop four nuts //make totoro turn Left diff --git a/sheets/3/exercise-6.tex b/sheets/3/exercise-6.tex index bd704d21..81ceb0c2 100644 --- a/sheets/3/exercise-6.tex +++ b/sheets/3/exercise-6.tex @@ -1,4 +1,4 @@ -\excercise{Verebung} +\excercise{Vererbung} \begin{enumerate} \item Instanziiere die Simulation (\lstinline{Sheet3Task6} und \lstinline{Sheet3Task6Verifier}) und mache dich mit dieser vertraut. @@ -63,7 +63,7 @@ \item Überschreibe nun die \lstinline{collectNut()} Funktion der \lstinline{HungryTotoro} Klasse, sodass \lstinline{HungryTotoro} immer alle Nüsse auf einem Feld einsammelt, wenn die Funktion aufgerufen wird. Teste diese Funktionalität, indem du in \lstinline{Sheet3Task6} 5 Nüsse auf \lstinline{HungryTotoro} Feld platzierst und einmal \lstinline{collectNut()} ausführst. -\textbf{Tipp:} schaue die dazu die \lstinline{collectNut()} Funktion der \lstinline{Totoro} Klasse genauer an. +\textbf{Tipp:} Schaue die dazu die \lstinline{collectNut()} Funktion der \lstinline{Totoro} Klasse genauer an. \item Nun wollen wir Rußmännchen (\lstinline{Sooty_mans}) in den Simulator laden. @@ -71,7 +71,7 @@ Spezieller soll dabei auch keine Fehlermeldung auf der Konsole erscheinen. Gehe dazu analog zu der letzten Teilaufgabe vor. -Teste diese Funktionalität, indem du in \lstinline{Sheet3Task6} keine Nüsse auf \lstinline{Sooty_mas}' Feld platzierst und einmal \lstinline{collectNut()} ausführst. +Teste diese Funktionalität, indem du in \lstinline{Sheet3Task6} keine Nüsse auf \lstinline{Sooty_mans}' Feld platzierst und einmal \lstinline{collectNut()} ausführst. \item Rußmännchen sollen in ihrer \lstinline{move()} Funktion nun automatisch Büsche erkennen und nicht einfach in sie hineinlaufen. Stattdessen sollen Rußmännchen prüfen, ob das Feld links, rechts oder hinter ihnen frei ist und in die entsprechende Richtung weiterlaufen. @@ -83,6 +83,6 @@ Finde den Codeteil der dieses Verhalten bewirkt. Im Projekt ist noch eine Mario, Neo und Morpheus Textur hinterlegt. -Versuche die Textur von GreedyNeo durch die von Mario zu ersetzten. +Versuche die Textur von HungryTotoro durch die von Mario zu ersetzten. \end{enumerate} diff --git a/sheets/4/exercise-2.tex b/sheets/4/exercise-2.tex index 434b3a8a..d3c2e8fd 100644 --- a/sheets/4/exercise-2.tex +++ b/sheets/4/exercise-2.tex @@ -6,10 +6,7 @@ \\ \includegraphics[width=\linewidth]{./figures/smily.png} \item Zeichne den Smiley mithilfe von Shapes. Du kannst dafür z.B. das Pixel Shape verwenden. \item Erstelle eine eigene Shape-klasse für Smilies und geb ihr einen Namen. - \begin{Infobox}[Eclipse Class wizard] - Wenn du im Package Explorer von Eclipse einen Rechtsklick machst, gibt es die Option new. - Damit bekommst du ein kleines Menü an die Hand, um zum Beispiel eine Klasse zu erstellen. - \end{Infobox} + \item Füge das Interface Shape hinzu. \begin{lstlisting}[title=Interface Syntax,frame=ltr] class implements diff --git a/sheets/4/exercise-3.tex b/sheets/4/exercise-3.tex index 2e5c9a67..ef077ddd 100644 --- a/sheets/4/exercise-3.tex +++ b/sheets/4/exercise-3.tex @@ -15,7 +15,8 @@ \item Nun da wir Shapes etwas genauer kennengelernt haben, können wir damit Spielfelder frei bauen. Erstelle ein Labyrinth aus Büschen. - \optional{Überlege dir wo der Start und das Ende des Labyrinths ist und löse es mit der Spielfigur.} + + \optional{Überlege dir, wo der Start und das Ende des Labyrinths ist und löse es mit der Spielfigur.} \item \optional{Versuche das folgende Spielfeld im Code nachzubauen.}\\ diff --git a/sheets/4/exercise-4.tex b/sheets/4/exercise-4.tex index 37cf3af0..be548b90 100644 --- a/sheets/4/exercise-4.tex +++ b/sheets/4/exercise-4.tex @@ -2,7 +2,7 @@ \begin{enumerate} \item Passe die Main Operation an die Aufgabe an. - Verwende \lstinline{Sheet4Task4}, auch in dieser Aufgabe gibt es keinen Verifier. + Verwende \lstinline{Sheet4Task4}. Auch in dieser Aufgabe gibt es keinen Verifier. Diese Aufgabe ist mehr als ''Ideensammlung'' zu verstehen und wird nicht überprüft. Spiele mit den Konzepten, die eingeführt wurden. \item Erzeuge ein Programm, das Totoro geradeaus laufen lässt, bis er keine Schritte mehr machen kann. diff --git a/sheets/extra/exercise-3.tex b/sheets/extra/exercise-3.tex index 17d0afad..c91d3001 100644 --- a/sheets/extra/exercise-3.tex +++ b/sheets/extra/exercise-3.tex @@ -3,7 +3,7 @@ Ein Kommando welches sich selbst aufruft wird als rekusiv bezeichnet. Die Fibbonacci Reihe zum beispiel (1,1,2,3,5,8,13,21,...) kann beschrieben werden durch $F(0)=1$ $F(1)=1$ $F(n)=F(n-2)+F(n-1)$. wobei F(n) die n-te Fibbonacci Zahl ist. bei $F(n)=F(n-2)+F(n-1)$ wird erneut mit einem kleineren Argument verwendet. Dadurch wird das Argument in allen Schritten kleiner bis es bei $F(0)$ oder $F(1)$ ankommt welche einen Festen Wert haben. \end{Infobox} \begin{enumerate} -\item versuche (rekursiv) ein Fibbonacci Kommando zu implementieren welches einen Integer n erhällt und dann $F(n)$ Nüsse ablegt. -\item lasse Totoro die ersten Sechs Elemente der Fibbonacci Folge nacheinander auf das Spielfeld legen. -\item (bonus) implementiere das Fibbonacci Kommando aus a) itterativ (ohne Rekursion). +\item Versuche (rekursiv) ein Fibbonacci Kommando zu implementieren welches einen Integer n erhällt und dann $F(n)$ Nüsse ablegt. +\item Lasse Totoro die ersten Sechs Elemente der Fibbonacci Folge nacheinander auf das Spielfeld legen. +\item \optional Implementiere das Fibbonacci Kommando aus a) iterativ (ohne Rekursion). \end{enumerate} diff --git a/sheets/extra/exercise-4.tex b/sheets/extra/exercise-4.tex index 28ea20c7..b25ec22a 100644 --- a/sheets/extra/exercise-4.tex +++ b/sheets/extra/exercise-4.tex @@ -4,11 +4,14 @@ \item Implementiere das \lstinline{moveTo(Position position)} Kommando in der Klasse Totoro, welches totoro zu der übergebenen Position laufen lässt. Um das Kommando zu testen, lasse totoro zu (2,4) laufen (Tipp: In dieser Aufgabe gibt es keine Büsche auf dem Spielfeld. Du musst daher keinen komplexen Wegfindungsalgorithmus implementieren.) \item Totoro ist umgeben von Nüssen. Wir wollen auch nun das innere dieser Form mit Nüssen füllen. Dafür verwenden wir einen beliebten (rekursiven) Füllalgorithmus der funktioniert wie folgt:\\ Fill(Position pos(x,y)):\\ --lege eine Nuss auf pos\\ --falls (x-1,y) leer ist: Fill(x-1,y)\\ --falls (x+1,y) leer ist: Fill(x+1,y)\\ --falls (x,y-1) leer ist: Fill(x,y-1)\\ --falls (x,y+1) leer ist: Fill(x,y+1)\\ +\begin{enumerate}[label=\arabic*.] + \item lege eine Nuss auf pos + \item falls (x-1,y) leer ist: Fill(x-1,y) + \item falls (x+1,y) leer ist: Fill(x+1,y) + \item falls (x,y-1) leer ist: Fill(x,y-1) + \item falls (x,y+1) leer ist: Fill(x,y+1) +\end{enumerate} + -implementieren diesen Füllalgorithmus, und lasse totoro die Form mit Nüssen füllen +Implementiere diesen Füllalgorithmus und lasse totoro die Form mit Nüssen füllen. \end{enumerate} diff --git a/sheets/extra/jvk-extra.pdf b/sheets/extra/jvk-extra.pdf new file mode 100644 index 00000000..416ae7a8 Binary files /dev/null and b/sheets/extra/jvk-extra.pdf differ diff --git a/sheets/vorkurs.cls b/sheets/vorkurs.cls index cdbd28f0..d0781698 100644 --- a/sheets/vorkurs.cls +++ b/sheets/vorkurs.cls @@ -136,7 +136,7 @@ \hfill\includegraphics[height=3cm]{../logos/fius-logo-neu.png} \begin{center} \Large\textbf{Übungsblatt \sheetNumber}\\ - \large\kurs (\semester) + \large\kurs \, \semester \normalsize \end{center} }