# Wertetausch (Dreieckstausch)



## SMoeller (29. September 2005)

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.


----------



## matdacat (29. September 2005)

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  ;-)


----------



## SMoeller (29. September 2005)

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.


----------



## Tsa (29. September 2005)

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  
Jens


----------



## Thomas Darimont (30. September 2005)

Hallo!

 Tauschen kann man übrigens auch ohne dritte Variable ;-)

```
/**
  * 
  */
 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


----------



## illaX (30. September 2005)

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


----------



## illaX (30. September 2005)

Habe es verstanden,

die Zeile ist wohl notwendig. Verstehe aber nicht wie er auf das Ergebnis kommt.


----------



## vop (30. September 2005)

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


----------



## Thomas Darimont (30. September 2005)

Hallo!



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


 War eigentlich nur als kleiner Gag gedacht ;-)
 Nix für ungut 

 Gruß Tom


----------



## SMoeller (30. September 2005)

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.


----------



## vop (30. September 2005)

@Tom

  Ich trau Dir auch zu, dass Du anständigen Code schreibst.  Das es als Gag gemeint war ist auch ok.

 Aber wie gesagt, es gibt leider immer wieder Leute, die meinen kürzerer und kompakterer Code ist immer besser als umständlich wirkender, gut strukturierter und für jeden lesbarer Code. Ich werde nun zwar etwas abschweifend  aber ich dachte wir sollten gerade Anfänger immer wieder ermutigen sauberen, lesebaren und leicht verständlichen Code zu erzeugen.

  Wer weiß, vielleicht müssen wir irgend wann mal deren Code warten,....

  Gruß
  vop


----------



## seicke (1. Oktober 2005)

Hallo zusammen!

Auch wenn _vop_ jetzt wahrscheinlich die Kriese bekommt: Vielleicht nochmal ein Beispiel wie es auch geht.
Sollte man aber vielleicht doch eher niemals benutzen 


```
public class Tausch {

    public static void main(String[] args) {
        int a=42;
        int b=4242;
        System.out.println("alpha: "+a+", beta: "+b);
        a = b + 0*(b=a);
        System.out.println("alpha: "+a+", beta: "+b);
    }
}
```

MfG
Sebastian


----------



## RedWing (1. Oktober 2005)

SMoeller hat gesagt.:
			
		

> 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.



Hallo das ^ ist ein Operator  in Java der die boolsche exor- bzw 
Antivalenzfunktion zur Verfügung stellt... 
Antivalenz ist das Gegenteil von Äquivalenz und bedeutet:
^(1,1) = 0
^(1,0) = 1
^(0,1) = 1
^(0,0) = 0

Bsp.:

6 ^ 7 = 1
0110 ^ 0111 = 0001

//edit


			
				seicke hat gesagt.:
			
		

> Sollte man aber vielleicht doch eher niemals benutzen



Aber witzig ist er allemal 

Gruß

RedWing


----------

