Abitur Hessen Informatik 2022 · LK

Abiturprüfung Informatik in Hessen 2022, LK: 27 Aufgaben mit Lösungen. Themen: Objektorientierte Modellierung mit UML. Mit automatischer Korrektur.

Themen der Prüfung: Objektorientierte Modellierung mit UML · Dynamische Datenstrukturen und Rekursion · ER-Modell und Relationenmodell · Normalisierung und Anomalien · SQL-Abfragen und -Anweisungen · Grammatiken, reguläre Ausdrücke und Syntaxdiagramme · Registermaschine und Berechenbarkeit

Aufgabe Vorschlag AJ - Aufgabe 1 · Objektorientierte Modellierung mit UML

Ticketsystem

In einem Möbelhaus gibt es für Warenausgabe und Reklamation ein gemeinsames Ticketsystem. Die Kunden müssen beim Betreten des Servicebereichs einen von zwei Knöpfen drücken, um entweder ihr Anliegen „Warenausgabe“ (Servicetyp: w) oder „Reklamation“ (Servicetyp: r) anzumelden. Sie erhalten dann ein Ticket mit eindeutiger Ticketnummer. Im Falle einer „Warenausgabe“ muss der Kunde zusätzlich noch den Kassenbon unter einen Barcode-Scanner halten. Eine Servicekraft kann dadurch die passenden Waren für die Abholung bereitstellen.

Die Kunden werden anhand ihrer Ticketnummer für die Bearbeitung ihres Tickets aufgerufen.

Material 1

Die Klassen Ticketsystem, Ticket und Kassenbon

Material 2

Die Methode bearbeiteErstesTicket()

01 public void bearbeiteErstesTicket() {

02 if (Erstes == null)

03 System.out.println("Liste ist leer");

04 else {

05 System.out.println("Nummer: " + Erstes.getNummer());

06 System.out.print("Typ: ");

07 if (Erstes.getTyp() == 'r') {

08 System.out.println("Reklamation");

09 } else {

10 System.out.println("Warenausgabe");

11 Kassenbon einKassenbon = Erstes.getKassenbon();

12 for (int i = 0; i < einKassenbon.getArtikelnummern().length; i++) {

13 System.out.println(einKassenbon.getArtikelnummern()[i]);

14 }

15 }

16 Erstes = Erstes.getNächstes();

17 }

18 }

Material 3

Die Methoden gibNächsteArtikelnummernAus() und gibArtikelnummernAus(...)

01 public void gibNächsteArtikelnummernAus() {

02 gibArtikelnummernAus(Erstes);

03 }

04

05 public void gibArtikelnummernAus(Ticket einTicket) {

06 // siehe Aufgabe 3

07 }

Material 4

UML-Diagramm der abstrakten Klasse TicketA

Aufgabe 1 [4 BE]

Zeichnen Sie die Beziehungen der Klassen in Material 1 ein und begründen Sie Ihre Wahl.

a)

b)

Aufgabe Vorschlag AJ - Aufgabe 2 · Dynamische Datenstrukturen und Rekursion

Ticketsystem

In einem Möbelhaus gibt es für Warenausgabe und Reklamation ein gemeinsames Ticketsystem. Die Kunden müssen beim Betreten des Servicebereichs einen von zwei Knöpfen drücken, um entweder ihr Anliegen „Warenausgabe“ (Servicetyp: w) oder „Reklamation“ (Servicetyp: r) anzumelden. Sie erhalten dann ein Ticket mit eindeutiger Ticketnummer. Im Falle einer „Warenausgabe“ muss der Kunde zusätzlich noch den Kassenbon unter einen Barcode-Scanner halten. Eine Servicekraft kann dadurch die passenden Waren für die Abholung bereitstellen.

Die Kunden werden anhand ihrer Ticketnummer für die Bearbeitung ihres Tickets aufgerufen.

Material 1

Die Klassen Ticketsystem, Ticket und Kassenbon

Material 2

Die Methode bearbeiteErstesTicket()

01 public void bearbeiteErstesTicket() {

02 if (Erstes == null)

03 System.out.println("Liste ist leer");

04 else {

05 System.out.println("Nummer: " + Erstes.getNummer());

06 System.out.print("Typ: ");

07 if (Erstes.getTyp() == 'r') {

08 System.out.println("Reklamation");

09 } else {

10 System.out.println("Warenausgabe");

11 Kassenbon einKassenbon = Erstes.getKassenbon();

12 for (int i = 0; i < einKassenbon.getArtikelnummern().length; i++) {

13 System.out.println(einKassenbon.getArtikelnummern()[i]);

14 }

15 }

16 Erstes = Erstes.getNächstes();

17 }

18 }

Material 3

Die Methoden gibNächsteArtikelnummernAus() und gibArtikelnummernAus(...)

01 public void gibNächsteArtikelnummernAus() {

02 gibArtikelnummernAus(Erstes);

03 }

04

05 public void gibArtikelnummernAus(Ticket einTicket) {

06 // siehe Aufgabe 3

07 }

Material 4

UML-Diagramm der abstrakten Klasse TicketA

Aufgabe 2 [7 BE]

2.1

Implementieren Sie die Methode fügeTicketHinzu(...) der Klasse Ticketsystem. [3 BE]

public void fügeTicketHinzu(Ticket einTicket)

2.2

Analysieren Sie die Methode bearbeiteErstesTicket() der Klasse Ticketsystem aus Material 2. [4 BE]

Aufgabe Vorschlag AJ - Aufgabe 3 · Dynamische Datenstrukturen und Rekursion

Ticketsystem

In einem Möbelhaus gibt es für Warenausgabe und Reklamation ein gemeinsames Ticketsystem. Die Kunden müssen beim Betreten des Servicebereichs einen von zwei Knöpfen drücken, um entweder ihr Anliegen „Warenausgabe“ (Servicetyp: w) oder „Reklamation“ (Servicetyp: r) anzumelden. Sie erhalten dann ein Ticket mit eindeutiger Ticketnummer. Im Falle einer „Warenausgabe“ muss der Kunde zusätzlich noch den Kassenbon unter einen Barcode-Scanner halten. Eine Servicekraft kann dadurch die passenden Waren für die Abholung bereitstellen.

Die Kunden werden anhand ihrer Ticketnummer für die Bearbeitung ihres Tickets aufgerufen.

Material 1

Die Klassen Ticketsystem, Ticket und Kassenbon

Material 2

Die Methode bearbeiteErstesTicket()

01 public void bearbeiteErstesTicket() {

02 if (Erstes == null)

03 System.out.println("Liste ist leer");

04 else {

05 System.out.println("Nummer: " + Erstes.getNummer());

06 System.out.print("Typ: ");

07 if (Erstes.getTyp() == 'r') {

08 System.out.println("Reklamation");

09 } else {

10 System.out.println("Warenausgabe");

11 Kassenbon einKassenbon = Erstes.getKassenbon();

12 for (int i = 0; i < einKassenbon.getArtikelnummern().length; i++) {

13 System.out.println(einKassenbon.getArtikelnummern()[i]);

14 }

15 }

16 Erstes = Erstes.getNächstes();

17 }

18 }

Material 3

Die Methoden gibNächsteArtikelnummernAus() und gibArtikelnummernAus(...)

01 public void gibNächsteArtikelnummernAus() {

02 gibArtikelnummernAus(Erstes);

03 }

04

05 public void gibArtikelnummernAus(Ticket einTicket) {

06 // siehe Aufgabe 3

07 }

Material 4

UML-Diagramm der abstrakten Klasse TicketA

Aufgabe 3

Die Abteilungsleiterin des Servicebereiches möchte die Bearbeitung der Tickets optimieren. Dazu soll das nächste Ticket vom Typ „Warenausgabe“ in der Warteschlange gesucht werden und es sollen alle Artikelnummern auf der Konsole ausgegeben werden, damit ein Servicemitarbeiter die Artikel schon bereitstellen kann.

