From 577d513e6185a5bbef7158e2da129abaee499d19 Mon Sep 17 00:00:00 2001 From: Benjamin Stamm <stamm@nmh10.mathematik.uni-stuttgart.de> Date: Mon, 30 Oct 2023 18:04:49 +0100 Subject: [PATCH] changed a few things in WS3 --- 2_Advanced_Data_Types_de.ipynb | 2 +- 2_Advanced_Data_Types_en.ipynb | 2 +- src/3_Data_Types_Multiple_Dispatch.ipynb | 94 ++++++++++++++++++++++-- 3 files changed, 88 insertions(+), 10 deletions(-) diff --git a/2_Advanced_Data_Types_de.ipynb b/2_Advanced_Data_Types_de.ipynb index 36325fc..77ace2d 100644 --- a/2_Advanced_Data_Types_de.ipynb +++ b/2_Advanced_Data_Types_de.ipynb @@ -1125,7 +1125,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.3", + "display_name": "julia 1.9.3", "language": "julia", "name": "julia-1.9" }, diff --git a/2_Advanced_Data_Types_en.ipynb b/2_Advanced_Data_Types_en.ipynb index 5161c0b..c7f953b 100644 --- a/2_Advanced_Data_Types_en.ipynb +++ b/2_Advanced_Data_Types_en.ipynb @@ -1126,7 +1126,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.3", + "display_name": "julia 1.9.3", "language": "julia", "name": "julia-1.9" }, diff --git a/src/3_Data_Types_Multiple_Dispatch.ipynb b/src/3_Data_Types_Multiple_Dispatch.ipynb index 65a408d..87d4a2c 100644 --- a/src/3_Data_Types_Multiple_Dispatch.ipynb +++ b/src/3_Data_Types_Multiple_Dispatch.ipynb @@ -22,7 +22,7 @@ "source": [ "# Datentypen und Multiple Dispatch\n", "\n", - "In diesem Notizbuch werden wir die grundlegenden Konzepte von Julias Typsystem erforschen und Multiple Dispatch verstehen, wobei wir uns konzentrieren auf:\n", + "In diesem Arbeitsblatt werden wir die grundlegenden Konzepte von Julias Typsystem erforschen und Multiple Dispatch verstehen, wobei wir uns konzentrieren auf:\n", "\n", "- Abstrakte und Konkrete Typen\n", "- Dynamische Typen\n", @@ -124,7 +124,7 @@ "metadata": {}, "outputs": [], "source": [ - "@show Int32 <: Integer # Read Int32 is a sub-type of Integer\n", + "@show Int32 <: Integer # Read:Int32 is a sub-type of Integer\n", "@show UInt16 <: Integer # UInt16 is a sub-type of Integer\n", "@show Float32 <: Integer # Float32 is not a sub-type of Integer\n", "@show Float32 <: Number # Float32 is a sub-type of Number\n", @@ -660,7 +660,24 @@ "metadata": {}, "outputs": [], "source": [ - "# TODO: implement your code\n" + "# TODO: implement your code\n", + "abstract type Bird <: Animal end # Abstract type\n", + "\n", + "struct Taubeb <: Bird\n", + " name::String\n", + " age::Int\n", + " Beute::String\n", + "end\n", + "\n", + "struct Falke <: Bird\n", + " Beute::String\n", + " MaxSpeed::Float64\n", + "end\n", + "\n", + "print_type_tree(Animal)\n", + "\n", + "a_Taube = Taubeb(\"F\", 2, \"Maus\")\n", + "a_Falke = Falke(\"Wiesel\", 200)\n" ] }, { @@ -698,7 +715,8 @@ "metadata": {}, "outputs": [], "source": [ - "# TODO: implement your code\n" + "# TODO: implement your code\n", + "Float64 <: AbstractFloat" ] }, { @@ -783,7 +801,7 @@ " function backen(kartoffeln::Kartoffeln)\n", " function braten(kartoffeln::Kartoffeln)\n", " function backen(fisch::Fisch)\n", - " function braten(fisch::Fisch)\n", + " function braten(fisch::Fisch) \n", " ```\n", "\n", "Auf diese Weise erfordert das Hinzufügen eines neuen Rezepts für eine bestimmte Art von Lebensmittel keine Änderungen an bereits geschriebenen Dingen.\n", @@ -1461,7 +1479,7 @@ "\n", "Diese Übung befasst sich mit dem Schreiben eines benutzerdefinierten Datentyps für Polynome, einer Reihe von Konstruktoren dafür und Funktionen zum Durchführen von Operationen an ihnen. **Hinweis:** Das Schreiben benutzerdefinierter Polynome auf diese Weise ist weder effizient noch bequem, aber es ist ein gutes Beispiel für die bisher behandelten Themen.\n", "\n", - "- Implementieren Sie einen neuen abstrakten Datentyp `AbstractPolynomial`. Dann implementieren Sie einige konkrete Untertypen, `PolynomialDegree0`, `PolynomialDegree1`, `PolynomialDegree2` und `PolynomialArbitraryDegree`. **Tipp:** Verwenden Sie ein Wörterbuch, um die Koeffizienten auf konsistente Weise zwischen den verschiedenen Untertypen zu speichern: Sie können die Potenz von `x` als Schlüssel für den Koeffizientenwert verwenden.\n", + "- Implementieren Sie einen neuen abstrakten Datentyp `AbstractPolynomial`. Dann implementieren Sie einige konkrete Untertypen, `PolynomialDegree0`, `PolynomialDegree1`, `PolynomialDegree2` und `PolynomialArbitraryDegree`. **Tipp:** Verwenden Sie eine Zuordnungstabelle, um die Koeffizienten auf konsistente Weise zwischen den verschiedenen Untertypen zu speichern: Sie können die Potenz von `x` als Schlüssel für den Koeffizientenwert verwenden.\n", "\n", "- Schreiben Sie einen Konstruktor für jeden von ihnen, der die Koeffizienten als Eingabe erhält. **Tipp:** Verwenden Sie `args::Real...`, um eine beliebige Anzahl von Argumenten zu sammeln. Die Angabe des Typs ist wichtig, um Unklarheiten beim Aufruf mit einem Argument zu vermeiden (versuchen Sie, `Real` nicht anzugeben, um das Problem zu sehen).\n", "\n", @@ -1481,13 +1499,73 @@ "metadata": {}, "outputs": [], "source": [ - "# TODO: implement your code here.\n" + "# TODO: implement your code here.\n", + "abstract type AbstractPolynomial end # Abstract type\n", + "\n", + "struct PolynomialDegree0 <: AbstractPolynomial\n", + " coeff::Dict\n", + "end\n", + "\n", + "struct PolynomialDegree1 <: AbstractPolynomial\n", + " coeff::Dict\n", + "end\n", + "\n", + "struct PolynomialDegree2 <: AbstractPolynomial\n", + " coeff::Dict\n", + "end\n", + "\n", + "struct PolynomialArbitraryDegree <: AbstractPolynomial\n", + " coeff::Dict\n", + "end\n", + "\n", + "function PolynomialDegree0(a0::Real) \n", + " coeff[0] = a0\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f6258d48-096e-4c7f-b9d3-aa1bc1db744e", + "metadata": {}, + "outputs": [], + "source": [ + "print_type_tree(AbstractPolynomial)\n", + "a = PolynomialDegree0(2.0)\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c0412892-8a47-4583-a0e1-92d2927f4d0d", + "metadata": {}, + "outputs": [], + "source": [ + "c[1] = 3.2\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "deef05e8-a7c1-4c92-8db0-8c6ab510888d", + "metadata": {}, + "outputs": [], + "source": [ + "c\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "757d616e-4479-4755-ae71-3af310453a00", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.3", + "display_name": "julia 1.9.3", "language": "julia", "name": "julia-1.9" }, -- GitLab