diff --git a/notebooks/hausaufgabe4.ipynb b/notebooks/hausaufgabe4.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1db1033bc29ea5d9b8884db6c7a6c80a77e4e5f6 --- /dev/null +++ b/notebooks/hausaufgabe4.ipynb @@ -0,0 +1,178 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Hausaufgabe\n", + "\n", + "Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (`hausaufgabe4.ipynb`) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren. Für diese Hausaufgabe sollten Sie alles bis zum 7. Kapitel durchgearbeitet haben, da Iteration, Rekursion, Verzweigungen und Funktionen mit Rückgabewert benötigt werden.\n", + "\n", + "Wir wünschen viel Erfolg beim Lösen der Aufgaben!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabe 1\n", + "\n", + "*(Dies ist [Aufgabe 1 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-1).)*\n", + "\n", + "Kopieren Sie die Schleife aus [Abschnitt 7.5](seminar07.ipynb#7.5-Quadratwurzeln) und verkapseln Sie sie in eine Funktion `mysqrt` die einen Parameter `a` erwartet, einen sinnvollen Wert für `x` wählt und eine Näherung für die Quadratwurzel von `a` zurückliefert." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Implementieren Sie hier die Funktion mysqrt\n", + "\n", + "\n", + "# Testen Sie hier die Funktion\n", + "print(\"Die Wurzel von 2 ist ungefähr \", mysqrt(2))\n", + "print(\"Die Wurzel von 23 ist ungefähr \", mysqrt(23))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testen Sie die Funktion, indem Sie eine Funktion `test_square_root` schreiben, die eine Tabelle der folgenden Art ausgibt:\n", + "\n", + "```\n", + "a mysqrt(a) math.sqrt(a) diff\n", + "- --------- ------------ ----\n", + "1.0 1.0 1.0 0.0\n", + "2.0 1.41421356237 1.41421356237 2.22044604925e-16\n", + "3.0 1.73205080757 1.73205080757 0.0\n", + "4.0 2.0 2.0 0.0\n", + "5.0 2.2360679775 2.2360679775 0.0\n", + "6.0 2.44948974278 2.44948974278 0.0\n", + "7.0 2.64575131106 2.64575131106 0.0\n", + "8.0 2.82842712475 2.82842712475 4.4408920985e-16\n", + "9.0 3.0 3.0 0.0\n", + "```\n", + "\n", + "Dabei ist die erste Spalte eine Zahl, `a`; die zweite Spalte ist die Quadratwurzel von `a` die mit `mysqrt` berechnet wurde; die dritte Spalte ist die Quadratwurzel, die mittels `math.sqrt` berechnet wurde; und die vierte Spalte ist der Absolutbetrag des Unterschieds zwischen den beiden Werten." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def test_square_root():\n", + " # Implementieren Sie hier die Funktion test_square_root\n", + "\n", + "\n", + "# Rufen Sie hier die Funktion test_square_root auf\n", + "test_square_root()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabe 2\n", + "\n", + "*(Dies ist [Aufgabe 2 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-2).)*\n", + "\n", + "Die eingebaute Funktion `eval` erwartet eine Zeichenkette und führt sie dann mit dem Python-Interpreter aus. Beispielsweise:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "eval('1 + 2 * 3')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "eval('math.sqrt(5)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "eval('type(math.pi)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Schreiben Sie eine Funktion `eval_loop`, die den Nutzer iterativ bittet etwas einzugeben, die eingegebene Zeichenkette mittels `eval` ausführt und schließlich das Ergebnis ausgibt. \n", + "\n", + "Die Funktion sollte so lange laufen, bis der Nutzer `fertig` eingibt und dann sollte der Rückgabewert des letzten ausgeführten Ausdrucks ausgegeben werden." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Implementieren Sie hier die Funktion eval_loop" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aufgabe 3\n", + "\n", + "Ziel dieser Aufgabe ist, dass Sie üben, fremden Code zu lesen, zu verstehen und zu verändern. \n", + "In [Aufgabe 3 im 7. Kapitel](https://scm.cms.hu-berlin.de/ibi/python/blob/master/notebooks/seminar07.ipynb#aufgabe-3) wird eine Methode zur näherungsweisen Berechnung von $\\pi$ vorgestellt, einschließlich des [Quellcodes](http://thinkpython2.com/code/pi.py). Verändern Sie diesen Quellcode, so dass stattdessen die Näherungsformel \n", + "\n", + "\\begin{equation}\n", + "\\pi = \\sqrt{12}\\sum^\\infty_{k=0} \\frac{(-3)^{-k}}{2k+1} = \\sqrt{12}\\sum^\\infty_{k=0} \\frac{(-\\frac{1}{3})^k}{2k+1}\n", + "\\end{equation}\n", + "\n", + "zur Berechnung von $\\pi$ verwendet wird ([Madhava–Leibniz Folge](https://en.wikipedia.org/wiki/Approximations_of_%CF%80#Middle_Ages)). Kommentieren Sie Ihren Quellcode in eigenen Worten (auf Deutsch) und entfernen Sie jeglichen Code, der nicht zur Berechnung benötigt wird. \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " # Implementieren und testen Sie hier ihre Funktion\n", + "\n", + " \n", + " \n", + "print(estimate_pi())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + } + ], + "metadata": { + "language_info": { + "name": "python", + "pygments_lexer": "ipython3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}