Liegt im Moment kein Ticket mit Warenausgabe vor, soll eine entsprechende Meldung erscheinen.

Implementieren Sie eine rekursive Methode gibArtikelnummernAus(Ticket einTicket) der Klasse Ticketsystem, die diese Aufgabe erledigt. Beachten Sie dazu Material 3.

Material 3

Die Methoden gibNächsteArtikelnummernAus() und gibArtikelnummernAus(...)

01 public void gibNächsteArtikelnummernAus() {

02 gibArtikelnummernAus(Erstes);

03 }

04

05 public void gibArtikelnummernAus(Ticket einTicket) {

06 // siehe Aufgabe 3

07 }

Aufgabe Vorschlag AJ - Aufgabe 4 · Dynamische Datenstrukturen und Rekursion

Ticketsystem

In einem Möbelhaus gibt es für Warenausgabe und Reklamation ein gemeinsames Ticketsystem. Die Kunden müssen beim Betreten des Servicebereichs einen von zwei Knöpfen drücken, um entweder ihr Anliegen „Warenausgabe“ (Servicetyp: w) oder „Reklamation“ (Servicetyp: r) anzumelden. Sie erhalten dann ein Ticket mit eindeutiger Ticketnummer. Im Falle einer „Warenausgabe“ muss der Kunde zusätzlich noch den Kassenbon unter einen Barcode-Scanner halten. Eine Servicekraft kann dadurch die passenden Waren für die Abholung bereitstellen.

Die Kunden werden anhand ihrer Ticketnummer für die Bearbeitung ihres Tickets aufgerufen.

Material 1

Die Klassen Ticketsystem, Ticket und Kassenbon

Material 2

Die Methode bearbeiteErstesTicket()

01 public void bearbeiteErstesTicket() {

02 if (Erstes == null)

03 System.out.println("Liste ist leer");

04 else {

05 System.out.println("Nummer: " + Erstes.getNummer());

06 System.out.print("Typ: ");

07 if (Erstes.getTyp() == 'r') {

08 System.out.println("Reklamation");

09 } else {

10 System.out.println("Warenausgabe");

11 Kassenbon einKassenbon = Erstes.getKassenbon();

12 for (int i = 0; i < einKassenbon.getArtikelnummern().length; i++) {

13 System.out.println(einKassenbon.getArtikelnummern()[i]);

14 }

15 }

16 Erstes = Erstes.getNächstes();

17 }

18 }

Material 3

Die Methoden gibNächsteArtikelnummernAus() und gibArtikelnummernAus(...)

01 public void gibNächsteArtikelnummernAus() {

02 gibArtikelnummernAus(Erstes);

03 }

04

05 public void gibArtikelnummernAus(Ticket einTicket) {

06 // siehe Aufgabe 3

07 }

Material 4

UML-Diagramm der abstrakten Klasse TicketA

4 Zur weiteren Prozessoptimierung sollen die Serviceaufträge neu strukturiert werden. Es soll eine Möglichkeit geben, die Tickets für die Warenausgabe im Ticketsystem an den Anfang tauschen zu können. Reklamationen sollen erst nach Abarbeitung aller Warenausgaben behandelt werden. Die Reihenfolge innerhalb der Warenausgaben und der Reklamationen soll dabei erhalten bleiben.

4.1

Beschreiben Sie einen Algorithmus, der die Tickets entsprechend dieser Vorgaben sortiert. [4 BE]

4.2

Um die neue Ordnung ständig beizubehalten, muss eine neue Warenausgabe hinter allen Warenausgaben und vor allen Reklamationen eingefügt werden. Implementieren Sie dazu die Methode neuesTicketNachTyp(...) der Klasse Ticketsystem. [8 BE]

public void neuesTicketNachTyp(Ticket einTicket)

Aufgabe Vorschlag AJ - Aufgabe 5 · Objektorientierte Modellierung mit UML

Ticketsystem

In einem Möbelhaus gibt es für Warenausgabe und Reklamation ein gemeinsames Ticketsystem. Die Kunden müssen beim Betreten des Servicebereichs einen von zwei Knöpfen drücken, um entweder ihr Anliegen „Warenausgabe“ (Servicetyp: w) oder „Reklamation“ (Servicetyp: r) anzumelden. Sie erhalten dann ein Ticket mit eindeutiger Ticketnummer. Im Falle einer „Warenausgabe“ muss der Kunde zusätzlich noch den Kassenbon unter einen Barcode-Scanner halten. Eine Servicekraft kann dadurch die passenden Waren für die Abholung bereitstellen.

Die Kunden werden anhand ihrer Ticketnummer für die Bearbeitung ihres Tickets aufgerufen.

Material 1

Die Klassen Ticketsystem, Ticket und Kassenbon

Material 2

Die Methode bearbeiteErstesTicket()

01 public void bearbeiteErstesTicket() {

02 if (Erstes == null)

03 System.out.println("Liste ist leer");

04 else {

05 System.out.println("Nummer: " + Erstes.getNummer());

06 System.out.print("Typ: ");

07 if (Erstes.getTyp() == 'r') {

08 System.out.println("Reklamation");

09 } else {

10 System.out.println("Warenausgabe");

11 Kassenbon einKassenbon = Erstes.getKassenbon();

12 for (int i = 0; i < einKassenbon.getArtikelnummern().length; i++) {

13 System.out.println(einKassenbon.getArtikelnummern()[i]);

14 }

15 }

16 Erstes = Erstes.getNächstes();

17 }

18 }

Material 3

Die Methoden gibNächsteArtikelnummernAus() und gibArtikelnummernAus(...)

01 public void gibNächsteArtikelnummernAus() {

02 gibArtikelnummernAus(Erstes);

03 }

04

05 public void gibArtikelnummernAus(Ticket einTicket) {

06 // siehe Aufgabe 3

07 }

Material 4

UML-Diagramm der abstrakten Klasse TicketA

Für die Modellierung des Ticketsystems kommen noch zwei andere Ansätze in Frage:

Modell A: Reklamation und Warenausgabe werden als eigenständige Klassen der abstrakten Oberklasse TicketA (Material 4) modelliert. Die Klasse Ticketsystem verwaltet eine Liste von TicketA -Objekten.

Modell B: Warenausgabe ist eine Unterklasse der Klasse Reklamation. Die Klasse Ticket entfällt. Die Klasse Ticketsystem verwaltet eine Liste von Reklamation -Objekten.

5.1

Vergleichen Sie die Modellierungen A, B und die in Material 1 gegebene Modellierung unter dem Gesichtspunkt der möglichst realitätsnahen Abbildung der gegebenen Situation. [4 BE]

5.2

Erläutern Sie, welche Änderungen sich für die Implementierung der Methode bearbeiteErstesTicket() (Material 2) der Klasse Ticketsystem bei Modell A ergeben. [3 BE]

Aufgabe Vorschlag B1 - Aufgabe 1 · Normalisierung und Anomalien

Fitnessstudio

In einer Fitnessstudio-Datenbank werden alle relevanten Daten der Kunden, der Trainer und der vorhandenen Geräte verwaltet. Die im Material dargestellten Tabellen geben einen Ausschnitt dieser Datenbank wieder.

Material: Tabellen mit Ausschnitt aus der Fitnessstudio-Datenbank

Kunde

Kundennummer · Vorname · Nachname · Adresse · Geburtsdatum · Trainer · Tarif

K21543 · Jörn · Büchner · Finkenweg 34

55131 Mainz · 12.04.1992 · 106, 712 · T1

K65342 · Hans · Müller · Goethestraße 7

65187 Wiesbaden · 25.11.1965 · 231 · T1

K89873 · Agathe · Bauer · Goethestraße 7

65187 Wiesbaden · 17.06.1968 · 231 · T3

K76105 · Bruno · Meyer · Am Ufer 5

