Skip to content
Snippets Groups Projects
seminar05.ipynb 42 KiB
Newer Older
Michel Schwab's avatar
Michel Schwab committed
    "    b=int(b)\n",
    "    c=int(c)\n",
    "    n=int(n)\n",
    "    check_fermat(a,b,c,n)\n",
    "\n",
    "check_fermat2(3,4,5,3)    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Aufgabe 3\n",
    "\n",
    "Wenn uns drei Stöcke gegeben werden, kann es sein, dass wir sie als Dreieck anordnen können oder auch nicht. Wenn beispielsweise einer der Stöcke 12cm lang ist und die anderen beiden jeweils 1cm, dann klappt es nicht. Für jede Kombination von Längen gibt es einen einfachen Test, der uns anzeigt, ob sich daraus ein Dreieck formen lässt:\n",
    "\n",
    "*Falls eine der drei Längen größer als die Summe der anderen beiden Längen ist, dann lässt sich kein Dreieck formen. (Wenn die Summe der beiden Längen gleich der dritten Länge ist, dann bilden Sie ein sogenanntes \"degeneriertes\" Dreieck.)*\n",
    "\n",
    "1. Schreiben Sie eine Funktion `is_triangle` die drei ganze Zahlen als Argumente erwartet und dann entweder \"Ja\" oder \"Nein\" ausgibt, abhängig davon, ob man mit den gegebenen Längen ein Dreieck formen kann oder nicht.\n",
Michel Schwab's avatar
Michel Schwab committed
    "2. Schreiben Sie eine Funktion, die die Nutzerin bittet, drei Längen einzugeben, diese in ganze Zahlen umwandelt und dann `is_triangle` nutzt, um zu prüfen, ob aus Stöcken mit den gegebenen Längen ein Dreieck geformt werden kann oder nicht."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
Michel Schwab's avatar
Michel Schwab committed
    "def is_triangle(a,b,c):\n",
    "    total=a+b+c\n",
    "    k=0\n",
    "    for i in (a,b,c):    \n",
    "        if(total-2*i)<0:\n",
    "            print('Nein nein nein!')\n",
    "            k=1\n",
    "            break\n",
    "    if k==0:\n",
    "        print('oh yes')\n",
    "\n",
    "\n",
    "is_triangle(2,1,4)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Aufgabe 4\n",
    "\n",
    "Was gibt das folgende Programm aus? Zeichnen Sie (mit Stift und Papier) ein Stapeldiagramm, das den Zustand des Programms ausgibt, wenn `recurse(3, 0)` aufgerufen wird: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def recurse(n, s):\n",
    "    if n == 0:\n",
    "        print(s)\n",
    "    else:\n",
    "        recurse(n-1, n+s)\n",
    "\n",
    "recurse(3, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Was würde passieren, wenn wir diese Funktion so aufrufen würden: `recurse(-1, 0)`?\n",
    "\n",
    "2. Schreiben Sie einen Docstring der alles erklärt, was man wissen sollte, um diese Funktion nutzen zu können (und nicht mehr!)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Die folgenden Aufgaben nutzen das `turtle`-Modul welches in [Kapitel 4](seminar04.ipynb) beschrieben wurde.\n",
    "\n",
    "#### Aufgabe 5\n",
    "Lesen Sie sich die folgende Funktion durch und versuchen Sie herauszufinden, was sie tut (schauen Sie sich auch die [Beispiele in Kapitel 4](seminar04.ipynb#4.12-%C3%9Cbung) an). Rufen Sie erst dann die Funktion auf und schauen Sie, ob Sie richtig liegen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw(t, length, n):\n",
    "    if n == 0:\n",
    "        return\n",
    "    angle = 50\n",
    "    t.fd(length*n)\n",
    "    t.lt(angle)\n",
    "    draw(t, length, n-1)\n",
    "    t.rt(2*angle)\n",
    "    draw(t, length, n-1)\n",
    "    t.lt(angle)\n",
    "    t.bk(length*n)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Pythagoras-Baum](https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Pythagoras_baum_Filled.png/610px-Pythagoras_baum_Filled.png)\n",
    "\n",
    "Die [Koch-Kurve](https://de.wikipedia.org/wiki/Koch-Kurve) ist ein [Fraktal](https://de.wikipedia.org/wiki/Fraktal), welches ungefähr so aussieht:\n",
    "\n",
    "![Kochkurve](http://greenteapress.com/thinkpython2/html/thinkpython2006.png)\n",
    "\n",
    "Um eine Koch-Kurve der Länge x zu zeichnen, müssen wir nur folgendes tun:\n",
    "1. Eine Koch-Kurve der Länge x/3 zeichnen.\n",
    "2. Um 60° nach links drehen.\n",
    "3. Eine Koch-Kurve der Länge x/3 zeichnen.\n",
    "2. Um 120° nach rechts drehen.\n",
    "3. Eine Koch-Kurve der Länge x/3 zeichnen.\n",
    "2. Um 60° nach links drehen.\n",
    "3. Eine Koch-Kurve der Länge x/3 zeichnen.\n",
    "\n",
    "Eine Ausnahme gibt es, falls x kleiner als 3 ist: dann zeichnen wir einfach eine Strecke der Länge 3.\n",
    "\n",
    "1. Schreiben Sie eine Funktion `koch`, die eine Schildkröte und eine Länge als Argumente erwartet und die Schildkröte nutzt, um eine Koch-Kurve der gegebenen Länge zu zeichnen.\n",
    "2. Schreiben Sie eine Funktion `schneeflocke`, die drei Koch-Kurven zeichnet, so dass sich der Umriss einer Schneeflocke ergibt.\n",
    "\n",
    "   Lösung: http://thinkpython2.com/code/koch.py\n",
    "3. Die Koch-Kurve kann auf verschiedene Art und Wiese verallgemeinert werden. Schauen Sie sich die [Beispiele auf Wikipedia](https://en.wikipedia.org/wiki/Koch_snowflake#Variants_of_the_Koch_curve) an und implementieren Sie ihren Favoriten."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import turtle\n",
    "# Implementieren Sie hier die Funktion koch\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Koch-Kurve in 3D](https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Koch_Curve_in_Three_Dimensions_%28%22Delta%22_fractal%29.jpg/480px-Koch_Curve_in_Three_Dimensions_%28%22Delta%22_fractal%29.jpg)\n",
    "\n",
    "([Eric Baird](https://commons.wikimedia.org/wiki/File:Koch_Curve_in_Three_Dimensions_%28%22Delta%22_fractal%29.jpg))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Speichern](https://amor.cms.hu-berlin.de/~jaeschkr/teaching/spp/floppy.png) Speichern Sie dieses Notebook, so dass Ihre Änderungen nicht verlorengehen (nicht auf einem Pool-Rechner). Klicken Sie dazu oben links auf das Disketten-Icon und nutzen Sie beispielsweise einen USB-Stick, E-Mail, Google Drive, Dropbox oder Ihre [HU-Box](https://box.hu-berlin.de/).  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Smiley](https://upload.wikimedia.org/wikipedia/commons/3/3e/Cool-smiley.svg)\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "Herzlichen Glückwunsch! Sie haben das 5. Kapitel geschafft. Weiter geht es in [6: Ertragreiche Funktionen](seminar06.ipynb)."
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}