{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "a4da169d-0317-491c-8a5a-1b9091cecf88", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "
\n", "
\n", "

Ingenieurinformatik – Übung

\n", " Lehrstuhl Computational Civil Engineering
\n", " Kontakt: Email senden | Individuelle Kontakte siehe Webseite des Lehrstuhls
\n", " Links: \n", " Vorlesungsskript | \n", " Webseite des Lehrstuhls\n", "
\n", "
\n", " \n", "
\n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "id": "c070b20e", "metadata": {}, "source": [ "# Fehlersuche\n", "Bei der Programmierung von Algorithmen kommt es nicht selten vor, dass sich unerwartete Fehler einschleichen. Manche Fehler werden vom Interpreter bereits vor der Durchführung angemerkt, einige treten erst während der Durchführung auf und bei anderen läuft das Programm ohne Problem bis zum Ende durch doch das Ergebnis ist falsch.\n", "\n", "In den ersten beiden Fällen lässt sich der Fahler anhand der Fehlermeldung leicht beheben. Im dritt genannten Fall muss dieser manuell erkannt werden oder explizit geprüft werden.\n", "\n", "Bevor Sie mit den Aufgaben starten, überlegen Sie sich einen repräsentativen Fehler für jede der zuvor genannten drei Kategorien." ] }, { "attachments": {}, "cell_type": "markdown", "id": "a1c78a1b", "metadata": {}, "source": [ "## Fakultät\n", "Das folgende Programm soll die Fakultät berechnen.\n", "\n", "1. Beschreiben Sie den Fehler der hier vor liegt in eigenen Worten, mit Begründung warum dieser eintritt.\n", "2. Beheben Sie das Problem" ] }, { "cell_type": "code", "execution_count": 12, "id": "4cbce64f", "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (721807614.py, line 5)", "output_type": "error", "traceback": [ "Cell In[1], line 5\n for i in range(1, n +):\n ^\nSyntaxError: invalid syntax\n" ] } ], "source": [ "def fakultaet(n):\n", " if n == 0:\n", " return 1\n", " wert = 1\n", " for i in range(1, n +):\n", " wert *= i\n", " return wert\n", "\n", "print(fakultaet(5))" ] }, { "attachments": {}, "cell_type": "markdown", "id": "190508e5", "metadata": {}, "source": [ ":::{toggle} \n", "1. Es handelt sich um einen Syntaxfehler. Das Programm kann auf Grund falscher Eingabe nicht interpretiert werden. Nach dem `n +` wurde eine Zahl vergessen. \n", ":::" ] }, { "cell_type": "code", "execution_count": 13, "id": "c4d7eef2", "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "120\n" ] } ], "source": [ "def fakultaet(n):\n", " if n == 0:\n", " return 1\n", " wert = 1\n", " for i in range(1, n + 1):\n", " wert *= i\n", " return wert\n", "\n", "print(fakultaet(5))" ] }, { "attachments": {}, "cell_type": "markdown", "id": "8d87e1b5-f405-413e-af0d-7ed19db37279", "metadata": {}, "source": [ "## Addition von Listen\n", "Das folgende Programm soll zwei Listen elementweise addieren und anschließend den\n", "maximalen Wert ausgeben. Jedoch hat sich in dem Programm ein Fehler eingeschlichen\n", "und es wird ein falscher Wert ausgegeben.\n", "\n", "1. Ermitteln Sie den richtigen Rückgabewert.\n", "2. Beschreiben Sie den Grund für den Fehler\n", "3. Bearbeiten Sie das Programm so, dass der richtige Wert ausgegeben wird." ] }, { "cell_type": "code", "execution_count": 5, "id": "159bf01f-905d-4f72-85c0-9e5d0012de91", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der maximale Wert beträgt: 8\n" ] } ], "source": [ "liste1 = [1, 2, 3, 4]\n", "liste2 = [5, 6, 7, 8]\n", "\n", "addition = liste1 + liste2\n", "\n", "maximaler_wert = max(addition)\n", "\n", "print(\"Der maximale Wert beträgt:\", maximaler_wert)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "57e12537-649b-4cde-af93-973be8921753", "metadata": { "tags": [] }, "source": [ "### Lösung" ] }, { "attachments": {}, "cell_type": "markdown", "id": "01b9c3d7-6df1-4479-90ca-8cc8681efc7f", "metadata": { "tags": [] }, "source": [ ":::{toggle} \n", "1. 12\n", "2. Die standard Python Listen werden durch den Plus Operator nicht elementweise addiert\n", "sondern verbunden. \n", ":::" ] }, { "cell_type": "code", "execution_count": 6, "id": "d9c1a795-0273-4caa-bf52-d5210bf67193", "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der maximale Wert beträgt: 12\n" ] } ], "source": [ "import numpy as np\n", "\n", "list1 = np.array([1, 2, 3, 4])\n", "list2 = np.array([5, 6, 7, 8])\n", "\n", "addition = list1 + list2\n", "\n", "maximaler_wert = max(addition)\n", "\n", "print(\"Der maximale Wert beträgt:\", maximaler_wert)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "02f6d61c", "metadata": {}, "source": [ "## Absoluter Wert\n", "Das folgende Programm soll zuerst das Vorzeichen eines Wertes ermitteln und dann durch Multiplikation den absoluten Wert berechnen.\n", "\n", "1. Beschreiben Sie den Fehler der hier vor liegt in eigenen Worten, mit Begründung warum dieser eintritt.\n", "2. Beheben Sie das Problem" ] }, { "cell_type": "code", "execution_count": 1, "id": "afe11997", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der absolute Wert von -5 ist 5\n" ] }, { "ename": "TypeError", "evalue": "unsupported operand type(s) for *: 'NoneType' and 'int'", "output_type": "error", "traceback": [ "Der absolute Wert von -5 ist 5\n", "\n", "---------------------------------------------------------------------------\n", "TypeError Traceback (most recent call last)\n", " Zelle 1 in ()\n", " 9 print(\"Der absolute Wert von\", zahl_1, \"ist\", absolute_zahl_1)\n", " 11 zahl_2 = 20\n", "---> 12 absolute_zahl_2 = vorzeichen(zahl_2) * zahl_2\n", " 13 print(\"Der absolute Wert von\", zahl_2, \"ist\", absolute_zahl_2)\n", "\n", "TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'" ] } ], "source": [ "def vorzeichen(wert):\n", " if wert < 0:\n", " return -1\n", " else:\n", " 1\n", "\n", "zahl_1 = -5\n", "absolute_zahl_1 = vorzeichen(zahl_1) * zahl_1\n", "print(\"Der absolute Wert von\", zahl_1, \"ist\", absolute_zahl_1)\n", "\n", "zahl_2 = 20\n", "absolute_zahl_2 = vorzeichen(zahl_2) * zahl_2\n", "print(\"Der absolute Wert von\", zahl_2, \"ist\", absolute_zahl_2)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "456ef2f9", "metadata": {}, "source": [ "### Lösung" ] }, { "attachments": {}, "cell_type": "markdown", "id": "1cfaecfa", "metadata": {}, "source": [ ":::{toggle} \n", "1. Die Funktion `vorzeichen` gibt im Falle einer positiven Zahl keinen Wert zurück, da ein `return` fehlt. Bei der Multiplikation mit der zweiten Zahl wird somit ein `NoneType` mit einem `int` multipliziert, was jedoch nicht möglich ist. \n", ":::" ] }, { "cell_type": "code", "execution_count": 1, "id": "d0cb3741", "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der absolute Wert von -5 ist 5\n", "Der absolute Wert von 20 ist 20\n" ] } ], "source": [ "def vorzeichen(wert):\n", " if wert < 0:\n", " return -1\n", " else:\n", " # Hier musste return ergänzt werden.\n", " return 1\n", "\n", "zahl_1 = -5\n", "absolute_zahl_1 = vorzeichen(zahl_1) * zahl_1\n", "print(\"Der absolute Wert von\", zahl_1, \"ist\", absolute_zahl_1)\n", "\n", "zahl_2 = 20\n", "absolute_zahl_2 = vorzeichen(zahl_2) * zahl_2\n", "print(\"Der absolute Wert von\", zahl_2, \"ist\", absolute_zahl_2)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" } }, "nbformat": 4, "nbformat_minor": 5 }