55128 Mainz · 06.08.1957 · · T6

K23704 · Katharina · Schmidt · Bienenweg 26

60306 Frankfurt · 28.02.1993 · 106, 540 · T4

Trainer

ID · Vorname · Nachname · Spezialgebiet

106 · Johannes · Müller · Bodybuilding

712 · Lena · Hofmann · Cardio

540 · Thomas · Schulze · Physio

231 · Annemarie · Zimmer · Bodybuilding

Gerät

Gerätenummer · Bezeichnung · Muskelgruppe · Maximalgewicht · Hersteller · Firmensitz

1 · Lastzug · Rücken · 120 · Superfit · München

2 · Lastzug · Rücken · 100 · Vario · Köln

3 · Adduktion · Oberschenkel · 80 · Vario · Köln

4 · Brustpresse · Brust · 120 · PumpX · Hamburg

5 · Butterfly · Brust · 100 · Superfit · München

6 · Butterfly reverse · Rücken · 100 · PumpX · Hamburg

7 · Adduktion · Oberschenkel · 80 · Vario · Köln

trainiert_an

Kundennummer · Gerätenummer · Gewicht

K21543 · 1 · 45

K21543 · 3 · 40

K21543 · 5 · 35

K65342 · 1 · 40

K65342 · 2 · 80

K65342 · 5 · 40

Aufgaben

1.1

Entscheiden Sie, in welchen Normalformen sich die Relationen Kunde und Gerät befinden.

[3 BE]

1.2

Beschreiben Sie anhand je eines Beispiels zwei verschiedene Anomalien, welche bei der Relation Gerät auftreten können.

[3 BE]

1.3

Überführen Sie die Relationen Kunde und Gerät in die dritte Normalform unter Angabe der Primär- und Fremdschlüssel und erläutern Sie Ihr Vorgehen.

[4 BE]

1.4

Begründen Sie, warum bei den vorgegebenen Daten in der Relation Kunde auf das Attribut Kundennummer verzichtet werden kann, das Attribut Gerätenummer in der Relation Gerät aber notwendig ist.

[2 BE]

Aufgabe Vorschlag B1 - Aufgabe 2 · ER-Modell und Relationenmodell

Fitnessstudio

In einer Fitnessstudio-Datenbank werden alle relevanten Daten der Kunden, der Trainer und der vorhandenen Geräte verwaltet. Die im Material dargestellten Tabellen geben einen Ausschnitt dieser Datenbank wieder.

Material: Tabellen mit Ausschnitt aus der Fitnessstudio-Datenbank

Kunde

Kundennummer · Vorname · Nachname · Adresse · Geburtsdatum · Trainer · Tarif

K21543 · Jörn · Büchner · Finkenweg 34

55131 Mainz · 12.04.1992 · 106, 712 · T1

K65342 · Hans · Müller · Goethestraße 7

65187 Wiesbaden · 25.11.1965 · 231 · T1

K89873 · Agathe · Bauer · Goethestraße 7

65187 Wiesbaden · 17.06.1968 · 231 · T3

K76105 · Bruno · Meyer · Am Ufer 5

55128 Mainz · 06.08.1957 · · T6

K23704 · Katharina · Schmidt · Bienenweg 26

60306 Frankfurt · 28.02.1993 · 106, 540 · T4

Trainer

ID · Vorname · Nachname · Spezialgebiet

106 · Johannes · Müller · Bodybuilding

712 · Lena · Hofmann · Cardio

540 · Thomas · Schulze · Physio

231 · Annemarie · Zimmer · Bodybuilding

Gerät

Gerätenummer · Bezeichnung · Muskelgruppe · Maximalgewicht · Hersteller · Firmensitz

1 · Lastzug · Rücken · 120 · Superfit · München

2 · Lastzug · Rücken · 100 · Vario · Köln

3 · Adduktion · Oberschenkel · 80 · Vario · Köln

4 · Brustpresse · Brust · 120 · PumpX · Hamburg

5 · Butterfly · Brust · 100 · Superfit · München

6 · Butterfly reverse · Rücken · 100 · PumpX · Hamburg

7 · Adduktion · Oberschenkel · 80 · Vario · Köln

trainiert_an

Kundennummer · Gerätenummer · Gewicht

K21543 · 1 · 45

K21543 · 3 · 40

K21543 · 5 · 35

K65342 · 1 · 40

K65342 · 2 · 80

K65342 · 5 · 40

Die Datenbank soll um weitere Mitarbeiter ergänzt werden. Neben den Daten der Trainer sollen auch die Daten der Büromitarbeiter sowie der Reinigungskräfte in der Datenbank verwaltet werden. Für alle Mitarbeiter sollen die ID sowie der Vor- und der Nachname gespeichert werden. Für Büroangestellte soll zusätzlich ihr Ausbildungsberuf gespeichert werden. Für Reinigungskräfte soll nachvollziehbar sein, welche Geräte sie an welchem Tag zu welcher Uhrzeit gereinigt haben.

2.1

Modellieren Sie anhand der Materialvorgabe und unter Berücksichtigung Ihrer Ergebnisse von Aufgabe 1 für die beschriebene Datenbank ein vollständig beschriftetes ER-Diagramm mit Angabe der Kardinalitäten und Optionalitäten.

[6 BE]

2.2

Überführen Sie Ihr ER-Diagramm in ein optimiertes Relationenmodell und kennzeichnen Sie die Primär- und Fremdschlüssel. Auf die bereits in der Aufgabe 1.3 angegebenen Relationen kann verzichtet werden.

[3 BE]

Aufgabe Vorschlag B1 - Aufgabe 3 · SQL-Abfragen und -Anweisungen

Fitnessstudio

In einer Fitnessstudio-Datenbank werden alle relevanten Daten der Kunden, der Trainer und der vorhandenen Geräte verwaltet. Die im Material dargestellten Tabellen geben einen Ausschnitt dieser Datenbank wieder.

Material: Tabellen mit Ausschnitt aus der Fitnessstudio-Datenbank

Kunde

Kundennummer · Vorname · Nachname · Adresse · Geburtsdatum · Trainer · Tarif

K21543 · Jörn · Büchner · Finkenweg 34

55131 Mainz · 12.04.1992 · 106, 712 · T1

K65342 · Hans · Müller · Goethestraße 7

65187 Wiesbaden · 25.11.1965 · 231 · T1

K89873 · Agathe · Bauer · Goethestraße 7

65187 Wiesbaden · 17.06.1968 · 231 · T3

K76105 · Bruno · Meyer · Am Ufer 5

55128 Mainz · 06.08.1957 · · T6

K23704 · Katharina · Schmidt · Bienenweg 26

60306 Frankfurt · 28.02.1993 · 106, 540 · T4

Trainer

ID · Vorname · Nachname · Spezialgebiet

106 · Johannes · Müller · Bodybuilding

712 · Lena · Hofmann · Cardio

540 · Thomas · Schulze · Physio

231 · Annemarie · Zimmer · Bodybuilding

Gerät

Gerätenummer · Bezeichnung · Muskelgruppe · Maximalgewicht · Hersteller · Firmensitz

1 · Lastzug · Rücken · 120 · Superfit · München

2 · Lastzug · Rücken · 100 · Vario · Köln

3 · Adduktion · Oberschenkel · 80 · Vario · Köln

4 · Brustpresse · Brust · 120 · PumpX · Hamburg

5 · Butterfly · Brust · 100 · Superfit · München

6 · Butterfly reverse · Rücken · 100 · PumpX · Hamburg

7 · Adduktion · Oberschenkel · 80 · Vario · Köln

trainiert_an

Kundennummer · Gerätenummer · Gewicht

K21543 · 1 · 45

K21543 · 3 · 40

K21543 · 5 · 35

K65342 · 1 · 40

K65342 · 2 · 80

K65342 · 5 · 40

