MINT lernen

Abituraufgaben: Zweidimensionale Reihungen

Zwei Aufgaben im Stil des Abiturs — Plätze im Kinosaal und ein Graustufenbild.

Dein Fortschritt:
0 / 0 Aufgaben
1

Plätze im Kinosaal

AFB I–II

Ein Kino verwaltet die Belegung eines Saals mit 8 Reihen zu je 12 Plätzen in einer zweidimensionalen Reihung: boolean[][] belegt = new boolean[8][12]; Der erste Index ist die Reihe (Zeile), der zweite der Platz in der Reihe (Spalte); true bedeutet belegt. Die Abbildung zeigt einen kleinen Testsaal test mit 3 Reihen und 5 Plätzen.

Testsaal test mit 3 Reihen und 5 Plätzen
LEINWANDs = 0s = 1s = 2s = 3s = 4z = 0z = 1z = 2rot mit Kreuz = belegt · weiß = frei
Zeile z = Reihe, Spalte s = Platz in der Reihe
  1. Beschreiben Sie die Bedeutung von belegt.length, belegt[0].length und belegt[7][11] im Sachzusammenhang und den Zustand des Saals direkt nach der Erzeugung der Reihung.
  2. Stellen Sie einen Algorithmus freiInReihe(saal, r) als Struktogramm dar, der die Anzahl der freien Plätze in Reihe r zurückgibt.
  3. Wenden Sie freiInReihe auf alle drei Reihen des Testsaals an. Geben Sie außerdem an, an welcher Position das Element test[2][3] stünde, wenn man den Testsaal zeilenweise in eine eindimensionale Reihung abwickelt (Position ab 0).
  4. Implementieren Sie in Java eine Methode int besteReihe(boolean[][] saal), die den Index der Reihe mit den meisten freien Plätzen zurückgibt; bei Gleichstand die vordere Reihe (kleinerer Index). Sie dürfen eine Methode freiInReihe nach b) verwenden.

Hinweise

Hinweis zu Aufgabe a)
Welche Zahl in new boolean[8][12] steht für die Reihen? Welchen Standardwert hat boolean?
Hinweis zu Aufgabe b)
Eine einzige Schleife über die Spalten der Reihe r genügt; die Anzahl der Plätze ist Länge von saal[r].
Hinweis zu Aufgabe c)
Freie Plätze pro Reihe auszählen. Für die Position: Wie viele Plätze liegen zeilenweise vor test[2][3]?
Hinweis zu Aufgabe d)
Muster „Maximum suchen“ — aber verglichen werden die Ergebnisse von freiInReihe, gemerkt wird der Index. Echt größer (>) sorgt für die vordere Reihe bei Gleichstand.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

belegt.length = 8 ist die Anzahl der Reihen, belegt[0].length = 12 die Anzahl der Plätze in einer Reihe (Reihe 0). belegt[7][11] gibt an, ob der letzte Platz (Platz 11) der hintersten Reihe (Reihe 7) belegt ist. Nach new haben alle 96 Elemente den Standardwert false: Der Saal ist leer.

Erwartungshorizont zu Aufgabe b)

Die Zeile r ist fest, nur der Spaltenindex läuft — eine verschachtelte Schleife ist hier nicht nötig.

Erwartungshorizont zu Aufgabe c)

freiInReihe(test, 0) = 2, freiInReihe(test, 1) = 4, freiInReihe(test, 2) = 1. Zeilenweise liegen vor test[2][3] zwei volle Reihen mit je 5 Plätzen und 3 Plätze der Reihe 2: Position \(2\cdot5+3=13\).

Erwartungshorizont zu Aufgabe d)
int besteReihe(boolean[][] saal) {
    int beste = 0;
    for (int r = 1; r < saal.length; r++) {
        if (freiInReihe(saal, r) > freiInReihe(saal, beste)) {
            beste = r;
        }
    }
    return beste;
}

Gleichwertig: die freien Plätze der besten Reihe in einer Variablen speichern (spart Aufrufe) oder die Zählung mit einer inneren Schleife direkt ausschreiben. Für den Testsaal liefert die Methode 1.

2

Ein Graustufenbild bearbeiten

AFB II–III

