Informatik

Übungsstunde

Aufbau und Handhabung der Schlange habt ihr gemeinsam erarbeitet. In dieser Stunde suchst du dir einen von zwei Wegen aus.

Weg Was du machst Wohin
Sicher werden kleine Aufgaben ohne Projekt, Schritt für Schritt schwieriger, mit Tests zur Rückmeldung weiter auf dieser Seite
Im Spiel anwenden eine Mechanik mit einer Schlange in dein eigenes Spiel einbauen Spielwerkstatt: Meldungen der Reihe nach und die Mechaniken mit einer Schlange

Beide Wege üben dasselbe: eine Schlange über ihre vier Methoden benutzen. Du kannst sie auch wechseln.

Stufe 1: Zustand verfolgen

In beiden Schlangen stehen schon Namen. Sage für jede Folge voraus, was front() und isEmpty() liefern, trage es ein und lass die Folge ablaufen. Zeichne nach jedem Schritt auf, wer in der Schlange steht – vorne links.

Auflösung. Erfrage das Passwort bei deiner Lehrkraft.

Stufe 2: Code und Struktogramme lesen

Die Schlange enthält vorne beginnend "a", "b", "c".

a) Was liefert raten(schlange)? Beschreibe in einem Satz, was die Methode allgemein tut.

b) Ist die Schlange nach dem Aufruf noch dieselbe?

String raten(Queue<String> pSchlange) {
    String ergebnis = "";
    while (!pSchlange.isEmpty()) {
        ergebnis = pSchlange.front() + ergebnis;
        pSchlange.dequeue();
    }
    return ergebnis;
}

c) In der Schlange stehen vorne beginnend Anna, Ben und Cem. Wie sieht sie aus, nachdem drehen aus dem Struktogramm zweimal aufgerufen wurde?

d) Schreibe drehen als Java-Methode void drehen(Queue<String> pSchlange).

Auflösung. Erfrage das Passwort bei deiner Lehrkraft.

Stufe 3: Fehler finden

Jede der drei Methoden enthält genau einen Fehler. Beschreibe, was beim Aufruf mit der Schlange Anna, Ben, Cem passiert, und verbessere die Methode.

a) Die Methode soll alle Namen ausgeben.

void ausgeben(Queue<String> pSchlange) {
    while (!pSchlange.isEmpty()) {
        IO.println(pSchlange.front());
    }
}

b) Die Methode soll die Anzahl liefern und die Schlange erhalten.

int anzahl(Queue<String> pSchlange) {
    Queue<String> hilf = new Queue<String>();
    int zaehler = 0;
    while (!pSchlange.isEmpty()) {
        pSchlange.enqueue(pSchlange.front());
        pSchlange.dequeue();
        zaehler++;
    }
    while (!hilf.isEmpty()) {
        pSchlange.enqueue(hilf.front());
        hilf.dequeue();
    }
    return zaehler;
}

c) Die Methode soll den vordersten Namen liefern und ihn aus der Schlange entfernen.

String herausnehmen(Queue<String> pSchlange) {
    pSchlange.dequeue();
    return pSchlange.front();
}
Auflösung. Erfrage das Passwort bei deiner Lehrkraft.

Stufe 4: Methoden schreiben

Implementiere die Methoden der Klasse Uebungen, bis alle Tests im Reiter Testrunner grün sind. Fang oben an – die Aufgaben werden nach unten schwieriger.

a) int summe(Queue<Integer> pZahlen) liefert die Summe aller Zahlen. Die Schlange darf dabei leer werden.

b) int zaehle(Queue<String> pSchlange, String pGesucht) liefert, wie oft pGesucht vorkommt. Die Schlange bleibt unverändert.

c) void entferneAlle(Queue<String> pSchlange, String pWert) entfernt jedes Vorkommen von pWert. Die Reihenfolge der übrigen Elemente bleibt erhalten.

d) Queue<String> kopie(Queue<String> pSchlange) liefert eine neue Schlange mit denselben Elementen. Die übergebene Schlange bleibt unverändert.

e) void vordraengeln(Queue<String> pSchlange, String pName) stellt pName ganz nach vorne. Die anderen behalten ihre Reihenfolge.

f) Bevor du vordraengeln programmierst: Entwirf im Editor zuerst ein Struktogramm. Setze es danach um.

Tipp: Welches Muster brauche ich?

Schau im Werkzeugkasten nach.

  • summe darf die Schlange leeren – das Muster Abarbeiten genügt.
  • zaehle und kopie sollen die Schlange erhalten – das Muster Erhalten. Bei kopie reihst du jedes Element in zwei Schlangen ein.
  • entferneAlle ist das Muster Erhalten mit einer Bedingung: Was entfernt werden soll, kommt einfach nicht in die Hilfsschlange.
  • vordraengeln: Die neue Person kommt zuerst in die Hilfsschlange, danach alle anderen.
Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Stufe 5: Knobelaufgabe

Abzählreim. Kinder stehen im Kreis. Reihum wird gezählt, und wer bei der letzten Silbe dran ist, scheidet aus. Danach wird beim nächsten Kind weitergezählt. Wer bleibt übrig?

Implementiere String abzaehlen(Queue<String> pKinder, int pSilben). Für die Kinder Anna, Ben, Cem, Dora, Emil und einen Reim mit 3 Silben scheiden Cem, Anna, Emil und Ben aus – übrig bleibt Dora. Bei einer leeren Schlange liefert die Methode null.

Tipp

Der Kreis ist eine Schlange, bei der niemand wirklich ausscheidet, der nur gezählt wird: Wer eine Silbe abbekommt, wird vorne herausgenommen und hinten wieder eingereiht – genau wie bei drehen aus Stufe 2. Erst bei der letzten Silbe bleibt das Kind draußen.

Wer übrig bleibt, ist das Kind, das als letztes ausscheidet, wenn man einfach weiterzählt, bis die Schlange leer ist.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Selbsttest

Übungsstunde

Teilbare URL erstellen

Abschnitte auswählen