3 Erläutern Sie den Aufbau und die inhaltliche Bedeutung der folgenden SQL-Anweisungen:

3.1

SELECT Kunde.Kundennummer, Kunde.Nachname, Kunde.Vorname

FROM Kunde, betreut, Trainer, Mitarbeiter

WHERE Kunde.Kundennummer = betreut.Kundennummer

AND Trainer.ID = betreut.ID

AND Trainer.ID = Mitarbeiter.ID

AND Mitarbeiter.Vorname = 'Thomas'

AND Mitarbeiter.Nachname = 'Schulze'

3.2

SELECT DISTINCT Bezeichnung

FROM Gerät INNER JOIN trainiert_an

ON Gerät.Gerätenummer = trainiert_an.Gerätenummer

WHERE Gewicht > 99

3.3

SELECT COUNT(Kunde.Kundennummer), Trainer.ID, Mitarbeiter.Nachname, Mitarbeiter.Vorname

FROM Kunde INNER JOIN (betreut NATURAL JOIN (

Trainer NATURAL JOIN Mitarbeiter)) ON

Kunde.Kundennummer = betreut.Kundennummer

WHERE Spezialgebiet = 'Bodybuilding'

GROUP BY Trainer.ID, Mitarbeiter.Nachname, Mitarbeiter.Vorname

HAVING MIN(Geburtsdatum) < '1952-01-01'

Aufgabe Vorschlag B1 - Aufgabe 4 · SQL-Abfragen und -Anweisungen

Fitnessstudio

In einer Fitnessstudio-Datenbank werden alle relevanten Daten der Kunden, der Trainer und der vorhandenen Geräte verwaltet. Die im Material dargestellten Tabellen geben einen Ausschnitt dieser Datenbank wieder.

Material: Tabellen mit Ausschnitt aus der Fitnessstudio-Datenbank

Kunde

Kundennummer · Vorname · Nachname · Adresse · Geburtsdatum · Trainer · Tarif

K21543 · Jörn · Büchner · Finkenweg 34

55131 Mainz · 12.04.1992 · 106, 712 · T1

K65342 · Hans · Müller · Goethestraße 7

65187 Wiesbaden · 25.11.1965 · 231 · T1

K89873 · Agathe · Bauer · Goethestraße 7

65187 Wiesbaden · 17.06.1968 · 231 · T3

K76105 · Bruno · Meyer · Am Ufer 5

55128 Mainz · 06.08.1957 · · T6

K23704 · Katharina · Schmidt · Bienenweg 26

60306 Frankfurt · 28.02.1993 · 106, 540 · T4

Trainer

ID · Vorname · Nachname · Spezialgebiet

106 · Johannes · Müller · Bodybuilding

712 · Lena · Hofmann · Cardio

540 · Thomas · Schulze · Physio

231 · Annemarie · Zimmer · Bodybuilding

Gerät

Gerätenummer · Bezeichnung · Muskelgruppe · Maximalgewicht · Hersteller · Firmensitz

1 · Lastzug · Rücken · 120 · Superfit · München

2 · Lastzug · Rücken · 100 · Vario · Köln

3 · Adduktion · Oberschenkel · 80 · Vario · Köln

4 · Brustpresse · Brust · 120 · PumpX · Hamburg

5 · Butterfly · Brust · 100 · Superfit · München

6 · Butterfly reverse · Rücken · 100 · PumpX · Hamburg

7 · Adduktion · Oberschenkel · 80 · Vario · Köln

trainiert_an

Kundennummer · Gerätenummer · Gewicht

K21543 · 1 · 45

K21543 · 3 · 40

K21543 · 5 · 35

K65342 · 1 · 40

K65342 · 2 · 80

K65342 · 5 · 40

4 Implementieren Sie SQL-Anweisungen für die folgenden Anforderungen/Abfragen:

4.1

Die Gerätenummern, Bezeichnungen und die Hersteller aller Geräte, an denen der Kunde Bruno Meyer trainiert, sollen ausgegeben werden.

4.2

Der Firmensitz des Herstellers Superfit soll zu 'Wiesbaden' geändert werden.

4.3

Für alle Kundennummern soll die Anzahl der Geräte, die sie nutzen, ausgegeben werden.

Aufgabe Vorschlag B1 - Aufgabe 5 · SQL-Abfragen und -Anweisungen

Fitnessstudio

In einer Fitnessstudio-Datenbank werden alle relevanten Daten der Kunden, der Trainer und der vorhandenen Geräte verwaltet. Die im Material dargestellten Tabellen geben einen Ausschnitt dieser Datenbank wieder.

Material: Tabellen mit Ausschnitt aus der Fitnessstudio-Datenbank

Kunde

Kundennummer · Vorname · Nachname · Adresse · Geburtsdatum · Trainer · Tarif

K21543 · Jörn · Büchner · Finkenweg 34

55131 Mainz · 12.04.1992 · 106, 712 · T1

K65342 · Hans · Müller · Goethestraße 7

65187 Wiesbaden · 25.11.1965 · 231 · T1

K89873 · Agathe · Bauer · Goethestraße 7

65187 Wiesbaden · 17.06.1968 · 231 · T3

K76105 · Bruno · Meyer · Am Ufer 5

55128 Mainz · 06.08.1957 · · T6

K23704 · Katharina · Schmidt · Bienenweg 26

60306 Frankfurt · 28.02.1993 · 106, 540 · T4

Trainer

ID · Vorname · Nachname · Spezialgebiet

106 · Johannes · Müller · Bodybuilding

712 · Lena · Hofmann · Cardio

540 · Thomas · Schulze · Physio

231 · Annemarie · Zimmer · Bodybuilding

Gerät

Gerätenummer · Bezeichnung · Muskelgruppe · Maximalgewicht · Hersteller · Firmensitz

1 · Lastzug · Rücken · 120 · Superfit · München

2 · Lastzug · Rücken · 100 · Vario · Köln

3 · Adduktion · Oberschenkel · 80 · Vario · Köln

4 · Brustpresse · Brust · 120 · PumpX · Hamburg

5 · Butterfly · Brust · 100 · Superfit · München

6 · Butterfly reverse · Rücken · 100 · PumpX · Hamburg

7 · Adduktion · Oberschenkel · 80 · Vario · Köln

trainiert_an

Kundennummer · Gerätenummer · Gewicht

K21543 · 1 · 45

K21543 · 3 · 40

K21543 · 5 · 35

K65342 · 1 · 40

K65342 · 2 · 80

K65342 · 5 · 40

5 In SQL können auch Mengenoperationen angewandt werden. Durch die SQL-Klausel MINUS werden die Zeilen ausgegeben, die in der ersten Menge, nicht aber in der zweiten Menge enthalten sind. Beispiel:

SELECT Gerätenummer FROM Gerät

MINUS SELECT Gerätenummer FROM reinigt WHERE Datum = '2022-03-01'

Formulieren Sie ein SQL-Statement, das die gleiche Ausgabe mit Hilfe einer geschachtelten SQL-Anweisung erzeugt.

Aufgabe Vorschlag B2 - Aufgabe 1 · Normalisierung und Anomalien

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

Aufgabe 1

Die im Material 1 gegebene Relation ist ein erster Ansatz der Datenbank.

1.1

Begründen Sie, dass die Relation Behälterbuchung nicht in zweiter Normalform vorliegt. [2 BE]

1.2

Überführen Sie die Relation Behälterbuchung in ein Relationenmodell, das sich in dritter Normalform befindet. [2 BE]

Aufgabe Vorschlag B2 - Aufgabe 2 · ER-Modell und Relationenmodell

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

2

Modellieren Sie für die beschriebene Situation ein ER-Diagramm mit Angabe der Kardinalitäten und Optionalitäten. (5 BE)

Aufgabe Vorschlag B2 - Aufgabe 3 · ER-Modell und Relationenmodell

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

