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


Anmelden zum Antworten