inf-abi2027/01 Einführung/04 Schleifen/04 Übungen.ipynb

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
}