[ Für Anfänger ] Returnwert von 2 Zahlen
-
Eine Funktion erhält 2 (Ganz-)Zahlige werte.
Sie soll den grösseren der beiden zurückgeben.alles MUSS in EINER Zeile - In der Return Anweisung geschehen (ohne if bzw ? operator)
-
max(a, b) = (a + b + |a - b|) / 2
-
Gegenfrage: Warum kannst du den ?:operator nicht benutzen? Ohne den ist das einfach nur ineffizient, wenn es sich nicht um ints handelt.
Ok, bei dir sind es ints, mit denen geht das gerade noch.
-
Wie lauten die anderen Hausaufgaben Bitte Buch mit Seitenzahl angeben
-
return std::max(a, b);
Oder ist die verwendung der Standard-Bilbiothek auch untersagt?
-
Nehme ich doch stark an. Zumal diese Implementation wenn ich mich recht erinnere auch den ? Operator benutzt
...
-
MaSTaH schrieb:
Nehme ich doch stark an. Zumal diese Implementation wenn ich mich recht erinnere auch den ? Operator benutzt
...
Wenn man so argumentiert, weiß ich nicht, ob das Problem lösbar ist.
return (a + b + abs(a - b)) / 2;
abs enthält in der Implementierung auch den ? op.
Man kann natürlich abs(a - b) ersetzten gegen -sqrt((a-b)*(b-a)), aber
ich würd drauf wetten, dass die Implementierung von sqrt auch if's oder
? enthält
-
Ernsti schrieb:
alles MUSS in EINER Zeile - In der Return Anweisung geschehen (ohne if bzw ? operator)
Ich versuchs mal (MSVC++7):
int max(int a, int b) { __asm mov eax, dword ptr[a]; __asm cmp eax, dword ptr[b]; __asm jge reta; __asm mov eax, b; __asm jmp retb; reta: __asm mov eax, a; retb: }
Aufgabe gemäß Aufgabenstellung erfüllt und trotzdem performant :p . Allerdings ist __asm nicht Standard.
-
Taurin schrieb:
..aber ich würd drauf wetten, dass die Implementierung von sqrt auch if's oder ? enthält
Nicht wenn der fsqrt Befehl unterstützt wird :p .
-
int max(int a, int b) { __asm mov eax, dword ptr[a]; __asm cmp eax, dword ptr[b]; __asm jge reta; __asm mov eax, b; __asm jmp retb; reta: __asm mov eax, a; retb: }
Aufgabe gemäß Aufgabenstellung erfüllt und trotzdem performant . Allerdings ist __asm nicht Standard.
heftig
und ich dachte ich würde C++ verstehen (wenn das überhaupt C++ ist)
mfg
sOcKy
-
Ist Assemblercode der in C++-Code eingebettet ist. Also der Code hat nichts mit C++ zu tun.
MfG SideWinder
-
Ist Assemblercode
soviel zur Überschrift
[ Für Anfänger ]
mfg
sOcKy
-
Hi@all
Wie wäre es damit?
#include <iostream> using namespace std; int max(int, int); int main() { int a,b; cout << "Eingabe 1: "; cin >> a; cout <<"Eingabe 2: "; cin >> b; cout << max(a, b) << endl; return 0; } int max(int i, int j) { return (i > j) ? i : j; }
Cu
André
-
@Berufspenner: ?: is verboten
wie wärs damit?
int max(int a, int b) return (a + b + ( (a - b) & (~0U >> 1) ) ) / 2 }
-
Mr. N schrieb:
int max(int a, int b) return (a + b + ( (a - b) & (~0U >> 1) ) ) / 2 }
Ist auf jeder Plattform das höchstwertige Bit von signed int das Vorzeichenbit?
-
also man darf kein if benutzen... while in dem fall aber schon...
und auf einer zeile bedeutet nicht in einer anweisung oder
also:int max(int a, int b){ while(a>=b) return a; return b; }
edit:
In der Return Anweisung geschehen
mist! überlesen
-
socky schrieb:
und ich dachte ich würde C++ verstehen (wenn das überhaupt C++ ist)
Braucht man nicht wirklich zu verstehen wenn man nur C++ programmieren will. Kaum jemand bettet ASM in seine C++ Sourcen ein.
-
Mr. N schrieb:
@Berufspenner: ?: is verboten
Echt? Wuste ich nicht. Bin ja noch am lernen
Kannst du mir aber bitte noch veraten, warum es verboten ist?
Cu
André
-
Berufspenner schrieb:
Mr. N schrieb:
@Berufspenner: ?: is verboten
Echt? Wuste ich nicht. Bin ja noch am lernen
Kannst du mir aber bitte noch veraten, warum es verboten ist?
Cu
AndréHast du falsch verstanden. So ist das natürlich eine sehr schöne Möglichkeit. Bloß lautet die Aufgabenstellung "ohne if und op?:" und da du diesen Operator benützt ist die Lösung falsch ;).
MfG SideWinder
-
Da die Standard-Bibliothek scheinbar nicht benutzt werden darf ist die einfachste Lösung wohl:
return (b > a) * (b - a) + a;
Man nimmt an, das a der größere Wert ist. Falls das nicht so ist addiert man eben das hinzu, was zu b fehlt.