Arrays: Dreieckstausch

    Wir können bisher Daten in einem Array speichern und diese ausgeben. Was man in der Praxis dabei häufig braucht, ist das Vertauschen von Elementen. Das heißt, dass zwei Elemente ihre Position im Array tauschen sollen.

    So etwas braucht man z.B. in einem Spiel, wenn eine Spielfigur einen Gegenstand aus ihrem Inventar nimmt, um diesen in die Hand zu nehmen. Meist muss man dafür einen anderen Gegenstand, den man bisher in der Hand hatte, zurück ins Inventar legen. Die beiden Gegenstände tauschen also ihre Position.

    Wie tauschen wir die Waffen?

    Wir werden uns nun anschauen, wie man einen solchen Tausch programmiert. Öffnen Sie dafür das Projekt 7130-Arrays-dreieckstausch-2-waffen-AUFGABE

    In dem Programm geht es darum: Wir haben eine Waffe in der linken und eine in der rechten Hand. Diese beiden Waffen wollen wir mit der Leertaste vertauschen!

    Lösungsidee

    Am Anfang sieht unser Array so aus:

    So, dann können wir ja mal einfach tauschen! Das müsste doch so gehen:

    Sieht doch logisch aus, oder? Ein Element im Array wird durch das andere ersetzt. Wenn Sie das Programm laufen lassen, sieht unser Array dann so aus:

    Hoffentlich sehen Sie das Problem! Wenn wir das 1. Element durch das 2. Element ersetzen, verlieren wir das 1. Element. Wir wissen dann auch nicht mehr, was vorher im Array an der ersten Position stand!

    Wenn Sie das Problem erkannt haben, kommen Sie vielleicht auch selbst auf die Lösung: Wir müssen das 1. Element "in Sicherheit bringen", bevor wir es überschreiben können! Das erreichen wir, indem wir uns den Inhalt des 1. Elements in der Variablen zwischenspeicher merken.

    Jetzt können wir das 1. Element durch das 2. Element ersetzen:

    Im letzten Schritt überschreiben wir das 2. Element mit dem Wert der Variable zwischenspeicher:

    Wenn Sie sich die obige Darstellung anschauen, wird Ihnen bestimmt sofort klar, warum man diese Form des Vertauschens von Elementen Dreieckstausch nennt!

    Darstellung des Dreieckstauschs im Struktogramm

    Das folgende Struktogramm stellt das Prinzip des Dreieckstauschs dar: Erstes Element in den Zwischenspeicher, zweites Element auf erste Position kopieren, Zwischenspeicherinhalt auf zweite Position kopieren:

    Struktogramm zum Dreieckstausch (MInimalversion)

    Als aufmerksame Schüler/in könnte man jetzt auf die Idee kommen, an dem oberen Struktogramm herumzumäkeln, es sei nicht genau genug:

    1. Das Unterprogramm (Funktion, Methode …), das wir im Struktogramm beschreiben, heißt nicht Dreieckstausch, sondern arrayWerteTauschen.
    2. Im oberen Struktogramm fehlt die Deklaration der Variablen zwischenspeicher
    3. Wenn zwischenspeicher zum ersten Mal einen Wert zugewiesen bekommt, ist das als Initialisierung zu bezeichnen.

    Ok. Alles klar, hier nochmal vollständig:

    Struktogramm zum Dreieckstausch - ausgiebige Version

    Aufgaben zum Dreieckstausch

    (1) Waffen tauschen

    Öffnen Sie das Projekt 7130-Arrays-dreieckstausch-2-waffen-AUFGABE und programmieren Sie den Dreieckstausch wie oben im Struktogramm dargestellt. Erstellen Sie den Programmcode an dieser Stelle:

    (2) Zombie-Attack

    Wählen Sie Ihre Waffe im Spiel Zombie-Attack! Öffnen Sie hierzu das Projekt 7135_Array_Tausch-AUFGABE

    So soll es funktionieren:

    Die Spielfigur hält immer die Waffe auf der Position 1 in den Händen. Wenn Sie eine andere Waffe wählen wollen, müssen Sie auf den grünen Button neben der gewünschten Waffe klicken. Diese Waffe soll dann mit dem Element 1 die Positionen tauschen.

    Erklärvideo: Dreieckstausch

    Arbeitsblatt: Dreieckstausch

    Arbeitsblatt »Dreieckstausch - Elemente im Array vertauschen« (PDF)