Es gibt immer wieder Beschwerden über vorangegangene Buchungen, die zusätzlich gespeichert werden sollen. Es kann ein kurzer Beschwerdetext verfasst werden. Dazu werden die aktuelle Buchungsnummer sowie die Buchungsnummer der Buchung, über die die Beschwerde erfolgt, in der Datenbank gespeichert. Eine mögliche Modellierung ist im Material 2 gegeben.

3.1

Überführen Sie das gegebene ER-Diagramm (Material 2) in das Relationenmodell und erläutern Sie Ihr Vorgehen. [3 BE]

3.2

Modellieren Sie den im Material 2 gegebenen Ausschnitt mit Angabe von Kardinalitäten und Optionalitäten mit Hilfe eines Beziehungstyps beschwert_sich_über anstatt des zusätzlichen Entitätstyps Beschwerde. [2 BE]

3.3

Vergleichen Sie beide Modellierungen (Aufgaben 3.1 und 3.2) auf der Ebene des Relationenmodells. [1 BE]

Aufgabe Vorschlag B2 - Aufgabe 4 · ER-Modell und Relationenmodell

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

Überführen Sie Ihr ER-Diagramm mit der in Material 2 gegebenen Erweiterung in ein optimiertes Relationenmodell und kennzeichnen Sie die Primär- und Fremdschlüssel. [4 BE]

Aufgabe Vorschlag B2 - Aufgabe 5 · SQL-Abfragen und -Anweisungen

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

Implementieren Sie auf der Grundlage Ihres Relationenmodells aus Aufgabe 4 SQL-Anweisungen für die folgenden Anforderungen:

5.1

Die Anzahl der Objekte, in deren Beschreibung die Zeichenfolgen 'Netzteil' und '19V' vorkommen, soll ausgegeben werden. [2 BE]

5.2

Es sollen alle Buchungen des Behälters mit der Behälternummer 4 ausgegeben werden, die sich mit dem Zeitraum '2022-05-17' bis '2022-05-25' überschneiden. [2 BE]

5.3

Es sollen die Schülernummern aller Schüler, die Behälter 3 bereits gebucht haben, absteigend sortiert nach dem Enddatum der Buchung ausgegeben werden. [2 BE]

5.4

Der Status des Objektes mit der Beschreibung 'Laptop 15 Zoll' aus der Buchung mit der Buchungsnummer 455 soll auf unvollständig gesetzt werden. Es kann davon ausgegangen werden, dass nur ein Laptop mit dieser Beschreibung in den Behältern der Buchung 455 vorhanden ist. [3 BE]

Aufgabe Vorschlag B2 - Aufgabe 6 · SQL-Abfragen und -Anweisungen

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

Erläutern Sie den Aufbau und die inhaltliche Bedeutung der folgenden SQL-Anweisung:

SELECT Vorname, Nachname, Klassenbezeichnung, COUNT(Buchungsnummer) AS Buchungsanzahl

FROM Schüler NATURAL JOIN Buchung

WHERE Öffnung IS NULL

AND Enddatum < '2022-04-01'

GROUP BY Vorname, Nachname, Klassenbezeichnung

HAVING Buchungsanzahl > 1

ORDER BY Buchungsanzahl DESC

Aufgabe Vorschlag B2 - Aufgabe 7 · SQL-Abfragen und -Anweisungen

Endgeräte-Verleih

Eine Schülergruppe hat ein computergesteuertes Regalsystem mit Behältern entwickelt, das die Ausleihe von Endgeräten an Schülerinnen und Schüler kontaktlos, sicher und kurzfristig möglich machen soll.

Der Verschluss jedes Behälters im Regal kann elektronisch gesteuert geöffnet werden, so dass man dem Behälter Objekte entnehmen oder sie zurücklegen kann. Ein Computer kontrolliert den Zugriff und gibt einen oder mehrere Behälter frei, wenn die Schülerin oder der Schüler innerhalb des gebuchten Zeitraums den korrekten Einmal-Code eingibt.

Die Schülerinnen und Schüler nutzen zur Buchung eine App, die wie der Computer des Regalsystems Zugriff auf eine Relationale Datenbank hat. In der Datenbank sollen die folgenden Informationen berücksichtigt werden:

Jeder Behälter hat eine eindeutige Behälternummer, eine bestimmte Lage im Regal und kann mehrere Objekte enthalten, die am Ende der Nutzung alle gemeinsam zurückgegeben werden müssen. Die Objekte sind jeweils einem Behälter fest zugeordnet.

Jedes Objekt, das sich in einem Behälter befinden kann, hat eine ID, eine Beschreibung und einen Status (ok, defekt, unvollständig).

Jeder Schüler hat eine eindeutige Schülernummer, einen Vor- und einen Nachnamen, eine Klassenbezeichnung sowie ein Passwort.

Jeder Schüler darf die Buchung von einem oder mehreren Behältern für einen beliebigen Zeitraum, von dem das Anfangsdatum und das Enddatum festgehalten werden, veranlassen, wenn in diesem Zeitraum bisher keine anderen Buchungen für diese Behälter vorliegen. Die Buchungen sind durch eine eindeutige Buchungsnummer unterscheidbar.

Zu jeder Buchung zeigt die App einen nach festem Schema zufällig generierten Code an, der am Regal in der Schule eingegeben werden muss, um den oder die Behälter öffnen zu können.

Es wird außerdem im Attribut Öffnung dokumentiert, wann die Öffnung erfolgt ist. Gleichzeitig gebuchte Behälter werden auch zur gleichen Zeit geöffnet.

Material 1

Ausschnitt der Relation Behälterbuchung

Behälternummer

Anfangsdatum

Enddatum

ObjektID

Code

1

2022-03-14

2022-03-19

65

Lm432L

2

2022-03-20

2022-03-25

134

Xr435K

3

2022-03-14

2022-03-19

132

Az420H

3

2022-03-22

2022-03-25

132

Ur231J

3

2022-03-14

2022-03-19

298

Az420H

3

2022-03-22

2022-03-25

298

Ur231J

Material 2

Ausschnitt eines ER-Diagramms

Da es immer lange dauert, bis der technische Support defekt gemeldete Geräte überprüft und ggf. repariert, soll die Überprüfung von Geräten durch Paten aus der Schülerschaft erfolgen. Dafür soll eine neue Relation durch folgenden Befehl erzeugt werden. Ein Gerät soll maximal einem Paten zugewiesen werden können.

CREATE TABLE ist_Pate_für (

ID INT,

Schülernummer INT,

PRIMARY KEY (ID, Schülernummer),

FOREIGN KEY (ID) REFERENCES Objekt(ID),

FOREIGN KEY (Schülernummer) REFERENCES Schüler (Schülernummer)

)

Analysieren Sie den gegebenen Befehl und prüfen Sie, ob die zugrundeliegende Modellierung den Anforderungen gerecht wird.

Aufgabe Vorschlag C1 - Aufgabe 1 · Grammatiken, reguläre Ausdrücke und Syntaxdiagramme

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

Aufgabe 1 [3 BE]

Entscheiden Sie jeweils, ob es sich um ein gültiges WHILE-Programm handelt.

a)

x1:= 10;

WHILE x1 ≠ 0 DO

x1:= x1 - 1;

x2:= x1 + 2

END

b)

x2:= x1 + 3;

WHILE x2 ≠ 0 DO

x1:= x2 - 1

WHILE x1 ≠ 0 DO

x1:= x1+1

END

END

Aufgabe Vorschlag C1 - Aufgabe 2 · Grammatiken, reguläre Ausdrücke und Syntaxdiagramme

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

2 Entwerfen Sie eine Grammatik, die die Sprache der WHILE-Programme erzeugt.

Aufgabe Vorschlag C1 - Aufgabe 3 · Grammatiken, reguläre Ausdrücke und Syntaxdiagramme

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

