diff --git a/notebooks/hausaufgabe1.ipynb b/notebooks/hausaufgabe1.ipynb
index bb5b19d86246d690d76deb964269739a4b15fa0f..4e93ec0c11fdee98d97e5b280fe04bdc3760d4e5 100644
--- a/notebooks/hausaufgabe1.ipynb
+++ b/notebooks/hausaufgabe1.ipynb
@@ -38,10 +38,10 @@
     "## Aufgabe 1\n",
     "\n",
     "Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe. \n",
-    "Welche Funktionen werden genutzt und was machen diese Funktionen?\n",
-    "Nutzen Sie entweder Kommentare (mit Hilfe von der Raute #) im Code oder Sie schreiben die Antworten in eine extra Markdown Zeile.\n",
-    "\n",
-    "Falls Sie Kommentare (#) nutzen, nehmen Sie **mehrere Zeilen pro Anweisung, damit Ihre Antwort in die Breite des Codeblocks passt** und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )\n"
+    "- Welche Funktionen werden genutzt und was machen diese Funktionen? (die print-Funktion muss nicht erklärt werden)\n",
+    "- Was ist die Ausgabe? Geben Sie Wert und Datentyp an\n",
+    "Nutzen Sie Kommentare wie im Beispiel beschrieben.\n",
+    "Nutzen Sie **mehrere Zeilen pro Anweisung, damit Ihre Antwort in die Breite des Codeblocks passt** und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )\n"
    ]
   },
   {
@@ -52,8 +52,8 @@
    "source": [
     "# Beispiel:\n",
     "print(\"a\"+\"b\") \n",
-    "#zwei Zeichenketten werden durch den Operator \"+\" verkettet \n",
-    "# und durch die print()-Funktion ausgegeben.\n",
+    "# zwei Zeichenketten werden durch den Operator \"+\" verkettet \n",
+    "# Ausgabe: \"ab\" (Zeichenkette)\n",
     "\n",
     "\n",
     "\n",
@@ -124,8 +124,8 @@
    "outputs": [],
    "source": [
     "def boxprint(zeichenkette):\n",
-    "    '''Beschreibung der Funktion: Diese Funktion nimmt als Argument eine Zeichenkette entgegen und gibt \n",
-    "    die Zeichenkette innerhalb einer Box aus.\n",
+    "    '''Die Funktion nimmt eine Zeichenkette entgegen und gibt \n",
+    "    die Zeichenkette innerhalb einer Textbox aus.\n",
     "    '''    \n"
    ]
   },
@@ -135,10 +135,12 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
+    "# Funktionsaufrufe\n",
     "boxprint(\"Hello World!\")\n",
     "boxprint(\"Dieser Text muss auch in die Box passen.\")\n",
-    "boxprint(\"Das Reh springt hoch, das Reh springt weit. Warum auch nicht, es hat ja Zeit.\")"
+    "boxprint(\"Das Reh springt hoch, das Reh springt weit. Warum auch nicht, es hat ja Zeit.\")\n",
+    "\n",
+    "# Schreiben Sie hier mindestens zwei Funktionsaufrufe:\n"
    ]
   },
   {
@@ -185,7 +187,18 @@
     "Nutzen Sie dazu Ihre bei der Programmierung von `boxprint` gesammelte Erfahrung. Auch hier soll das Argument eine variable Länge aufweisen können, die \"Sprechbox\" soll sich anpassen.\n",
     "\n",
     "**Tipp**: Man kann den Stegosaurus im Editiermodus kopieren, Sie müssen nicht jedes Zeichen selbst abtippen.\n",
+    "Durch\n",
     "\n",
+    "```\n",
+    "''' \n",
+    "Dinoabbildung Zeile 1\n",
+    "Dinoabbildung Zeil 2\n",
+    "...\n",
+    "Dinoabbildung Zeile ...\n",
+    "''' \n",
+    "```\n",
+    "\n",
+    "können Sie den Dino vollständig im Editormodus dieses Blocks herauskopieren und in Ihre Funktion einfügen.\n",
     "\n",
     "Freiwillige Erweiterung für Fortgeschrittene: Erweitern Sie die Funktion um ein Argument, mit dem eine maximale Breite (Anzahl Zeichen) übergeben werden kann, so dass die ausgegebene Box nicht breiter ist. Implementieren Sie dann die Behandlung von Zeichenketten, die länger als die vorgegebene Breite sind. Sie haben zwei Möglichkeiten: a) die Zeichenkette abschneiden, b) die Zeichenkette umbrechen. Entscheiden Sie sich für eine der beiden Varianten. Hinweis: auf die ersten `k` Zeichen einer  Zeichenkette `s` können Sie mittels `s[0:k]` zugreifen. Analog können Sie auf das 2. bis 4. Zeichen mittels `s[1:4]` zugreifen, usw."
    ]
