{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "feaf7178-8e1c-4283-b5ad-7bff7a4a6b79", "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": "f3641e63-972c-41e7-ae8e-821e28fceded", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Aufgabe 03.01.5\n", "Programmiert werden soll eine Kino-Sitzplatzverwaltung.\n", "\n", "Hiweis: Die Zählung bei Spalten und Zeilen beginnt jeweils bei \"0\"!" ] }, { "cell_type": "markdown", "id": "7a05831f-016d-4ab4-aadd-3923368f4282", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 1. Klasse `Sitzplatz`\n", "* Ein Sitzplatz hat eine Position (Zeile `row` und Spalte `col`)\n", "* Wird ein Sitzplatz angelegt, so ist dieser zunächst leer. Beim Anlegen gibt man die Position an.\n", "* Ist ein Sitzplatz frei (Methode `istFrei`) so kann dieser reserviert (Methode `reserviere` werden. Dabei wird der Name der Reservierung gespeichert. Schlägt die Reservierung fehl (weil der Sitzplatz bereits zuvor reserviert wurde) so soll `false`, andernfalls `true` zurückgegeben werden.\n", "* mit `getPosition` soll ein Objekt mit den Attributen `col` und `row` zurückgegeben werden.\n", "* mit `getReservierung` soll der Nme der Reservierung zurückgegeben werden." ] }, { "cell_type": "raw", "id": "62781e42-9258-4c8b-8286-981ec15844d9", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Klasse \"Sitzplatz\":\n", "\n", "Attribute:\n", "*\n", "\n", "Methoden:\n", "*" ] }, { "cell_type": "code", "execution_count": null, "id": "2b172e82-cb22-4fb9-b52b-44ac33502ffd", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "06a89906-d2f9-42fa-9220-d3beeada1005", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "let _nr = \"03.01.5\"\n", "Deno.test(`${_nr}: class Sitzplatz`, () => {\n", " assertEquals(typeof Sitzplatz, 'function')\n", "})\n", "Deno.test(`${_nr}: istFrei und reserviere`, () => {\n", " let s = new Sitzplatz(5,6)\n", " assertEquals(typeof s.istFrei, 'function')\n", " assertEquals(s.istFrei(), true, 'Am Anfang muss der Sitzplatz frei sein')\n", " assertEquals(s.reserviere('Kimmig'), true, 'Die erste Reservierung muss gelingen')\n", " assertEquals(s.istFrei(), false, 'Nach Reservierung darf der Sitzplatz nicht mehr frei sein')\n", " assertEquals(s.reserviere('Kimmig'), false, 'Die zweite Reservierung darf nicht mehr gelingen')\n", "})\n", "Deno.test(`${_nr}: getPosition`, () => {\n", " let s = new Sitzplatz(5,6)\n", " assertEquals(typeof s.getPosition, 'function')\n", " assertEquals(s.getPosition(), {row: 5, col: 6})\n", "\n", " s = new Sitzplatz(20,7)\n", " assertEquals(s.getPosition(), {row: 20, col: 7})\n", "})\n", "Deno.test(`${_nr}: getReservierung`, () => {\n", " let s = new Sitzplatz(5,6)\n", " assertEquals(typeof s.getReservierung, 'function')\n", " assertEquals(s.getReservierung(), '')\n", " s.reserviere('Kimmig')\n", " assertEquals(s.getReservierung(), 'Kimmig')\n", "})" ] }, { "cell_type": "markdown", "id": "4bd8276c-6772-4a7e-9e1e-3fb0ba856a2d", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 2. Klasse: `Kino`\n", "In der Klasse `Kino` sollen alle Sitzplätze verwaltet werden. Dazu:\n", "\n", "* Beim Anlegen eines Kinos soll die Größe (`rows` und `cols`) angegeben werden. Dabei werden automatisch alle Sitzplätze angelegt und in einem Array abgespeichert.\n", "* Mit der Methode `ausgabe` soll das Kinolayout ausgegeben werden, freie Plätze mit \".\", reservierte Plätze mit \"X\". Beispiel:\n", "```\n", " ...XXX..X.\n", " ...X...X.X\n", " XXXXX.XXX.\n", " ...XXX.XXX\n", "```\n", "* Hinweis: oben ist Zeile \"0\", links ist Spalte \"0\"\n", "* Mit `reserviere(row, col, name)` wird ein einzelner Sitzplatz auf den angegebenen Namen reserviert - sofern dieser noch frei ist. Zurückgegeben werden soll `true` bzw `false` ob die Reservierung erfolgreich war.\n", "* Mit `freieSitze()` soll gezählt werden, wie viele freie Sitze das Kino noch hat." ] }, { "cell_type": "raw", "id": "4cf7100c-5c11-42be-9776-a2e0d6b291aa", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Klasse \"Kino\":\n", "\n", "Attribute:\n", "*\n", "\n", "Methoden:\n", "*" ] }, { "cell_type": "code", "execution_count": null, "id": "656cde9b-a105-4752-bf9b-8dcdabf3803c", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "645adebb-fab8-4457-ad06-2c56d4db66fb", "metadata": { "editable": false, "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "Deno.test(`${_nr}: class Kino`, () => {\n", " assertEquals(typeof Kino, 'function')\n", "})\n", "Deno.test(`${_nr}: freieSitze`, () => {\n", " let k = new Kino(5,10)\n", " assertEquals(typeof k.freieSitze, 'function')\n", " assertEquals(k.freieSitze(), 50)\n", "\n", " k = new Kino(12,25)\n", " assertEquals(k.freieSitze(), 12*25)\n", "})\n", "Deno.test(`${_nr}: reserviere`, () => {\n", " let k = new Kino(5, 10)\n", " assertEquals(typeof s.reserviere, 'function')\n", " assertEquals(k.freieSitze(), 50)\n", " assertEquals(k.reserviere(2,5,'Kimmig'), true)\n", " assertEquals(k.freieSitze(), 49)\n", " assertEquals(k.reserviere(2,5,'Kimmig'), false)\n", "})\n", "Deno.test(`${_nr}: ausgabe`, () => {\n", " let k = new Kino(1, 1)\n", " console.start()\n", " k.ausgabe()\n", " assertEquals(console.end(), '.')\n", "\n", " k.reserviere(0, 0, 'Kimmig')\n", " console.start()\n", " k.ausgabe()\n", " assertEquals(console.end(), 'X')\n", "})\n", "Deno.test(`${_nr}: ausgabe2`, () => {\n", " let k = new Kino(5, 10)\n", " console.start()\n", " k.ausgabe()\n", " assertEquals(console.end(), '..........\\n..........\\n..........\\n..........\\n..........')\n", "\n", " k.reserviere(1, 4, 'Kimmig')\n", " k.reserviere(1, 5, 'Kimmig')\n", " k.reserviere(2, 7, 'Kimmig')\n", " console.start()\n", " k.ausgabe()\n", " assertEquals(console.end(), '..........\\n....XX....\\n.......X..\\n..........\\n..........')\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 }