3 Die Sprache WHILEsimpel\text{WHILE}_{\text{simpel}} besteht aus WHILE-Programmen, bei denen in WHILE-Schleifen nur Wertzuweisungen anstatt beliebiger WHILE-Programme zugelassen sind.

Modellieren Sie die Syntaxdiagramme Schleife und Zuweisung für die Sprache WHILEsimpel\text{WHILE}_{\text{simpel}}. Syntaxdiagramme für Variable und Konstante müssen nicht modelliert werden.

Aufgabe Vorschlag C1 - Aufgabe 4 · Registermaschine und Berechenbarkeit

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

Eine zweistellige Funktion ff heißt WHILE-berechenbar, falls es ein WHILE-Programm PP gibt, das ff berechnet, d.h. PP gestartet mit aa und bb in den Variablen x1x1 und x2x2 sowie mit 00 in den restlichen Variablen stoppt mit dem Wert f(a,b)f(a, b) in der Variable x0x0, falls f(a,b)f(a, b) definiert ist. Sonst stoppt PP nicht.

Zeigen Sie, dass die Funktion ff mit f(a,b)=a+bf(a, b) = a + b WHILE-berechenbar ist, indem Sie ein entsprechendes WHILE-Programm angeben und kurz begründen.

Aufgabe Vorschlag C1 - Aufgabe 5 · Registermaschine und Berechenbarkeit

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

Die Laufzeit TIMEP(a,b)TIME_P(a, b) eines WHILE-Programms PP ist die Anzahl der Schritte, die durchlaufen werden, wenn PP mit dem Wert aa in der Variable x1x1 und Wert bb in der Variable x2x2 gestartet wird. Jede Wertzuweisung und jede Auswertung einer Schleifenbedingung wird als ein Schritt gezählt.

Bestimmen Sie die Laufzeit TIMEP(a,b)TIME_P(a, b) des WHILE-Programms in Material 1 in Abhängigkeit von aa und bb.

[3 BE]

Aufgabe Vorschlag C1 - Aufgabe 6 · Registermaschine und Berechenbarkeit

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

Eine Funktion ff ist genau dann WHILE-berechenbar, wenn sie Registermaschinen-berechenbar ist.

6.1

In Material 2 ist ein WHILE-Programm gegeben, das eine Funktion ff berechnet.

Implementieren Sie ein kommentiertes Registermaschinenprogramm, das ebenfalls ff berechnet.

[5 BE]

6.2

Bestätigen Sie die Aussage, dass jede WHILE-berechenbare Funktion Registermaschinen-berechenbar ist.

[4 BE]

Aufgabe Vorschlag C1 - Aufgabe 7 · Registermaschine und Berechenbarkeit

WHILE-Programme

WHILE-Programme sind ein Berechnungsformalismus, der an traditionelle Programmiersprachen angelehnt ist.

WHILE-Programme bestehen aus:

Variablen (x0,x1,x2,…x0, x1, x2, \dots), Konstanten (0,1,2,…0, 1, 2, \dots), Trennsymbolen (;,:=;,:=),

Operationszeichen (+,−,≠+, -, \neq) und Schlüsselwörtern ( WHILE, DO, END).

WHILE-Programme sind wie folgt definiert:

Jede Wertzuweisung mit den Variablen xixi und xjxj und der Konstanten c∈N0c \in \mathbb{N}_0 der Form xi:=xj+cxi:= xj + c bzw. xi:=xj−cxi:= xj - c ist ein WHILE-Programm.

Falls P1P_1 und P2P_2 WHILE-Programme sind, dann ist auch P1;P2P_1; P_2 ein WHILE-Programm.

Falls PP ein WHILE-Programm ist und xixi eine Variable, dann ist auch WHILE xi≠0xi \neq 0 DO PP END ein WHILE-Programm.

Bei der Wertzuweisung xi:=xj+cxi:= xj + c wird der Variablen xixi die Summe der Werte von xjxj und cc zugewiesen. Bei der Wertzuweisung xi:=xj−cxi:= xj - c ist dies entsprechend die Differenz, wenn der Wert nicht negativ ist. Ist xj−c<0xj - c < 0, wird der Variablen xixi der Wert 00 zugewiesen.

Die Komposition P1;P2P_1; P_2 wird so interpretiert, dass zuerst P1P_1 und anschließend P2P_2 ausgeführt wird.

Innerhalb einer WHILE-Schleife WHILE xi≠0xi \neq 0 DO PP END ist das Programm PP solange wiederholt auszuführen, wie der Wert von xixi ungleich Null ist.

Material 1

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=a∗bf(a, b) = a * b

01 x3:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 WHILE x1 ≠ 0 DO

04 x0:= x0 + 1;

05 x1:= x1 - 1

06 END;

07 x1:= x3 + 0;

08 x2:= x2 - 1

09 END Hinweis: In den Variablen x1x1 und x2x2 stehen anfangs die Werte aa und bb. Die restlichen Variablen sind mit dem Wert 00 vorbelegt.

Material 2

WHILE-Programm für die WHILE-berechenbare Funktion f(a,b)=abf(a, b) = a^b

01 x0:= x0 + 1;

02 WHILE x2 ≠ 0 DO

03 x0:= x0 * x1;

04 x2:= x2 - 1

05 END Hinweis: Zur Abkürzung wurde hier x0:= x0 * x1; verwendet, da dieser Ausdruck WHILE-berechenbar ist (siehe Material 1). Die Vorbelegung der Variablen x0x0, x1x1 und x2x2 entspricht der in Material 1 beschriebenen.

Material 3

Beispiel eines WHILE-Programms

01 x2:= x1 + 0;

02 WHILE x2 ≠ 0 DO

03 x3:= x3 + 1;

04 x2:= x2 - 2

05 END;

06 WHILE x3 ≠ 0 DO

07 x2:= x2 + 2;

08 x3:= x3 - 1

09 END;

10 WHILE x1 ≠ 0 DO

11 x2:= x2 - 1;

12 x1:= x1 - 1

13 END;

14 WHILE x2 ≠ 0 DO

15 x1:= x1 + 1;

16 END Hinweis: x3x3 ist mit dem Wert 00 vorbelegt.

Entscheiden Sie für welche Werte der Variable x1x1 das WHILE-Programm in Material 3 terminiert.

[3 BE]

Aufgabe Vorschlag C2 - Aufgabe 1 · Grammatiken, reguläre Ausdrücke und Syntaxdiagramme

Auszeichnungssprache YAML

YAML ist eine Auszeichnungssprache zur Darstellung strukturierter Daten in einfach lesbarer Textform. Die Sprache zeichnet sich dadurch aus, dass sie jede Datenstruktur allein durch Verwendung von Konstanten, Listen und assoziativen Listen darstellen kann. Elemente von Listen und assoziativen Listen werden durch Zeilenumbrüche (<CR> <LF>) getrennt dargestellt. Dabei besitzen diese Elemente in aufeinanderfolgenden Zeilen die gleiche Einrückung. Elemente einer Liste beginnen mit dem Zeichen „-“ und Elemente einer assoziativen Liste bestehen aus einem Schlüssel:Wert-Paar. Listen und assoziative Listen enthalten jeweils nur gleichartige Listenelemente (Material 1).

Alle Elemente einer Liste und alle Werte einer assoziativen Liste können entweder Konstanten oder auch wieder Listen oder assoziative Listen sein. In den beiden letztgenannten Fällen spricht man dann von geschachtelten Listen. Die Schachtelung wird durch einen Zeilenumbruch und eine Einrückung mit Leerzeichen (<SP>) dargestellt (Material 1).

Material 1

Beispiel von Listen und assoziativen Listen in YAML

Liste

assoziative Liste

- Apfel

- Banane

- Karotte

Name: Frank

Alter: 19

Sport: Fußball

geschachtelte Liste

geschachtelte assoziative Liste

assoziative Liste mit einer Liste als Wert