@@ -197,8 +210,8 @@
    "outputs": [],
    "source": [
     "def stegosay(z):\n",
-    "    '''Diese Funktion nimmt als Argument eine Zeichenkette entgegen und gibt \n",
-    "    die Zeichenkette als Denkblase eines Dinos wieder aus. \n",
+    "    '''Diese Funktion nimmt eine Zeichenkette entgegen und gibt \n",
+    "    die Zeichenkette innerhalb einer Denkblase eines Dinos wieder aus. \n",
     "    In dieser Funktion soll der Dinosaurier inklusive der Denkblase ausgegeben werden.\n",
     "    '''    \n",
     "\n"
@@ -291,10 +304,7 @@
     "import math\n",
     "\n",
     "def sinprint():\n",
-    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
-    "    Diese Funktion kann man ohne Parameter implementieren. Wenn es für Sie einfacher ist, \n",
-    "    können Sie gerne eins hinzufügen.\n",
-    "    '''    \n",
+    "    '''Diese Funktion zeichnet eine Sinus-Kurve ohne eine plot-Bibliothek.'''    \n",
     "\n",
     "\n",
     "\n"
@@ -306,7 +316,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Bitte nutzen Sie diese Zelle, um Ihre Funktion aufzurufen."
+    "# Funktionsaufruf\n",
+    "sinprint()"
    ]
   },
   {
@@ -332,9 +343,9 @@
    "source": [
     "import math\n",
     "\n",
-    "def funcprint():\n",
-    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
-    "    Der/Die Parameter müssen Sie sich dieses Mal selbst überlegen. Geben Sie den Parametern sinvolle Namen.\n",
+    "def funcprint(func):\n",
+    "    '''Diese Funktion nimmt den Parameter `func` entgegen, der ein Funktionsobjekt repräsentiert und zeichnet \n",
+    "    die Funktionskurve\n",
     "    '''    \n",
     "\n",
     "\n",
@@ -347,7 +358,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit unterschiedlichen Argumenten aufzurufen."
+    "funcprint(math.sin)\n",
+    "funcprint(math.cos)"
    ]
   },
   {
@@ -360,8 +372,11 @@
     "- den Anfangs- und Endwert des Intervalls, in dem die Funktion gezeichnet werden soll\n",
     "- die Schrittweite\n",
     "- die Verschiebung des Nullpunkts\n",
+    "- Skalierung in Richtung der x-Achse (Stauchung, Streckung)\n",
+    "- Skalierung in Richtung der y-Achse (Stauchung, Streckung)\n",
     "\n",
-    "Ändern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können. Testen Sie die Funktion dann mit der Funktion `math.log` als Argument. Dafür müssen Sie den Anfangswert so ändern, dass 0 nicht enthalten ist (da der Logarithmus von 0 nicht definiert ist)."
+    "Erweitern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können.\n",
+    "Fangen Sie mit einem Parameter an und versuchen Sie nach und nach alle Parameter einzusetzen. Falls die nicht funktioniert, rufen Sie Ihre Funktion mit den Parametern auf, die funktionieren. "
    ]
   },
   {
@@ -372,10 +387,10 @@
    "source": [
     "import math\n",
     "\n",
-    "def funcprint_advanced():\n",
-    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
-    "    Der/Die Parameter müssen Sie sich dieses Mal selbst überlegen. Geben Sie den Parametern sinvolle Namen.\n",
-    "    '''    "
+    "def funcprint_advanced(func, start, end, step, shift, scale_x, scale_y):\n",
+    "    '''Diese Funktion nimmt den Parameter `func` entgegen, der ein Funktionsobjekt repräsentiert und zeichnet \n",
+    "    die Funktionskurve. Zudem nimmt die Funktion mehrere Parameter entgegen, die die Kurve verändern können.\n",
+    "    '''"
    ]
   },
   {
@@ -384,7 +399,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit unterschiedlichen Argumenten aufzurufen."
+    "\n",
+    "funcprint_advanced(math.cos, 2, 10, 0.1, 30, 15, 10)"
    ]
   },
   {
diff --git a/notebooks/hausaufgabe2.ipynb b/notebooks/hausaufgabe2.ipynb
index c841d627cab96824f445b57151b571f503374c94..7e6aa75d4b240eb550f79c990c0da41b41223d25 100644
--- a/notebooks/hausaufgabe2.ipynb
+++ b/notebooks/hausaufgabe2.ipynb
@@ -48,24 +48,6 @@
     "    return (randint(0,255),randint(0,255),randint(0,255)) \n"
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from random import randint \n",
-    "\n",
-    "def setcolor(t,n): \n",
-    "    ''' nimmt eine Turte und eine Ganzzahl entgegen und ändert die Farbe der gezeichneten Linien (n = 1) oder die \n",
-    "    Farbe der gezeichneten Linien und die Farbe der turtle selbst (n = 2) bei jedem Aufruf zufällig'''\n",
-    "    turtle.colormode(255) # um RGB-Farben anzuwenden, muss man vorher diesen Colormode aktivieren\n",
-    "    if n==1: #setze n=1, um die Schildkröte und Formen in der gleichen Farbe zu färben\n",
-    "        t.color(randint(0,255),randint(0,255),randint(0,255)) #generiert eine zufällige Farbe für die turtle\n",
-    "    if n==2: # setze n=2, um Schildkröte und Formen in unterschiedlichen Farben zu färben\n",
-    "        t.color((randint(0,255),randint(0,255),randint(0,255)),(randint(0,255),randint(0,255),randint(0,255))) "
-   ]
-  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -78,46 +60,13 @@
     "caro = turtle.Turtle()\n",
     "turtle.colormode(255)\n",
     "\n",
