279 lines
7.9 KiB
Plaintext
279 lines
7.9 KiB
Plaintext
{
|
|
"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
|
|
}
|