- HTML

-

- Überschrift H1

- Absatz p

- CSS

- JavaScript

Datum: 2021 05 17

Name: Lisa

Adresse:

Straße: Allee 17

PLZ: 64646

Ort: Heppenheim

Datum: 2021 05 17

Name: Frank

Interessen:

- Sport

- Politik

Alter: 19

Material 2

YAML-Texte

a

b

Datum: 2021 04 05

RechnungNr: 7266

Produkt:

-

Beschreibung: Basketball

Preis: 86

Menge: 4

-

Beschreibung: Hantel

Preis: 48

Menge: 2

-

Name: Martin Schmidt

Anstellung: Entwickler

Fachkompetenz:

- Python

- Java

- Pascal

-

Name: Tabitha Bitumen

Anstellung: Entwicklerin

Fachkompetenzen:

- Lisp

- Fortran

- Erlang

Material 3

Text in einer Konfigurationsdatei

packages:

yum:

mod_ssl: false

files:

servercrt:

mod: 000400

owner: admin

- group root

script:

- cd tools

- tox ecover

Material 4

Unvollständige Grammatik G zur Sprache YAML

T={<CR>,<LF>,<SP>,<INDENT>,<DEDENT>,-,:, true, false, null,0,…,9,a,…,z,A,…,Z}T = \{<\text{CR}>, <\text{LF}>, <\text{SP}>, <\text{INDENT}>, <\text{DEDENT}>, \text{-,:, true, false, null}, 0, \dots, 9, a, \dots, z, A, \dots, Z\}

N={YAML,Liste,Element,AssoziativeListe,Schlu¨ssel,Wert,Konstante,Zeichenkette,Zeichenketten,Zahl}N = \{\text{YAML}, \text{Liste}, \text{Element}, \text{AssoziativeListe}, \text{Schlüssel}, \text{Wert}, \text{Konstante}, \text{Zeichenkette}, \text{Zeichenketten}, \text{Zahl}\}

Startsymbol=YAML\text{Startsymbol} = \text{YAML}

$\begin{aligned}

P = \{ & \text{YAML} & \to & \ \text{Liste} \mid \text{AssoziativeListe}, \\

& \text{Liste} & \to & \ \text{Element } <\text{CR}> <\text{LF}> \mid \text{Element } <\text{CR}> <\text{LF}> \text{Liste}, \\

& \text{AssoziativeListe} & \to & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \mid \\

& & & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \text{AssoziativeListe}, \\

& \text{Element} & \to & \ \text{- } <\text{SP}> \text{Wert}, \\

& \text{Schlüssel} & \to & \ \text{Zeichenkette}, \\

& \text{Wert} & \to & \ \text{Konstante} \mid <\text{CR}> <\text{LF}> <\text{INDENT}> \text{Liste } <\text{DEDENT}> \mid \\

& & & \ <\text{CR}> <\text{LF}> <\text{INDENT}> \text{AssoziativeListe } <\text{DEDENT}>, \\

& \text{Konstante} & \to & \ \text{Zeichenketten} \mid \text{Zahl} \mid \text{true} \mid \text{false} \mid \text{null}, \\

& \text{Zeichenketten} & \to & \ \text{Zeichenkette} \mid \text{Zeichenkette } <\text{SP}> \text{Zeichenketten}, \\

& \dots \\

\} & & &

\end{aligned}$

Hinweis: Die Terminale <INDENT> und <DEDENT> stehen für eine Ein- bzw. Ausrückung.

Aufgaben

1.1

Erläutern Sie die Struktur der zwei YAML-Texte in Material 2. [4 BE]

1.2

In einer Konfigurationsdatei steht der Text aus Material 3. Entscheiden Sie, ob dies ein gültiger YAML-Text ist. [2 BE]

Aufgabe Vorschlag C2 - Aufgabe 2 · Registermaschine und Berechenbarkeit

Auszeichnungssprache YAML

YAML ist eine Auszeichnungssprache zur Darstellung strukturierter Daten in einfach lesbarer Textform. Die Sprache zeichnet sich dadurch aus, dass sie jede Datenstruktur allein durch Verwendung von Konstanten, Listen und assoziativen Listen darstellen kann. Elemente von Listen und assoziativen Listen werden durch Zeilenumbrüche (<CR> <LF>) getrennt dargestellt. Dabei besitzen diese Elemente in aufeinanderfolgenden Zeilen die gleiche Einrückung. Elemente einer Liste beginnen mit dem Zeichen „-“ und Elemente einer assoziativen Liste bestehen aus einem Schlüssel:Wert-Paar. Listen und assoziative Listen enthalten jeweils nur gleichartige Listenelemente (Material 1).

Alle Elemente einer Liste und alle Werte einer assoziativen Liste können entweder Konstanten oder auch wieder Listen oder assoziative Listen sein. In den beiden letztgenannten Fällen spricht man dann von geschachtelten Listen. Die Schachtelung wird durch einen Zeilenumbruch und eine Einrückung mit Leerzeichen (<SP>) dargestellt (Material 1).

Material 1

Beispiel von Listen und assoziativen Listen in YAML

Liste

assoziative Liste

- Apfel

- Banane

- Karotte

Name: Frank

Alter: 19

Sport: Fußball

geschachtelte Liste

geschachtelte assoziative Liste

assoziative Liste mit einer Liste als Wert

- HTML

-

- Überschrift H1

- Absatz p

- CSS

- JavaScript

Datum: 2021 05 17

Name: Lisa

Adresse:

Straße: Allee 17

PLZ: 64646

Ort: Heppenheim

Datum: 2021 05 17

Name: Frank

Interessen:

- Sport

- Politik

Alter: 19

Material 2

YAML-Texte

a

b

Datum: 2021 04 05

RechnungNr: 7266

Produkt:

-

Beschreibung: Basketball

Preis: 86

Menge: 4

-

Beschreibung: Hantel

Preis: 48

Menge: 2

-

Name: Martin Schmidt

Anstellung: Entwickler

Fachkompetenz:

- Python

- Java

- Pascal

-

Name: Tabitha Bitumen

Anstellung: Entwicklerin

Fachkompetenzen:

- Lisp

- Fortran

- Erlang

Material 3

Text in einer Konfigurationsdatei

packages:

yum:

mod_ssl: false

files:

servercrt:

mod: 000400

owner: admin

- group root

script:

- cd tools

- tox ecover

Material 4

Unvollständige Grammatik G zur Sprache YAML

T={<CR>,<LF>,<SP>,<INDENT>,<DEDENT>,-,:, true, false, null,0,…,9,a,…,z,A,…,Z}T = \{<\text{CR}>, <\text{LF}>, <\text{SP}>, <\text{INDENT}>, <\text{DEDENT}>, \text{-,:, true, false, null}, 0, \dots, 9, a, \dots, z, A, \dots, Z\}

N={YAML,Liste,Element,AssoziativeListe,Schlu¨ssel,Wert,Konstante,Zeichenkette,Zeichenketten,Zahl}N = \{\text{YAML}, \text{Liste}, \text{Element}, \text{AssoziativeListe}, \text{Schlüssel}, \text{Wert}, \text{Konstante}, \text{Zeichenkette}, \text{Zeichenketten}, \text{Zahl}\}

Startsymbol=YAML\text{Startsymbol} = \text{YAML}

$\begin{aligned}

