{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "4d0577ad-58c8-43b9-acf1-e1c29f455600", "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\"" ] }, { "cell_type": "markdown", "id": "e6f8e242-3a62-41ce-a36f-fe47c7d49528", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Minimumsuche\n", "\n", "Bei der Minimumsuche sucht man das kleinste Element in einer Liste bzw. einem Array." ] }, { "cell_type": "markdown", "id": "8699de81-f9a2-446a-8680-bb375e9a2f80", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Beschreibe zunächst in eigenen Worten, wie die Minimumsuche funktioniert, also wie in einem gegebenen, unsortierten Array der kleinste Wert herausgefunden werden kann:" ] }, { "cell_type": "raw", "id": "5ae9059b-e617-4b07-a1dd-4ba4e82bf09a", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [] }, { "cell_type": "markdown", "id": "57cfea67-8905-4a13-a01a-089283cbcaf9", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Aufgabe 02.01.1: Zufallszahlengenerator\n", "\n", "Programmiere einen Funktion `zufall`, die\n", "* einen Parameter `laenge` übergeben bekommt und\n", "* ein Array der mit `laenge` zufällig erzeugten Zahlen zurückgibt" ] }, { "cell_type": "code", "execution_count": null, "id": "d8525ccd-859d-44df-9806-a6ac11ccfa66", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "28ec1840-3feb-4744-9893-573c0cc4f81b", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "let _nr = \"02.01.1\"\n", "Deno.test(`${_nr}: function`, () => {\n", " assertEquals(typeof zufall, 'function')\n", "})\n", "Deno.test(`${_nr}: Parameter`, () => {\n", " assertEquals(zufall.length, 1)\n", "})\n", "Deno.test(`${_nr}: zufall(0)=[]`, () => {\n", " assertEquals(zufall(0), [])\n", "})\n", "Deno.test(`${_nr}: zufall(1)`, () => {\n", " let last = 0\n", " for(let i = 0; i < 10; i++) {\n", " let now = zufall(1)\n", " assertEquals(now.length, 1)\n", " assertEquals(now[0] >= 0, true)\n", " assertEquals(now[0] <= 1, true)\n", " assertEquals(now[0] === last, false)\n", " last = now[0]\n", " }\n", "})\n", "Deno.test(`${_nr}: zufall(10)`, () => {\n", " let arr = zufall(10)\n", " assertEquals(arr.length, 10)\n", " for (let i = 1; i < arr.length; i++) {\n", " assertEquals(arr[i] >= 0, true)\n", " assertEquals(arr[i] <= 1, true)\n", " if (i > 1) assertEquals(arr[i] === arr[i-1], false)\n", " }\n", "})\n", "Deno.test(`${_nr}: zufall(1000)`, () => {\n", " let arr = zufall(1000)\n", " assertEquals(arr.length, 1000)\n", " for (let i = 1; i < arr.length; i++) {\n", " assertEquals(arr[i] >= 0, true)\n", " assertEquals(arr[i] <= 1, true)\n", " if (i > 1) assertEquals(arr[i] === arr[i-1], false)\n", " }\n", "})" ] }, { "cell_type": "markdown", "id": "cb89cc31-62b7-439d-843f-b1cbf872bc80", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Aufgabe 02.01.2: Minimumsuche\n", "\n", "Programmiere eine Funktion `minimum`:\n", "* die einen Parameter `liste` übergeben bekommt. Dieser Parameter enthält ein Array mit Zahlen.\n", "* Zurückgegeben werden soll der kleinste Wert des Arrays.\n", "\n", "*Anmerkung: es gibt auch die `Math.min` Funktion, diese soll hier aber nicht benutzt werden!*" ] }, { "cell_type": "code", "execution_count": null, "id": "5f746983-b432-45f3-b6a5-3b27764f69e3", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9611c7d1-a9ea-4332-b189-0df85955ed74", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "let liste = zufall(10) // Array erzeugen\n", "console.log(liste) // Array ausgeben\n", " // kleinster Wert suchen und ausgeben\n", "console.log(\"kleinster Wert: \" + minimum(liste))" ] }, { "cell_type": "code", "execution_count": null, "id": "43c999ec-2a4e-4f42-bab1-314b077420d4", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "let _nr = \"02.01.2\"\n", "Deno.test(`${_nr}: function`, () => {\n", " assertEquals(typeof minimum, 'function')\n", "})\n", "Deno.test(`${_nr}: Parameter`, () => {\n", " assertEquals(minimum.length, 1)\n", "})\n", "Deno.test(`${_nr}: minimum`, () => {\n", " let arr = zufall(20)\n", " assertEquals(arr.length, 20)\n", " assertEquals(minimum(arr), Math.min(...arr))\n", "})" ] }, { "cell_type": "markdown", "id": "5582abff-8ada-422d-ac2b-130f0d715ace", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Aufgabe 02.01.3: Sortierte Ausgabe\n", "\n", "Überlege dir, wie man diese Minimumsuche dazu verwenden könnte, alle Einträge des Arrays sortiert auszugeben.\n", "\n", "Programmiere eine Funktion `sortiert`, die ein Array als Parameter bekommt und in sortierter Reihenfolge jeden einzelne Zahl ausgibt.\n", "\n", "#### Tipp:\n", "Mit `liste.splice(i,c)` lassen sich aus dem Array `liste` von der Position `i` aus insgesamt `c` Einträge löschen.\n", "\n", "*Hinweis: es gibt auch die `sort`-Funktion, die soll hier aber nicht benutzt werden!*" ] }, { "cell_type": "code", "execution_count": null, "id": "29b54eef-7b73-4c5c-91fd-90332451b4fb", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a853f29b-4f3b-4032-9b56-e9f3dbe61e60", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "sortiert(liste)" ] }, { "cell_type": "code", "execution_count": null, "id": "4e1c39ce-e9f3-44f9-b1ec-47e597b9fcaa", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "let _nr = \"02.01.3\"\n", "Deno.test(`${_nr}: function`, () => {\n", " assertEquals(typeof sortiert, 'function')\n", "})\n", "Deno.test(`${_nr}: Parameter`, () => {\n", " assertEquals(sortiert.length, 1)\n", "})\n", "Deno.test(`${_nr}: sortiert`, () => {\n", " let arr = zufall(4)\n", " console.start()\n", " sortiert(arr)\n", " let res = console.end().split('\\n')\n", " assertEquals(res, arr.sort().map(e => `${e}`))\n", "})" ] }, { "cell_type": "markdown", "id": "fbded430-a6a0-485e-bff7-375e9053008c", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## Aufgabe 02.01.4: Funktion `sort`\n", "\n", "Programmiere eine Funktion `sort`, die ein unsortiertes Array als Parameter bekommt und als Ergebnis die Werte in sortierter Reihenfolge zurückgibt." ] }, { "cell_type": "code", "execution_count": null, "id": "92580ecc-329b-4778-b92a-7c54626796ea", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ebda8fca-b380-41e9-8ce0-f7e8232c0a4f", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "let _nr = \"02.01.4\"\n", "Deno.test(`${_nr}: function`, () => {\n", " assertEquals(typeof sort, 'function')\n", "})\n", "Deno.test(`${_nr}: Parameter`, () => {\n", " assertEquals(sort.length, 1)\n", "})\n", "Deno.test(`${_nr}: sort`, () => {\n", " let arr = zufall(10)\n", " let tmp = arr.slice().sort()\n", " let res = sort(arr)\n", " assertEquals(tmp, res)\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 }