MINT lernen

Übung AFB I

Zehn Grundaufgaben zum ganzen Kapitel — von Index und Länge über Tracetabellen bis zu Such- und Sortierschritten von Hand.

Dein Fortschritt:
0 / 0 Aufgaben
1

Aufgabenblock — AFB I

Zehn Standardaufgaben zum Reproduzieren: Index und Länge, Elemente lesen, Schleifen nachvollziehen, Suchen und Sortieren von Hand ausführen, Vergleiche zählen. Das sind die sicheren Punkte in jeder Klausur zu Reihungen.

A1
Länge und letzter Index
AFB I

Ein Messprogramm legt für die monatlichen Höchststände eines Flusspegels (in cm) die Reihung int[] pegel = new int[12]; an. Geben Sie den größten gültigen Index und den Wert von pegel[4] direkt nach dem Erzeugen an.

Index ab 0: Eine Reihung der Länge \(n\) hat die Indizes \(0\) bis \(n-1\). Nach new steht in jedem int-Platz der Standardwert.
Lösung anzeigen
Länge 12 → Indizes 0 … 11; new int[12] belegt jeden Platz mit 0 → 11 und 0
A2
Elemente lesen
AFB I

Eine Fußballmannschaft notiert die geschossenen Tore der letzten sechs Spiele:

int[] tore = {3, 0, 2, 5, 1, 4};

Nennen Sie die Werte von tore[3] und tore[tore.length - 2].

Zugriff: tore[0] ist das erste Element. tore.length ist hier 6, also ist tore.length - 2 der Index 4.
Lösung anzeigen
Indizes 0 1 2 3 4 5 ↔ Werte 3 0 2 5 1 4: tore[3] = 5, tore[6 − 2] = tore[4] = 1 → 5 und 1
A3
Summieren und Zählen
AFB I

Ein Schrittzähler speichert die Schritte von vier Tagen. Das Programm wertet sie in einem Durchlauf aus:

int[] schritte = {4200, 6800, 5100, 7300};
int summe = 0;
int viele = 0;
for (int i = 0; i < schritte.length; i++) {
    summe = summe + schritte[i];
    if (schritte[i] > 5000) {
        viele = viele + 1;
    }
}

Stellen Sie den Ablauf in einer Tracetabelle mit den Spalten i, schritte[i], summe, viele dar und geben Sie die Endwerte ein.

Tracetabelle: eine Zeile pro Schleifendurchlauf; nur die Variablen eintragen, die sich ändern. Die Bedingung ist echt größer als 5000.
Lösung anzeigen
i = 0: summe 4200, viele 0 · i = 1: 11000, 1 · i = 2: 16100, 2 · i = 3: 23400, 3 → summe = 23400, viele = 3
A4
Position des Maximums
AFB I

Wartezeiten (in Minuten) an einer Supermarktkasse:

int posMax = 0;
for (int i = 1; i < wartezeit.length; i++) {
    if (wartezeit[i] > wartezeit[posMax]) {
        posMax = i;
    }
}

Bestimmen Sie den Wert von posMax nach der Schleife.

Maximumsuche: posMax wird nur bei einem echt größeren Wert geändert. Was passiert beim zweiten Wert 15?
Lösung anzeigen
posMax: 0 → 1 (12 > 7) → 3 (15 > 12); bei i = 5 ist 15 > 15 falsch → posMax = 3 (erstes Vorkommen)
A5
Zweidimensionale Reihung lesen
AFB I

Ein Lager hat drei Regale (Zeilen) mit je vier Fächern (Spalten). lager[r][f] ist die Stückzahl in Regal r, Fach f.

lagerf = 0f = 1f = 2f = 3
r = 050127
r = 13914
r = 286211

Entnehmen Sie der Tabelle den Wert von lager[2][1] und geben Sie lager[0].length an.