P = \{ & \text{YAML} & \to & \ \text{Liste} \mid \text{AssoziativeListe}, \\

& \text{Liste} & \to & \ \text{Element } <\text{CR}> <\text{LF}> \mid \text{Element } <\text{CR}> <\text{LF}> \text{Liste}, \\

& \text{AssoziativeListe} & \to & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \mid \\

& & & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \text{AssoziativeListe}, \\

& \text{Element} & \to & \ \text{- } <\text{SP}> \text{Wert}, \\

& \text{Schlüssel} & \to & \ \text{Zeichenkette}, \\

& \text{Wert} & \to & \ \text{Konstante} \mid <\text{CR}> <\text{LF}> <\text{INDENT}> \text{Liste } <\text{DEDENT}> \mid \\

& & & \ <\text{CR}> <\text{LF}> <\text{INDENT}> \text{AssoziativeListe } <\text{DEDENT}>, \\

& \text{Konstante} & \to & \ \text{Zeichenketten} \mid \text{Zahl} \mid \text{true} \mid \text{false} \mid \text{null}, \\

& \text{Zeichenketten} & \to & \ \text{Zeichenkette} \mid \text{Zeichenkette } <\text{SP}> \text{Zeichenketten}, \\

& \dots \\

\} & & &

\end{aligned}$

Hinweis: Die Terminale <INDENT> und <DEDENT> stehen für eine Ein- bzw. Ausrückung.

Aufgabe 2

Eine Registermaschine soll die maximale Einrücktiefe in einem YAML-Text ermitteln. Die einzelnen Zeichen des Textes werden mit dem ASCII-Zeichensatz kodiert (Zahlenwerte von 0 bis 127) und in aufeinanderfolgenden Registern ab Register R10 gespeichert. Das Leerzeichen <SP> wird in diesem Zeichensatz mit der Dezimalzahl 32 kodiert, das Steuerzeichen <LF> (LineFeed) mit der Dezimalzahl 10. Das Ende des YAML-Textes wird durch den Wert 128 markiert.

2.1

Implementieren Sie ein kommentiertes Registermaschinenprogramm, das die maximale Einrücktiefe eines YAML-Textes bestimmt und in den Akkumulator schreibt. [10 BE]

2.2

Bestimmen Sie die asymptotische Laufzeit Ihres Registermaschinenprogramms in Abhängigkeit von der Länge der Eingabe. [4 BE]

Aufgabe Vorschlag C2 - Aufgabe 3 · Grammatiken, reguläre Ausdrücke und Syntaxdiagramme

Auszeichnungssprache YAML

YAML ist eine Auszeichnungssprache zur Darstellung strukturierter Daten in einfach lesbarer Textform. Die Sprache zeichnet sich dadurch aus, dass sie jede Datenstruktur allein durch Verwendung von Konstanten, Listen und assoziativen Listen darstellen kann. Elemente von Listen und assoziativen Listen werden durch Zeilenumbrüche (<CR> <LF>) getrennt dargestellt. Dabei besitzen diese Elemente in aufeinanderfolgenden Zeilen die gleiche Einrückung. Elemente einer Liste beginnen mit dem Zeichen „-“ und Elemente einer assoziativen Liste bestehen aus einem Schlüssel:Wert-Paar. Listen und assoziative Listen enthalten jeweils nur gleichartige Listenelemente (Material 1).

Alle Elemente einer Liste und alle Werte einer assoziativen Liste können entweder Konstanten oder auch wieder Listen oder assoziative Listen sein. In den beiden letztgenannten Fällen spricht man dann von geschachtelten Listen. Die Schachtelung wird durch einen Zeilenumbruch und eine Einrückung mit Leerzeichen (<SP>) dargestellt (Material 1).

Material 1

Beispiel von Listen und assoziativen Listen in YAML

Liste

assoziative Liste

- Apfel

- Banane

- Karotte

Name: Frank

Alter: 19

Sport: Fußball

geschachtelte Liste

geschachtelte assoziative Liste

assoziative Liste mit einer Liste als Wert

- HTML

-

- Überschrift H1

- Absatz p

- CSS

- JavaScript

Datum: 2021 05 17

Name: Lisa

Adresse:

Straße: Allee 17

PLZ: 64646

Ort: Heppenheim

Datum: 2021 05 17

Name: Frank

Interessen:

- Sport

- Politik

Alter: 19

Material 2

YAML-Texte

a

b

Datum: 2021 04 05

RechnungNr: 7266

Produkt:

-

Beschreibung: Basketball

Preis: 86

Menge: 4

-

Beschreibung: Hantel

Preis: 48

Menge: 2

-

Name: Martin Schmidt

Anstellung: Entwickler

Fachkompetenz:

- Python

- Java

- Pascal

-

Name: Tabitha Bitumen

Anstellung: Entwicklerin

Fachkompetenzen:

- Lisp

- Fortran

- Erlang

Material 3

Text in einer Konfigurationsdatei

packages:

yum:

mod_ssl: false

files:

servercrt:

mod: 000400

owner: admin

- group root

script:

- cd tools

- tox ecover

Material 4

Unvollständige Grammatik G zur Sprache YAML

T={<CR>,<LF>,<SP>,<INDENT>,<DEDENT>,-,:, true, false, null,0,…,9,a,…,z,A,…,Z}T = \{<\text{CR}>, <\text{LF}>, <\text{SP}>, <\text{INDENT}>, <\text{DEDENT}>, \text{-,:, true, false, null}, 0, \dots, 9, a, \dots, z, A, \dots, Z\}

N={YAML,Liste,Element,AssoziativeListe,Schlu¨ssel,Wert,Konstante,Zeichenkette,Zeichenketten,Zahl}N = \{\text{YAML}, \text{Liste}, \text{Element}, \text{AssoziativeListe}, \text{Schlüssel}, \text{Wert}, \text{Konstante}, \text{Zeichenkette}, \text{Zeichenketten}, \text{Zahl}\}

Startsymbol=YAML\text{Startsymbol} = \text{YAML}

$\begin{aligned}

P = \{ & \text{YAML} & \to & \ \text{Liste} \mid \text{AssoziativeListe}, \\

& \text{Liste} & \to & \ \text{Element } <\text{CR}> <\text{LF}> \mid \text{Element } <\text{CR}> <\text{LF}> \text{Liste}, \\

& \text{AssoziativeListe} & \to & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \mid \\

& & & \ \text{Schlüssel}: <\text{SP}> \text{Wert } <\text{CR}> <\text{LF}> \text{AssoziativeListe}, \\

& \text{Element} & \to & \ \text{- } <\text{SP}> \text{Wert}, \\

& \text{Schlüssel} & \to & \ \text{Zeichenkette}, \\

& \text{Wert} & \to & \ \text{Konstante} \mid <\text{CR}> <\text{LF}> <\text{INDENT}> \text{Liste } <\text{DEDENT}> \mid \\

& & & \ <\text{CR}> <\text{LF}> <\text{INDENT}> \text{AssoziativeListe } <\text{DEDENT}>, \\

& \text{Konstante} & \to & \ \text{Zeichenketten} \mid \text{Zahl} \mid \text{true} \mid \text{false} \mid \text{null}, \\

& \text{Zeichenketten} & \to & \ \text{Zeichenkette} \mid \text{Zeichenkette } <\text{SP}> \text{Zeichenketten}, \\

& \dots \\

\} & & &

\end{aligned}$

Hinweis: Die Terminale <INDENT> und <DEDENT> stehen für eine Ein- bzw. Ausrückung.

In Material 4 ist ein Ausschnitt einer Grammatik G der Sprache YAML dargestellt.

3.1

Überführen Sie die Produktionen für YAML, AssoziativeListe und Wert in Syntaxdiagramme. (5 BE)

3.2

Zeichenkette ist eine nicht leere Folge von Buchstaben und Ziffern. Zahl ist eine ganze Zahl, die führende Nullen haben kann und der optional ein „-“ vorangestellt werden kann.

Geben Sie Produktionen für Zeichenkette und Zahl an. (3 BE)

3.3

Ordnen Sie die Grammatik G in die Chomsky-Hierarchie ein. (2 BE)

Du kannst auch nach Themen lernen

Übe ein Thema mit gemischten Aufgaben aus den Prüfungen aller Jahre.

Alle 11 Themen ansehen

Andere Prüfungen 2022

GK (2022)