Ordnen dreier Zahlen - If-Anweisungen falsch ?



  • Perfekt erklärt 🙂

    Dank dir Dravere

    fürDich: http://de.dreamstime.com/ich-liebe-dich-thumb22958.jpg

    €dit: Den ?-Operator gibt es doch in C++ oder nicht? :S

    Lg Mentras



  • Dravere hat dir sicher schon gut erklärt wozu du Blöcke brauchst. Für den Lerneffekt ist es am besten wenn du jetzt selbst überlegst welche Bereiche du mit {} kapseln musst.

    Zur Effizient deines Codes: Natürlich ist es bei heutigen Prozessoren egal, ob man ein wenig umständlich programmiert.
    Stelle dir aber vor, es wird nicht einfach nur ein Satz ausgegeben oder eine einfach Bedingung gecheckt sondern stattdessen tatsächliche Rechenlast erzeugt von deiner if-Anweisung (zB Videobearbeitung, komplexe wissenschaftliche/numerische Anwendungen) dann bist du gut beraten vorher das Problem zu durchdenken bevor du mit dem Programmieren anfängst.

    Du hast einfach eine Menge Redundanz in deinem Code.

    Eine kleine Frage am Rande: Was wird denn ausgeben wenn zahl1 und zahl2 gleichgroß sind?



  • War mir klar, je weniger Schaltungen, desto schneller ist das Programm...

    Jap, das muss ich noch einbauen, allerdings wird mir das zuviel "if-elseif-else"...

    Hat C++ den "(a > b) ? a : b " Operator noch?
    Dann könnte ich mir solche if-else ersparen...

    Lg Mentras



  • LaDispute schrieb:

    Eine kleine Frage am Rande: Was wird denn ausgeben wenn zahl1 und zahl2 gleichgroß sind?

    Und was, wenn zahl1 und zahl2 verschieden, zahl3 aber die größte ist?



  • "(a > b) ? a : b" kannst du zwar verwenden, wirklich lesbar wird dein Code dadurch aber auch nicht. Und Lesbarkeit ist genau das, was man sich wünscht wenn man nach einem halben Jahr wieder mal in Code reinschaut.

    Zudem: Wenn du beim Erfüllen / Nichterfüllen deines Vergleiches mehr als eine Zeile Code ausführen möchtest, kommst du ums Kapseln sowieso nicht drumrum.

    C++ und ?:
    http://en.wikipedia.org/wiki/Conditional_operator#C.2B.2B


  • Administrator

    Die Verschönerungsvorschläge sind zwar angebracht, aber ich weiss nicht, ob es dafür nicht noch zu früh ist 🙂

    Ich meine, am schönsten wäre hier ein kleines Array, ein std::sort aus der Standardbibliothek und eine Ausgabe des Arrays. Das wären dann noch ca. 10 Zeilen und überhaupt keine if-else Dinge 😉

    Es ist sicher gut mal zu sagen, dass man schönen Code schreiben sollte, aber ein Anfänger sollte vielleicht auch einfach zuerst mal die Sprache vollständig erlernen. Denn erst später hat man mehr und mehr Wissen, welches man einsetzen kann, um Code zu verschönern.

    Meint ihr nicht auch?

    Grüssli



  • Da hast du natürlich Recht. Am Anfang soll man gerne "sinnlose" Dinge programmieren, oder vielleicht auch umständliche um dann zu verstehen, wie es einfacher ginge. Mir geht es ja nicht um "schönen Code".

    Es ist meiner Meinung einfach von Anfang an wichtig die Probleme vorher zu durchdenken. Man lernt so nämlich "Programmieren/Problemlösen" anstatt "nur" C++

    Workflow und analytisches Denken sind wichtiger als Operator XYZ zu kennen.



  • LaDispute schrieb:

    "(a > b) ? a : b" kannst du zwar verwenden, wirklich lesbar wird dein Code dadurch aber auch nicht.

    Das ist Ansichtssache. Ich mag zum Teil kompakten Code, und finde auch, er kann die Lesbarkeit erhöhen. Für gewisse Dinge ist der operator?: sogar notwendig. Zwei Beispiele:

    1. Anweisungen im gleichen Scope.
    Das folgende Beispiel funktioniert mit if nicht, ohne ein standardkonstruiertes Objekt, Zeiger oder den Zuweisungsoperator zu verwenden.

    MyClass Var = Condition ? MyClass("hoi") : MyClass('t', 4);
    

    2. Template-Metaprogrammierung.
    Zur Kompilierzeit gibt es kein if . Da behilft man sich unter anderem mit operator?: bei boolschen Bedingungen.

    template <int N>
    struct abs
    {
        static const int value = (N >= 0) ? N : -N;
    };
    


  • Ich gib´s zu,...

    Der Code wurde mir zu unübersichtlich.

    STRG + A und dann ENTF...

    Morgen mach ich´s mit einer hübschen Funktion...

    Lg Mentras



  • @Nexus: Absolut richtig. Ging aber eher um den konkreten Fall hier und das Erlernen von Kapselung.

    @Mentras: Strg+S danach nicht vergessen 😉


Anmelden zum Antworten