Mengen Klasse



  • if(m.istLeer())
       cout<<"Kein Maximum, weil die Menge leer ist!\n";
    else{
       tuwas(m.GetMaximum());
    }
    

    👍

    int* pi=m.GetMaximum();
    if(!pi)
       cout<<"Kein Maximum aus unbekanntem Grund!\n";
    else{
       tuwas(*pi);
    }
    

    👎



  • Wie wärs denn damit:

    .
    .
    .
    
    std::pair<int, bool> Menge::getMax()
    {
        int max = 0;
        bool hasMax = false;
        ...
        return std::pair<int, bool>(max, hasMax);
    }
    
    .
    .
    .
    


  • volkard schrieb:

    Ich höre deine Worte, doch sie ergeben leider keinen Sinn.

    Schade, dass sie für dich keinen Sinn ergeben.

    Sollte ein find("irgendwas") auf einen leeren String angewendet deiner Meinung nach eigentlich auch ein assert auslösen?



  • Jockelx schrieb:

    Sollte ein find("irgendwas") auf einen leeren String angewendet deiner Meinung nach eigentlich auch ein assert auslösen?

    ein find impliziert ja, dass es etwas zu suchen gibt und wer suchet der nicht findet. ergo muss find sagen können "nope, nix gefunden". Bei get sieht es anders aus. get heisst "gib mir" und da gibt es nur eine antwort: "da hast du".

    PS:
    die ganzen lösungen mit ungültigen werden, null zeigern, pair, etc. lenken alle von dem thema ab, dass getMax() einfach das maximum hergeben muss. getFoo gibt mir ein foo, getMax gibt mir ein max. da gibts keine alternative rückgabewerte. wäre alles nur workaround um ein design problem.



  • Jockelx schrieb:

    volkard schrieb:

    Ich höre deine Worte, doch sie ergeben leider keinen Sinn.

    Schade, dass sie für dich keinen Sinn ergeben.

    Sollte ein find("irgendwas") auf einen leeren String angewendet deiner Meinung nach eigentlich auch ein assert auslösen?

    Nein.
    Sollte ein .berechneDurchschnitt() auf einen leeren vector<double> eigentlich auch kein assert auslösen?



  • Shade Of Mine schrieb:

    Bei get sieht es anders aus. get heisst "gib mir" und da gibt es nur eine antwort: "da hast du".

    Ja, was bei Mengen aber nunmal nicht ansatzweise der Fall ist, dass man mir immer was geben könnte.
    Selbst wenn es hier bei dieser endlichen Menge nur den einen Fall gibt.

    Aber egal, jetzt geht es eh nur noch um Rechthaberei 😉

    Jockelx schrieb:

    Jetzt hab ich mich aber auch ausreichend zu dem doch eher unwichtigen Punkt geäussert.

    Sollte ein .berechneDurchschnitt() auf einen leeren vector<double> eigentlich auch kein assert auslösen?

    Doch, da im Gegensatz zu einer wohlfdefinierten leeren Menge der Durchschnitt von Nix nicht definiert ist.



  • Jockelx schrieb:

    Shade Of Mine schrieb:

    Bei get sieht es anders aus. get heisst "gib mir" und da gibt es nur eine antwort: "da hast du".

    Ja, was bei Mengen aber nunmal nicht ansatzweise der Fall ist, dass man mir immer was geben könnte.
    Selbst wenn es hier bei dieser endlichen Menge nur den einen Fall gibt.

    Problem gefunden.
    getMax() ist der falsche Name.

    Doch, da im Gegensatz zu einer wohlfdefinierten leeren Menge der Durchschnitt von Nix nicht definiert ist.

    was ist das maximum einer leeren menge?
    wenn es zB 7 ist, dann kann getMax ja 7 zurück geben...

    PS:
    das ist ein wichtiges thema - denn wie man hier sieht werden die leute sehr kreativ sich rückgabewerte und lustige signaturen auszudenken anstatt das problem dort zu behandeln wo es aufgetreten ist...



  • Jockelx schrieb:

    Doch, da im Gegensatz zu einer wohlfdefinierten leeren Menge der Durchschnitt von Nix nicht definiert ist.

    Das Maximum einer leeren Menge ist doch auch nicht definiert.



  • Shade Of Mine schrieb:

    Problem gefunden.
    getMax() ist der falsche Name.

    Jup.



  • Problem gefunden.
    getMax() ist der falsche Name.

    Das hab ich jetzt schon mehrfach gesagt 😉
    Ich sehe halt den Begriff 'allgemeine Menge' und die anderen wohl eher den Begriff 'endliche, diskrete Menge'.
    Letztere hat natürlich ausser im Fall der leeren Menge ein Maximum.

    Das Maximum einer leeren Menge ist doch auch nicht definiert.

    Es ist aber doch klar definiert, welche Mengen überhaupt ein Maximum bzw. keins haben und das sind nunmal jeweils unendlich viele (zumindest allgemein).



  • Jockelx schrieb:

    Problem gefunden.
    getMax() ist der falsche Name.

    Das hab ich jetzt schon mehrfach gesagt 😉
    Ich sehe halt den Begriff 'allgemeine Menge' und die anderen wohl eher den Begriff 'endliche, diskrete Menge'.

    Nope. Ich sehe findMax, searchMax, getMax, calcMax und so.
    getMax kann nicht nichts zurückgeben. Wenn Du nichts zurückgeben können willst, nenn es so wie es üblich ist, wenn man nichts zurückgeben können will.



  • Eine allgemeine (geordnete) Menge dürfte kein getMax haben. Aber wir betrachten hier ja keine allgemeine Menge, sondern nur endliche Mengen, eigentlich einen Container.
    Da ist getMax IMO vergleichbar mit top bei einem Stack oder head bei einer Liste. Eine Operation, die nur erlaubt ist, wenn es mindestens ein Element gibt.


Anmelden zum Antworten