Skip to content
Snippets Groups Projects
hausaufgabe1.ipynb 10.4 KiB
Newer Older
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "# 1. 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 (hausaufgabe1.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.\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartner1_nachnamePartner2.ipynb**\n",
    "\n",
    "Nutzen Sie das Wissen aus den bisher bearbeiteten Notebooks (1-3). \n",
    "\n",
Michel Schwab's avatar
Michel Schwab committed
    "Wir wünschen viel Erfolg beim Lösen der Aufgaben!\n",
    "\n",
    "**Tipp**: Nutzen Sie http://pythontutor.com, um ihren Code nachvollziehen zu können und Fehler zu finden!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "## Aufgabe 1\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(2 + 3)\n",
    "print(2.2 + 3.3)\n",
    "print('2' + '3')\n",
    "print('2.2' + '3.3')\n",
    "print(str(2) + str(3))\n",
    "print(str(2.2) + str(3.3))\n",
    "print(int('2') + int('3'))\n",
    "print(int('2' + '3'))\n",
    "print(float('2') + float('3'))\n",
    "print(float('2' + '3'))\n",
    "print(int(2.6 + 2.6))\n",
Michel Schwab's avatar
Michel Schwab committed
    "print(int(2.6) + int(2.6))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aufgabe 2\n",
    "\n",
    "Ihre Aufgabe ist es, eine Funktion `boxprint` zu implementieren, die eine als Argument übergegebene Zeichenkette innerhalb einer Box ausgibt. Die horizontalen Linien der Box sollen durch `-` erzeugt werden, die vertikalen Linien durch `|` und die Ecken durch `+`. Zwischen der Zeichenkette und dem linken und rechten Rand der Box soll jeweils genau ein Leerzeichen stehen. \n",
    "\n",
    "Beispiel: Bei Übergabe des Arguments `Hello World!` soll die Funktion folgende Ausgabe erzeugen:"
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```\n",
    "+--------------+\n",
    "| Hello World! |\n",
    "+--------------+\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Überlegen Sie zunächst, wie Sie das Problem lösen könnten und beschreiben Sie hier kurz ihre Überlegungen bzw. ihr Vorgehen:\n",
    "\n",
    "- \n",
    "- \n",
    "- \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
schwabmi's avatar
schwabmi committed
    "# Implementieren Sie hier ihre Funktion boxprint\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
    "boxprint(\"Hello World!\")\n",
schwabmi's avatar
schwabmi committed
    "boxprint(\"Dieser Text muss auch in die Box passen.\")\n",
    "boxprint(\"und dieser Text auch..................................................... !\")"
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Mit dem Linux-Programm [cowsay](https://en.wikipedia.org/wiki/Cowsay) kann man verschiedene Tiere \"Sprüche klopfen\" lassen:\n",
    "\n",
    "```\n",
    " ________\n",
    "< Muuuh! >\n",
    " --------\n",
    "        \\   ^__^\n",
    "         \\  (oo)\\_______\n",
    "            (__)\\       )\\/\\\n",
    "                ||----w |\n",
    "                ||     ||\n",
    "```\n",
    "\n",
    "Schreiben Sie eine Funktion `stegosay`, die einen als Argument übergebenen Text folgendermaßen ausgibt:\n",
    "\n",
    "```\n",
    " ___________________________\n",
    "( Wo bleibt mein Frühstück? )\n",
    " ---------------------------\n",
    "o                             .       .\n",
    " o                           / `.   .' ' \n",
    "  o                  .---.  <    > <    >  .---.\n",
    "   o                 |    \\  \\ - ~ ~ - /  /    |\n",
    "         _____          ..-~             ~-..-~\n",
    "        |     |   \\~~~\\.'                    `./~~~/\n",
    "       ---------   \\__/                        \\__/\n",
    "      .'  O    \\     /               /       \\  ' \n",
    "     (_____,    `._.'               |         }  \\/~~~/\n",
    "      `----.          /       }     |        /    \\__/\n",
    "            `-.      |       /      |       /      `. ,~~|\n",
    "                ~-.__|      /_ - ~ ^|      /- _      `..-'   \n",
    "                     |     /        |     /     ~-.     `-. _  _  _\n",
    "                     |_____|        |_____|         ~ - . _ _ _ _ _>\n",
    "```\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "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",
    "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."
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
schwabmi's avatar
schwabmi committed
   "source": [
    "# Implementieren Sie hier ihre Funktion stegosay\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
    "stegosay(\"Wo bleibt mein Frühstück?\")\n",
    "stegosay(\"Dieser Text muss auch in die Box passen.\")\n",
    "stegosay(\"und dieser Text auch..................................................... !\")"
   ]
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aufgabe 3\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "\n",
    "Schreiben Sie eine Funktion `sinprint`, die die Sinusfunktion (`math.sin`) im Bereich zwischen 0 und 2π um 90° gedreht ausgibt, also ungefähr so:\n",
    "\n",
    "```\n",
    "          *\n",
    "           *\n",
    "             *\n",
    "               *\n",
    "                 *\n",
    "                  *\n",
    "                   *\n",
    "                   *\n",
    "                   *\n",
    "                   *\n",
    "                   *\n",
    "                  *\n",
    "                *\n",
    "               *\n",
    "             *\n",
    "           *\n",
    "         *\n",
    "       *\n",
    "     *\n",
    "   *\n",
    "  *\n",
    " *\n",
    "*\n",
    "*\n",
    "*\n",
    "*\n",
    " *\n",
    "  *\n",
    "   *\n",
    "     *\n",
    "       *\n",
    "         *\n",
    "```\n",
    "Hinweise:\n",
    "- Sie können die Aufgabe auch ohne eine Schleife lösen, aber schöner ist es mit einer Schleife. Sie kennen die Syntax und Semantik der `while`-Schleife schon aus der Vorlesung. Sie funktioniert in Python genau so, wie sie für den Pseudocode definiert wurde. \n",
    "- Sie müssen selbst entscheiden, wieviele Werte Sie im verlangten Intervall berechnen. Die Kurve oben wurde mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2). \n",
    "- Denken Sie daran, dass Sie mit der `int`-Funktion eine Gleitkommazahl in eine ganze Zahl umwandeln können (der Dezimalanteil wird abgeschnitten).\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "- Damit Sie die Funktion `math.sin` nutzen können, müssen Sie anfangs das `math`-Modul importieren."
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sinprint():\n",
    "    # Implementieren Sie hier die Funktion sinprint\n",
