Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed spelling mistakes and important isusses on sheets 3,4 and the e… #179

Merged
merged 2 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions sheets/3/exercise-1.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down Expand Up @@ -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.
Expand Down
39 changes: 20 additions & 19 deletions sheets/3/exercise-2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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}

Expand Down Expand Up @@ -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)");
Expand All @@ -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){
Expand All @@ -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 soll Totoro noch nicht alle Nüsse aufgesammelen, ohne gegen einen Busch zu laufen.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instruction should indicate, that with the current code, totoro might not be able to collect all nuts without running into a bush

\end{enumerate}

\begin{Infobox}[Logische Operatoren]
Expand Down Expand Up @@ -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}

Expand All @@ -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
2 changes: 1 addition & 1 deletion sheets/3/exercise-3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions sheets/3/exercise-6.tex
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -63,15 +63,15 @@
\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.

Außerdem wollen wir die \lstinline{collectNut()} Funktion von den Rußmännchen so abändern, dass sie einfach nichts machen, falls sich keine Nuss unter ihnen befindet.
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.
Expand All @@ -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}
5 changes: 1 addition & 4 deletions sheets/4/exercise-2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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 <ClassName> implements <InterfaceName>
Expand Down
3 changes: 2 additions & 1 deletion sheets/4/exercise-3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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.}\\
Expand Down
2 changes: 1 addition & 1 deletion sheets/4/exercise-4.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 3 additions & 3 deletions sheets/extra/exercise-3.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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}
15 changes: 9 additions & 6 deletions sheets/extra/exercise-4.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Binary file added sheets/extra/jvk-extra.pdf
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The compiled pdf should not be in the repository

Binary file not shown.
2 changes: 1 addition & 1 deletion sheets/vorkurs.cls
Original file line number Diff line number Diff line change
Expand Up @@ -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}
}
Expand Down
Loading