-    "for i in range(20):\n",
+    "for i in range(4):\n",
     "    caro.fd(100)\n",
     "    caro.lt(90)\n",
-    "    # Aufruf der Hilfsfunktion am Ende der Schleife, \n",
+    "    # Aufruf am Ende des Schleifendurchlaufs, \n",
     "    #um im nächsten Schleifendurchlauf die Linie und die turtle neu zu färben\n",
-    "#     caro.color(setcolor())\n",
-    "    setcolor(t,1)\n",
-    "    t.color(setcolor())\n",
-    "\n",
-    "turtle.mainloop()\n",
-    "turtle.bye()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Aufwärmen\n",
-    "\n",
-    "\n",
-    "\n",
-    "### Aufgabe 0\n",
-    "Schreiben Sie eine Funktion `square`, die zwei Parameter  `t` und `length` erwartet. `t` ist eine Schildkröte, `length` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um ein Quadrat mit Seitenlänge `length` zu zeichnen. "
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
-    "\n",
+    "    caro.color(setcolor())\n",
     "\n",
-    "\n",
-    "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
-    "otto = turtle.Turtle()\n",
-    "square(t = otto, length = 100)\n",
     "turtle.mainloop()\n",
     "turtle.bye()"
    ]
@@ -140,12 +89,14 @@
    "outputs": [],
    "source": [
     "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
+    "\n",
+    "\n",
+    "def triangle(t, length):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
     "\n",
     "\n",
     "\n",
     "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
     "otto = turtle.Turtle()\n",
     "triangle(otto, 100)\n",
     "\n",
@@ -167,36 +118,6 @@
     "- Mit `t.speed(x)` können Sie der turtle verschiedene Geschwindigkeiten geben (`x` ist eine Zahl zwischen 1 und 100)"
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
-    "\n",
-    "turtle.colormode(255)\n",
-    "\n",
-    "\n",
-    "def square(t, l):\n",
-    "    t.shape('turtle')\n",
-    "    t.begin_fill()\n",
-    "    for i in range(4):\n",
-    "        t.stamp()\n",
-    "        t.fd(l)\n",
-    "        t.lt(90)\n",
-    "        t.color(setcolor())\n",
-    "    t.end_fill()\n",
-    "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
-    "otto = turtle.Turtle()\n",
-    "square(otto, 500)\n",
-    "\n",
-    "turtle.mainloop()\n",
-    "turtle.bye()"
-   ]
-  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -215,11 +136,15 @@
    "metadata": {},
    "source": [
     "### Aufgabe 3\n",
-    "Schreiben Sie eine Funktion `repeat_triangle`, die **vier Dreiecke nebeneinander** zeichnet.  Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. Nutzen Sie dafür Ihre Lösung aus Aufgabe 2. <br>\n",
-    "- *Zusatz*: Jedes Dreieck soll eine eigene Farbe haben.\n",
-    "- *Zusatz*: Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.\n",
+    "a) Schreiben Sie eine Funktion `repeat_triangle`, die **vier Dreiecke nebeneinander** zeichnet.  Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `repeat_triangle` soll die Funktion `triangle`  aus Aufgabe 2 aufgerufen werden. <br>\n",
     "\n",
-    "- Eine mögliche Lösung könnte so aussehen:\n",
+    "b) Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.\n",
+    "\n",
+    "\n",
+    "- *Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.\n",
+    "\n",
+    "\n",
+    "Eine mögliche Lösung könnte so aussehen:\n",
     "![repeat](https://box.hu-berlin.de/f/7ceeb79b004e4e9f8ab5/?dl=1)"
    ]
   },