schwabmi's avatar
schwabmi committed
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "\n",
    "sinprint() # Testaufruf"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ändern Sie die Funktion `sinprint`, so dass eine beliebige Funktion gezeichnet werden kann. Diese Funktion sollte als Argument übergeben werden können. Also beispielsweise so:\n",
    "\n",
    "```python\n",
    "funcprint(math.sin)\n",
    "```\n",
    "\n",
    "Ändern Sie gleich auch den Namen der Funktion zu `funcprint`, da sie ja jetzt nicht nur die Sinusfunktion ausgeben kann. (In der 2. Aufgabe des 3. Jupyter-Notebooks haben wir die Funktion `do_twice` kennengelernt - dort sehen Sie, wie Sie Funktionen als Argumente übergeben und verwenden können.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Implementieren Sie hier die Funktion funcprint\n",
schwabmi's avatar
schwabmi committed
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "# Testen Sie hier die Funktion funcprint\n",
    "funcprint(math.erf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wenn alles geklappt hat, enthält Ihre Funktion jetzt einige Werte, die als Literale angegeben sind, z.B.\n",
    "- den Anfangs- und Endwert des Intervalls, in dem die Funktion gezeichnet werden soll\n",
    "- die Schrittweite\n",
    "- die Skalierung (Vergrößerung)\n",
    "- die Verschiebung des Nullpunkts\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)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Smiley](https://upload.wikimedia.org/wikipedia/commons/0/0f/Face-glasses.svg)"
   ]
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}