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:
Als aufmerksame Schüler/in könnte man jetzt auf die Idee kommen, an dem oberen Struktogramm herumzumäkeln, es sei nicht genau genug:
- Das Unterprogramm (Funktion, Methode …), das wir im Struktogramm beschreiben, heißt nicht Dreieckstausch, sondern
arrayWerteTauschen
. - Im oberen Struktogramm fehlt die Deklaration der Variablen
zwischenspeicher
- Wenn
zwischenspeicher
zum ersten Mal einen Wert zugewiesen bekommt, ist das als Initialisierung zu bezeichnen.
Ok. Alles klar, hier nochmal vollständig:
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)