[ Für Anfänger ] Returnwert von 2 Zahlen
-
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.
-
Helium schrieb:
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.
ist true denn standardmäßig als 1 und false als 0 definiert?
-
Ja
-
SideWinder schrieb:
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
Achso, ich hatte die Klamma überlesen
Cu
André
-
So, und jetzt das ganze ohne die Verwendung von <, >, <=, >=, ?:, Standardfunktionen, inline-asm, if, while etc. und alles in einer Zeile in der Returnanweisung. Wer das schafft ist ab heute mein persönliches Vorbild
.
EDIT: Oder geht es doch? Mal probieren...
-
MaSTaH schrieb:
So, und jetzt das ganze ohne die Verwendung von <, >, <=, >=, ?:, Standardfunktionen, inline-asm, if, while etc. und alles in einer Zeile in der Returnanweisung. Wer das schafft ist ab heute mein persönliches Vorbild
.
MrN? Zumindest auf vielen Plattformen.
-
Stimmt, geht doch. Übersehen
. Naja, plattformunabhängig wird es wohl einfach nicht gehen.