Reihenfolge: erst Zeile, dann Spalte — lager[Zeile][Spalte]. lager.length zählt die Zeilen, lager[0].length die Spalten einer Zeile.
Lösung anzeigen
Zeile 2, Spalte 1 → 6; jede Zeile hat 4 Fächer → 6 und 4
A6
Lineare Suche durchführen
AFB I

Auf einem Parkplatz werden die Nummern der eingefahrenen Wagen gespeichert:

Die lineare Suche vergleicht von vorn nach hinten und bricht beim ersten Treffer ab. Ermitteln Sie die Anzahl der Vergleiche bei der Suche nach 23 und den Rückgabewert bei der Suche nach 99.

Lineare Suche: Jedes angesehene Element ist ein Vergleich. Wird der Wert nicht gefunden, gibt die Methode −1 zurück.
Lösung anzeigen
23 steht an Index 3 → Vergleiche mit 17, 42, 8, 23; 99 kommt nicht vor → alle 7 Elemente geprüft → 4 Vergleiche; Rückgabe −1
A7
Binäre Suche durchführen
AFB I

Eine sortierte Reihung mit Hausnummern einer Straße:

Wenden Sie die binäre Suche nach dem Wert 14 an (mitte = (links + rechts) / 2, ganzzahlig). Wie viele Elemente werden angesehen, und welchen Wert hat mitte beim zweiten Schritt?

Halbieren: Start mit links = 0, rechts = 10. Ist haus[mitte] zu groß, gilt danach rechts = mitte − 1, sonst links = mitte + 1.
Lösung anzeigen
mitte = 5 (22 > 14 → rechts = 4) · mitte = 2 (11 < 14 → links = 3) · mitte = 3 (14 gefunden) → 3 Elemente; zweites mitte = 2
A8
Selectionsort Schritt für Schritt
AFB I

Die Reihung wird mit Selectionsort aufsteigend sortiert: In jedem Durchlauf wird das Minimum des unsortierten Rests gesucht und mit dem ersten Element des Rests vertauscht.

Skizzieren Sie die Reihung nach jedem Durchlauf. Welcher Wert steht nach dem ersten Durchlauf an Index 3, und wie viele Vergleiche braucht das Verfahren insgesamt?

Selectionsort: Durchlauf 1 vergleicht 4-mal, Durchlauf 2 3-mal usw. Anzahl Vergleiche \(\frac{n(n-1)}{2}\).
Lösung anzeigen
D1: 9 ↔ 29 → 9 14 37 29 22 · D2: 9 14 37 29 22 · D3: 22 ↔ 37 → 9 14 22 29 37 · D4: unverändert; 4 + 3 + 2 + 1 → 29; 10 Vergleiche
A9
Bubblesort: erster Durchlauf
AFB I

Bubblesort vergleicht benachbarte Elemente von links nach rechts und vertauscht sie, wenn das linke größer ist.

Zeichnen Sie die Reihung nach dem ersten Durchlauf als Kästchenreihe. Wie viele Vertauschungen gibt es in diesem Durchlauf, und welcher Wert steht danach an Index 2?

Ein Durchlauf: Paare (0,1), (1,2), …, (4,5) nacheinander prüfen — immer mit dem aktuellen Inhalt, nicht mit der Ausgangsreihung.
Lösung anzeigen
16↔5 · 16|21 bleibt · 21↔8 · 21↔13 · 21↔2 → 5 16 8 13 2 21 → 4 Vertauschungen; 8
A10
Vergleichszahlen berechnen
AFB I

Berechnen Sie a) die Anzahl der Vergleiche von Selectionsort für 40 Werte und b) die Anzahl der angesehenen Elemente der binären Suche im ungünstigsten Fall für 1000 sortierte Werte.

Formeln: Selectionsort \(\frac{n(n-1)}{2}\); binäre Suche höchstens \(\lfloor\log_2 n\rfloor+1\) Schritte (\(2^{9}=512\le1000<1024=2^{10}\)).
Lösung anzeigen
a) \(\frac{40\cdot39}{2}=780\) · b) \(\lfloor\log_2 1000\rfloor+1=9+1\) → 780 und 10