Dreieckstausch
-
Hallo
wollte nur wissen warum kein verweiss im Kapitel Dreieckstausch vorhanden ist, indem man keine temp variable braucht. Ist für die leute interessant, welche gerne grübeln, oder welche auf einem alten MC programmieren.
-
Weil man in C++ ein swap() auch für nicht-primitive Typen verwenden kann. Und dann ist ein bitweises xor selten verfügbar. Wer sowas will, braucht ja nur mal hier im Forum zu suchen. Darüber gabs afaik schon Beiträge.
-
Naja eine Funktion braucht man dazu wirklich nicht
int a = 5; int b = 10; a = a+b; // 15 b = a-b; // 5 "was wir haben wollten" a = a-b; // 10 "was ir haben wollten"
-
Wie ich schon sagte, sowas funktioniert meist nur für primitive Typen. Und selbst dann nicht immer. Ein swap() hat in C++ aber grundlegende Anwendungsmöglichkeiten, deshalb wird man sowas auch häufig als Template Funktion implementiert sehen.
Versuch doch mal ein swap() mit folgendem Code nach deinem Schema durchzuführenstd::string a = "foo"; std::string b = "bar";
-
Sehr lustig.
In dem Beispiel war es int, nicht string o.ä.
Ist in Büchern auch meistens so, dass man als Bsp int hat.versuch du mal folgendes, nach deinem Schema
int a = 5; string s = "hallo welt";
-
bei den swap()-funktionen die man so findet geht es in erster linie ja auch nur ums verstehen. natürlich kannst du die funktion aus dem volkard-kurs nicht ohne weiteres nutzen um einen srting und einen integer zu tauschen. soll der arme volkard denn für jede möglichkeit eine extra-funktion hinschreiben? ich glaube mal nicht.
wie erwähnt es geht immer nur ums verstehen...
-
Ach vergisst es einfach!
Ich finde es bedauerlich, dass die Leute perdu immer nach irgendwelchen fehlern suchen.
Der liebe Volkhard, hat keine swap fkt angegeben, von der ihr immer so sprecht! sondern einfach mit hilfe einer tmp variable den wert von a zwischengespeichert. Ich fänds halt gut, dass man auch ne version zeigt, in der man nicht extra eine variable braucht. Könnte man z.b. als eine Aufgabe stellen, damit die c++ Neulinge auch etwas nachdenken müssen.
Deswegen war mein Post auch als @Volkhard deklariert.
-
@Volkhard schrieb:
Naja eine Funktion braucht man dazu wirklich nicht
int a = 5; int b = 10; a = a+b; // 15 b = a-b; // 5 "was wir haben wollten" a = a-b; // 10 "was ir haben wollten"
ich weiss nicht ob der trick zu gebrauchen ist, wenn a+b grösser wird als in ein 'int' passt. aber mit 'unsigned int' sollte es ja wieder klappen...
-
Quatsch. Wsa machst du bei negativen Zahlen?
-
Michael E. schrieb:
Quatsch. Wsa machst du bei negativen Zahlen?
keine ahnung, aber mach mal a und b 'char' statt 'int' und initialisier mit 100 und 200.
-
@Volkhard schrieb:
Ach vergisst es einfach!
Ich finde es bedauerlich, dass die Leute perdu immer nach irgendwelchen fehlern suchen.
wie ich schon sagte. Klar kann man immer Fälle finden in denen es nicht geht. Das war nicht der sinn. Der sinn war auch nicht den perfekten algorithmus zu finden
Und wenn ihr weiter postet, werdet ihr immer wieder das gleiche Zitat wie hier bekommen.
-
Der heißt volkard und nicht Volkhard.
net: Und dann? Was soll ich damit?
-
Michael E. schrieb:
net: Und dann? Was soll ich damit?
ausprobieren. geht nicht so, weil 300 nicht in ein 'char' passt
edit: den tauscher mit XOR finde ich besser
-
Wwas zur Hölle willst du mir damit sagen?
-
Michael E. schrieb:
Wwas zur Hölle willst du mir damit sagen?
das hier:
char a = 100; char b = 200; a = a+b; b = a-b; a = a-b; printf ("%d %d\n", a, b);
funzt nicht richtig. sieht nur mit 'unsigned char' gut aus
-
Welch Überraschung. Aber was hat das mit negativen Zahlen zu tun?
-
Michael E. schrieb:
Welch Überraschung. Aber was hat das mit negativen Zahlen zu tun?
der überlauf vielleicht?
-
-
net schrieb:
geht nicht so, weil 300 nicht in ein 'char' passt
aber 200 passt rein?
PS: ist das jetzt Zufall, dass du und Michael E. genau gleich viele Beiträge habt?
-
D@niel $chumann schrieb:
PS: ist das jetzt Zufall, dass du und Michael E. genau gleich viele Beiträge habt?
wir machen ein wettrennen