Wertetausch (Dreieckstausch)

SMoeller

Mitglied
Hallo,
ich habe eine Aufgabe bekommen, die so lautet:

Den beiden Variablen alpha und beta werden durch Eingabeanweisungen Werte zugewiesen. Die Wertebelegung soll in der Form
alpha : (mit konkreten Zahlenwerten)
beta:
ausgegeben werden. Anschließend sollen die Werte vertauscht werden, d.h. alpha soll den ursprünglichen Wert von beta und beta den ursprünglichen Wert von aloha besitzen, Eine erneute Ausgabe soll die geänderten Wertebelegungen anzeigen.
a) Entwickeln sie Algorithmus und Programm zu diesem Problem.
b) Klären soe die Arbeitsweise des Algorithmus durch eine Wertebelegungstabelle.
c) Warum bezeichnet man diese Methode als Dreieckstausch?

Da ich absoluter Anfänger bin (ich bin dabei ein Buch zu lesen) habe ich leider keine Ahnung, wie ich das machen soll.
 
Da durch eine einfache Zuweisung a la alpha = beta, zwar der Wert von beta in alpha stehen würde, jedoch der ursprüngliche Wert von alpha verloren gegangen wäre, führt man eine dritte Variable ein, in die zuerst der Wert von alpha 'gesichert' wird, um ihn nach der genannten Zuweisung beta zuzuweisen. Puh, langer Satz ;-)
 
So was kam mir auch schon in den Sinn (nicht zuletzt wegen dem Namen "Dreieckstausch"), aber mir ist leider nicht klar, wie ich dem Computer beibringe, dass er das alles auch so anzeigt. Wenn jemand mal Zeit hat und einem Anfänger wie mir helfen will, könnte er wenn er Lust hat ja mal schreiben, wie man das Programm schreibt und erklären, wie das funktioniert.
 
Hey Sascha,
das ganz einfach...
Du lässt variable alpha und beta eingeben von dem user...
und dann schreibst du folgendes:
gamma = alpha; (hab die variable mal gamma genannt)
alpha=beta;
beta=gamma;
und schon hast dus geschaft ;)
mfg und bis zu TKW :P
Jens
 
Hallo!

Tauschen kann man übrigens auch ohne dritte Variable ;-)
Code:
 /**
  * 
  */
 package de.tutorials;
 
 /**
  * @author Tom
  * 
  */
 public class BitwiseSwapExample {
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		int a = 18932;
 		int b = 37219127;
 
 		System.out.println("a = " + a);
 		System.out.println("b = " + b);
 
 		a ^= b;
 		b ^= a;
 		a ^= b;
 
 		System.out.println("a = " + a);
 		System.out.println("b = " + b);
 	}
 }

Gruß Tom
 
Hi Tom,

ich fand deinen code sehr interessant und habe ihn mal interpretiert :)

Kann es sein, dass man
a ^= b;
b ^= a;
a ^= b; <-- diese Zeile gar nicht benötigt?

Habe sie auskommentiert und es funktioniert trotzdem, weiss aber nicht was im Hintergrund passiert und wollte nochmal nachfragen :-(

Danke für antwort
 
Hi Tom

Dein Vorschlag hat sicherlich seinen interessanten Aspekt. Aber für Anfänger ist er sicher nicht geeignet.

Die Divise eines Programmierers (das gilt nicht nur für Anfänger!) sollte immer sein:

Schreib den Code so verständlich wie möglich, sofern nicht echte Performance-Probleme dagegen sprechen!

Das gilt m.E. auch für kleinere Programme, nicht nur für Programme, die man eh nur im Team bewältigen kann. Tu Dir selber den Gefallen, falls Du nach einiger Zeit mal wieder ran mußt.

Manche Entwickler verstehen unter dem Prinzip des "information hiding" leider immer noch das Vorgehen, so wenig know how wie möglich im Quelltext weiter zu geben, um Ihren Arbeitsplatz zu sichern.....

Genialer Code muß daher nicht unbedingt guter Code sein.

Gruß vop
 
Oh man, da muss ich wirklich einen Blackout gehabt haben. Die Aufgabe war ja nu wirlkich net so schwer. Die konnte sogar ich lösen. Aber schönen Dank an alle. Allerdings weiß ich net, was genau die "^" Zeichen in Toms Programm bewirken.
 

Neue Beiträge

Zurück