@@ -230,15 +155,36 @@
    "outputs": [],
    "source": [
     "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
     "\n",
-    "def repeat(t, l, anzahl):\n",
-    "    for i in range(anzahl):\n",
+    "# Aufgabe a\n",
+    "def repeat_triangle(t, length):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
+    "        \n",
+    "\n",
+    "    \n",
+    "otto = turtle.Turtle()\n",
+    "repeat_triangle(otto, 80)\n",
+    "\n",
+    "turtle.mainloop()\n",
+    "turtle.bye()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import turtle\n",
+    "\n",
+    "# Aufgabe b\n",
+    "def repeat_triangle(t, length, number):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
     "        \n",
     "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
+    "    \n",
     "otto = turtle.Turtle()\n",
-    "repeat_triangle(otto, 80, 6)\n",
+    "repeat_triangle(otto, 100, 6)\n",
     "\n",
     "turtle.mainloop()\n",
     "turtle.bye()"
@@ -249,12 +195,17 @@
    "metadata": {},
    "source": [
     "### Aufgabe 4\n",
-    "Schreiben Sie eine Funktion `pile_triangle`, die **vier Dreiecke übereinander** zeichnet. Sie soll zwei Argumente  `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. Nutzen Sie dafür Ihre Lösung aus Aufgabe 2. <br>\n",
+    "a) Schreiben Sie eine Funktion `pile_triangle`, die **vier Dreiecke übereinander** zeichnet. Sie soll zwei Argumente  `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `pile_triangle` soll die Funktion `triangle`  aus Aufgabe 2 aufgerufen werden. \n",
+    "\n",
+    "\n",
+    "b) Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.\n",
+    "\n",
+    "\n",
     "- *Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.\n",
-    "- *Zusatz*: Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.\n",
     "\n",
     "\n",
-    "- Eine mögliche Lösung könnte so aussehen:    \n",
+    "\n",
+    "Eine mögliche Lösung könnte so aussehen:    \n",
     "![pile](https://box.hu-berlin.de/f/d6c490e2f4f640349f42/?dl=1)"
    ]
   },
@@ -265,16 +216,37 @@
    "outputs": [],
    "source": [
     "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
     "\n",
+    "# Aufgabe a\n",
+    "def pile_triangle(t, length):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
     "\n",
     "\n",
     "\n",
     "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
     "otto = turtle.Turtle()\n",
     "pile_triangle(otto, 80)\n",
     "\n",
+    "turtle.mainloop()\n",
+    "turtle.bye()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import turtle\n",
+    "\n",
+    "# Aufgabe b\n",
+    "def pile_triangle(t, length, number):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
+    "\n",
+    "\n",
+    "\n",
+    "otto = turtle.Turtle()\n",
+    "pile_triangle(otto, 100, 2)\n",
     "\n",
     "turtle.mainloop()\n",
     "turtle.bye()"
@@ -301,12 +273,12 @@
    "outputs": [],
    "source": [
     "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
     "\n",
+    "def tiled_triangle(t, length):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
     "\n",
     "\n",
     "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
     "otto = turtle.Turtle()\n",
     "tiled_triangle(otto, 80)\n",
     "\n",
@@ -329,13 +301,13 @@
    "outputs": [],
    "source": [
     "import turtle\n",
-    "# Implementieren Sie hier ihre Funktion und schreiben Sie Kommentare dazu\n",
     "\n",
     "\n",
+    "def tiled_triangle(t, length, m, n):\n",
+    "    pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
     "\n",
     "\n",
     "\n",
-    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
     "otto = turtle.Turtle()\n",
     "tiled_triangle(otto, 80,4,6)\n",
     "\n",