Ein Graustufenbild wird als zweidimensionale Reihung bild ganzer Zahlen gespeichert: Zeile z, Spalte s, Helligkeit von 0 (schwarz) bis 255 (weiß). Zum Testen dient ein Bild mit 2 Zeilen und 3 Spalten:

bilds = 0s = 1s = 2
z = 0090255
z = 120030128

Ein Bildbearbeitungsprogramm enthält folgenden Algorithmus:

  1. Analysieren Sie den Algorithmus: Geben Sie das Testbild nach dem Aufruf an und beschreiben Sie die Wirkung auf ein Foto.
  2. Verändern Sie den Algorithmus so, dass er das Bild waagerecht spiegelt (links und rechts vertauscht). Begründen Sie, warum die innere Schleife dabei nur bis zur Mitte der Zeile laufen darf.
  3. Schätzen Sie für ein Foto mit 1920 × 1080 Bildpunkten ab, wie oft der Rumpf der inneren Schleife von verarbeite ausgeführt wird und wie viel Speicher die Reihung belegt, wenn jede ganze Zahl 4 Byte braucht. Wie ändern sich beide Werte bei einem Bild mit doppelter Breite und doppelter Höhe?
  4. Für eine Belichtungsanzeige soll zu jeder Spalte die mittlere Helligkeit berechnet werden. Entwerfen Sie einen Algorithmus spaltenMittel(bild) als Struktogramm, der eine eindimensionale Reihung mit den ganzzahligen Mittelwerten aller Spalten zurückgibt, und geben Sie das Ergebnis für das Testbild an.

Hinweise

Hinweis zu Aufgabe a)
Rechnen Sie jede Zelle einzeln aus. Was wird aus Schwarz, was aus Weiß?
Hinweis zu Aufgabe b)
Tauschen Sie bild[z][s] mit bild[z][spalten − 1 − s] über eine Hilfsvariable. Was passiert, wenn jedes Paar zweimal getauscht wird?
Hinweis zu Aufgabe c)
Anzahl Durchläufe = Zeilen · Spalten. \(1\,\text{MB}=10^6\) Byte genügt als Näherung.
Hinweis zu Aufgabe d)
Die Ergebnis-Reihung hat so viele Plätze wie Spalten. Außen die Spalte, innen die Zeilen summieren; danach durch die Zeilenzahl teilen.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Nach dem Aufruf: Zeile 0: 255, 165, 0; Zeile 1: 55, 225, 127. Jeder Wert wird an der Mitte des Bereichs gespiegelt: Schwarz wird Weiß, Weiß wird Schwarz, helle Stellen werden dunkel. Es entsteht das Negativ des Bildes. Die Reihenfolge der Schleifen spielt hier keine Rolle, weil jeder Bildpunkt unabhängig von den anderen berechnet wird.

Erwartungshorizont zu Aufgabe b)

Jeder Tausch bewegt zwei Punkte gleichzeitig. Liefe s über die ganze Zeile, würde jedes Paar zweimal getauscht — das Bild wäre am Ende unverändert. Bei ungerader Spaltenzahl bleibt die mittlere Spalte stehen (Testbild: spalten / 2 = 1, nur Spalte 0 und 2 werden getauscht).

Erwartungshorizont zu Aufgabe c)

Durchläufe: \(1920\cdot1080=2\,073\,600\), also rund 2 Millionen. Speicher: \(2\,073\,600\cdot4\) Byte \(=8\,294\,400\) Byte \(\approx8{,}3\) MB. Bei doppelter Breite und Höhe vervierfachen sich beide Werte (etwa 8,3 Millionen Durchläufe und 33 MB), weil die Zahl der Bildpunkte das Produkt aus Breite und Höhe ist. Eine Speicherung als Byte statt als ganze Zahl würde den Speicher auf ein Viertel senken.

Erwartungshorizont zu Aufgabe d)

Testbild (vor verarbeite): Spalte 0: \((0+200)/2=100\), Spalte 1: \((90+30)/2=60\), Spalte 2: \((255+128)/2=191\) (ganzzahlig, exakt 191,5). Ergebnis {100, 60, 191}. summe muss für jede Spalte neu auf 0 gesetzt werden. Eine Lösung mit einer Reihung summe[s] und anschließender Division ist gleichwertig.