408 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			408 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
| {
 | |
|  "cells": [
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "e77a8d37-be27-42fe-84a4-7b762e26f730",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "import { assertEquals } from \"jsr:@std/assert\"\n",
 | |
|     "import \"https://git.amgdhg.de/kg/tslib/raw/branch/main/logger.ts?5\""
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "id": "b4399c83-ae7b-44dd-b786-d85bff292661",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "source": [
 | |
|     "# Aufgabe 01.04.4 - größter gemeinsamer Teiler\n",
 | |
|     "\n",
 | |
|     "Programmiere eine Methode `ggT`, die 2 Zahlen `a` und `b` als Parameter annimmt und den größten gemeinsamen Teiler dieser Zahlen bestimmt und diesen als Ergebnis zurückgibt.\n",
 | |
|     "\n",
 | |
|     "#### Hinweis 1:\n",
 | |
|     "der größte gemeinsame Teiler `ggT` ist die ganze Zahl ≥1, die sowohl ein Teiler von `a` ist, als auch ein Teiler von `b`. Gleichzeitig ist der `ggT` auch die größte Zahl, die diese Bedingungen erfüllt.\n",
 | |
|     "\n",
 | |
|     "#### Hinweis 2:\n",
 | |
|     "die Teilbarkeit überprüft man, indem man Modulo rechnet. Gilt `a % t === 0` so ist `t` ein Teiler von `a`. (D.h. beim Teilen von `a` durch `t` gibt es den Rest `0`)\n",
 | |
|     "\n",
 | |
|     "#### Beispiel:\n",
 | |
|     "`ggT(6,15)=3`\n",
 | |
|     "\n",
 | |
|     "#### Tipp zur Programmierung:\n",
 | |
|     "beginne bei `t = a` und zähle dann `t` so lange runter, bis `t` ein Teiler von `a` und `b` ist."
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "0a26736e-986c-4a54-bd6d-b41e8c48332f",
 | |
|    "metadata": {
 | |
|     "editable": true,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": []
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "6420fb99-b5db-41b4-b8ca-e9e8d57522da",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "jupyter": {
 | |
|      "source_hidden": true
 | |
|     },
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "Deno.test(\"01.04.4: function\", () => {\n",
 | |
|     "    assertEquals(typeof ggT, 'function')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: Parameter\", () => {\n",
 | |
|     "    assertEquals(ggT.length, 2)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(1,1)=1\", () => {\n",
 | |
|     "    assertEquals(ggT(1,1), 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(1,2)=1\", () => {\n",
 | |
|     "    assertEquals(ggT(1,2), 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(2,3)=1\", () => {\n",
 | |
|     "    assertEquals(ggT(2,3), 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(2,4)=2\", () => {\n",
 | |
|     "    assertEquals(ggT(2,4), 2)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(15,6)=3\", () => {\n",
 | |
|     "    assertEquals(ggT(15,6), 3)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(12,18)=6\", () => {\n",
 | |
|     "    assertEquals(ggT(12,18), 6)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(18,12)=6\", () => {\n",
 | |
|     "    assertEquals(ggT(18,12), 6)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(15,45)=15\", () => {\n",
 | |
|     "    assertEquals(ggT(15,45), 15)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.4: ggT(45,15)=15\", () => {\n",
 | |
|     "    assertEquals(ggT(45,15), 15)\n",
 | |
|     "})"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "id": "d6b3211a-cc44-404d-84c5-93aba9b53155",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "source": [
 | |
|     "# Aufgabe 01.04.5 - Fibonacci-Folge\n",
 | |
|     "\n",
 | |
|     "Programmiere eine Methode `fibonacci` die einen Zahl als Parameter entgegennimmt und die Fibonacci-Folge auf der Konsole ausgibt bis zur angegebenen Zahl (oder kleiner).\n",
 | |
|     "\n",
 | |
|     "#### Hinweis:\n",
 | |
|     "Die Fibonacci-Folge ist folgendermaßen definiert: man beginnt mit den Zahlen 0 und 1. Die jeweils folgende Zahl ist die Summe der beiden Vorgänger.\n",
 | |
|     "\n",
 | |
|     "#### Beispiel:\n",
 | |
|     "0,1,1,2,3,5,8,13,21,34,55,89,144,...\n",
 | |
|     "\n",
 | |
|     "#### Hinweis zur Ausgabe:\n",
 | |
|     "Wird als Parameter `10` angegeben, soll die Fibonacci nach der 8 abbrechen. Gib jede Zahl mit `console.log` ohne Komma aus.\n",
 | |
|     "\n",
 | |
|     "#### Tipp zur Programmierung:\n",
 | |
|     "Speichere die beiden Zahlen in Variablen ab und überlege dir, was du wann addieren und zuweisen musst"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "7eb0df34-14be-4854-9a37-5bae80607753",
 | |
|    "metadata": {
 | |
|     "editable": true,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": []
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "8b02d832-1cc3-4d0d-a8fc-b377bf8b5e7e",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "jupyter": {
 | |
|      "source_hidden": true
 | |
|     },
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "Deno.test(\"01.04.5: function\", () => {\n",
 | |
|     "    assertEquals(typeof fibonacci, 'function')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: Parameter\", () => {\n",
 | |
|     "    assertEquals(fibonacci.length, 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: fibonacci(0)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    fibonacci(0)\n",
 | |
|     "    assertEquals(console.end(), '0')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: fibonacci(1)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    fibonacci(1)\n",
 | |
|     "    assertEquals(console.end(), '0\\n1\\n1')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: fibonacci(6)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    fibonacci(6)\n",
 | |
|     "    assertEquals(console.end(), '0\\n1\\n1\\n2\\n3\\n5')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: fibonacci(10)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    fibonacci(10)\n",
 | |
|     "    assertEquals(console.end(), '0\\n1\\n1\\n2\\n3\\n5\\n8')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: fibonacci(100)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    fibonacci(100)\n",
 | |
|     "    assertEquals(console.end(), '0\\n1\\n1\\n2\\n3\\n5\\n8\\n13\\n21\\n34\\n55\\n89')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.5: fibonacci(500)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    fibonacci(500)\n",
 | |
|     "    assertEquals(console.end(), '0\\n1\\n1\\n2\\n3\\n5\\n8\\n13\\n21\\n34\\n55\\n89\\n144\\n233\\n377')\n",
 | |
|     "})"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "id": "fd3274ce-bd67-4d1e-9329-c386a4a461ec",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "source": [
 | |
|     "# Aufgabe 01.04.6 - Collatz-Folge\n",
 | |
|     "\n",
 | |
|     "Die Collatz-Folge ist folgendermaßen definiert:\n",
 | |
|     "* beginne bei einer Zahl `x`\n",
 | |
|     "* ist die Zahl `x` gerade, so ist die nächste Zahl `x/2`\n",
 | |
|     "* ist die Zahl `x` ungerade, so ist die nächste Zahl `3*x + 1`\n",
 | |
|     "* die Folge endet, wenn man bei 1 angekommen ist.\n",
 | |
|     "\n",
 | |
|     "Programmiere eine Methode `collatz`, die einen Startwert als Parameter bekommt und ausgehend davon die Collatz-Folge ausgibt.\n",
 | |
|     "\n",
 | |
|     "#### Beispiele:\n",
 | |
|     "* 3,10,5,16,8,4,2,1\n",
 | |
|     "* 7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1\n",
 | |
|     "\n",
 | |
|     "#### Hinweis zur Ausgabe:\n",
 | |
|     "Gib jede Zahl mit `console.log` ohne Komma aus."
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "238eece7-d51b-4776-acaa-27c4a1ccbb98",
 | |
|    "metadata": {
 | |
|     "editable": true,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": []
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "f65373b5-e2de-4b58-9966-2c6883607cc3",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "jupyter": {
 | |
|      "source_hidden": true
 | |
|     },
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "Deno.test(\"01.04.6: function\", () => {\n",
 | |
|     "    assertEquals(typeof collatz, 'function')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: Parameter\", () => {\n",
 | |
|     "    assertEquals(collatz.length, 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: collatz(0)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    collatz(0)\n",
 | |
|     "    assertEquals(console.end(), '0')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: collatz(1)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    collatz(1)\n",
 | |
|     "    assertEquals(console.end(), '1')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: collatz(2)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    collatz(2)\n",
 | |
|     "    assertEquals(console.end(), '2\\n1')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: collatz(5)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    collatz(5)\n",
 | |
|     "    assertEquals(console.end(), '5\\n16\\n8\\n4\\n2\\n1')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: collatz(7)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    collatz(7)\n",
 | |
|     "    assertEquals(console.end(), '7\\n22\\n11\\n34\\n17\\n52\\n26\\n13\\n40\\n20\\n10\\n5\\n16\\n8\\n4\\n2\\n1')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.6: collatz(97)\", () => {\n",
 | |
|     "    console.start(false)\n",
 | |
|     "    collatz(97)\n",
 | |
|     "    assertEquals(console.end(), '97\\n292\\n146\\n73\\n220\\n110\\n55\\n166\\n83\\n250\\n125\\n376\\n188\\n94\\n47\\n142\\n71\\n214\\n107\\n322\\n161\\n484\\n242\\n121\\n364\\n182\\n91\\n274\\n137\\n412\\n206\\n103\\n310\\n155\\n466\\n233\\n700\\n350\\n175\\n526\\n263\\n790\\n395\\n1186\\n593\\n1780\\n890\\n445\\n1336\\n668\\n334\\n167\\n502\\n251\\n754\\n377\\n1132\\n566\\n283\\n850\\n425\\n1276\\n638\\n319\\n958\\n479\\n1438\\n719\\n2158\\n1079\\n3238\\n1619\\n4858\\n2429\\n7288\\n3644\\n1822\\n911\\n2734\\n1367\\n4102\\n2051\\n6154\\n3077\\n9232\\n4616\\n2308\\n1154\\n577\\n1732\\n866\\n433\\n1300\\n650\\n325\\n976\\n488\\n244\\n122\\n61\\n184\\n92\\n46\\n23\\n70\\n35\\n106\\n53\\n160\\n80\\n40\\n20\\n10\\n5\\n16\\n8\\n4\\n2\\n1')\n",
 | |
|     "})"
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "markdown",
 | |
|    "id": "6ab68dbf-26c0-4e28-b75d-17fd9afaaf23",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "source": [
 | |
|     "# Aufgabe 01.04.6 - Länge der Collatz-Folge\n",
 | |
|     "\n",
 | |
|     "Modifiziere deine Programmierung von oben so und programmiere diese als Funktion `collatzlaenge`, dass die Funktion als Rückgabewert (mit `return`) die Anzahl der Zahlen zurückgibt. Die Ausgabe auf der Konsole kannst du dabei weglassen.\n",
 | |
|     "\n",
 | |
|     "#### Beispiel:\n",
 | |
|     "* `collatzlaenge(3)=8` (da 3,10,5,16,8,4,2,1 -> 8 Zahlen)\n",
 | |
|     "* `collatzlaenge(7)=17` (da 7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1 -> 17 Zahlen)\n",
 | |
|     "\n",
 | |
|     "#### Zusatzaufgabe:\n",
 | |
|     "Finde mit dieser Hilfe die Startzahl ≤100, die die längste Collatzfolge erzeugt."
 | |
|    ]
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "031e69cd-e7ce-4495-89ce-a265425cf809",
 | |
|    "metadata": {
 | |
|     "editable": true,
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": []
 | |
|   },
 | |
|   {
 | |
|    "cell_type": "code",
 | |
|    "execution_count": null,
 | |
|    "id": "11bc9be9-218f-4677-b08e-3ad1386e2aec",
 | |
|    "metadata": {
 | |
|     "editable": false,
 | |
|     "jupyter": {
 | |
|      "source_hidden": true
 | |
|     },
 | |
|     "slideshow": {
 | |
|      "slide_type": ""
 | |
|     },
 | |
|     "tags": []
 | |
|    },
 | |
|    "outputs": [],
 | |
|    "source": [
 | |
|     "Deno.test(\"01.04.7: function\", () => {\n",
 | |
|     "    assertEquals(typeof collatzlaenge, 'function')\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: Parameter\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge.length, 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(1)=1\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(1), 1)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(7)=17\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(7), 17)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(13)=10\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(13), 10)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(32)=6\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(32), 6)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(51)=25\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(51), 25)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(82)=111\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(82), 111)\n",
 | |
|     "})\n",
 | |
|     "Deno.test(\"01.04.7: collatzlaenge(100)=26\", () => {\n",
 | |
|     "    assertEquals(collatzlaenge(100), 26)\n",
 | |
|     "})"
 | |
|    ]
 | |
|   }
 | |
|  ],
 | |
|  "metadata": {
 | |
|   "kernelspec": {
 | |
|    "display_name": "Deno",
 | |
|    "language": "typescript",
 | |
|    "name": "deno"
 | |
|   },
 | |
|   "language_info": {
 | |
|    "codemirror_mode": "typescript",
 | |
|    "file_extension": ".ts",
 | |
|    "mimetype": "text/x.typescript",
 | |
|    "name": "typescript",
 | |
|    "nbconvert_exporter": "script",
 | |
|    "pygments_lexer": "typescript",
 | |
|    "version": "5.8.3"
 | |
|   }
 | |
|  },
 | |
|  "nbformat": 4,
 | |
|  "nbformat_minor": 5
 | |
| }
 |