Wie Funktion auslagern??



  • das kommt drauf an, wie du die Funktion verwenden willst. Sinnvoll wäre für mich

    double CalculateMedian(...)
    {
      double median = 0;
      // berechnung
      return median;
    }
    

    Dann wäre die Berechnung vernünftig gekapselt und du kannst mit dem Rückgabewert machen, was du willst. Ausgeben, speichern, für eine andere Berechnung verwenden...



  • silent_max schrieb:

    Bloß was gebe ich zurück??

    Schau mal nach, welche der Werte du nach der Schleife/Funktion noch brauchst...



  • Das wären die Variablen Elemente_größer und Elemente_kleiner würde ich jetzt sagen(siehe Code), bloß wie mache ich aus den beiden Variablen eine Variable??

    Gruß



  • Auweia!

    Vorschlag:

    #include <cassert>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <utility>
    
    using std::vector;
    
    vector<double> einlesen()
    {
      :::
    }
    
    void ausgabe(vector<double> const& werte)
    {
      :::
    }
    
    double mittelwert(vector<double> const& werte)
    {
      :::
    }
    
    double standardabweichung(vector<double> const& werte)
    {
      :::
    }
    
    double median(vector<double> werte) // <-- pass-by-value ist Absicht
    {
      const auto size = werte.size();
      assert(size>0);
      const auto center = werte.begin() + size/2;
      std::nth_element(werte.begin(),center,werte.end());
      if (size%2==0) {
        const auto max_left_elem = std::max_element(werte.begin(),center);
        return 0.5 * (*max_left_elem + *center);
      } else {
        return *center;
      }
    }
    
    :::
    

    (ungetestet)

    So nebenbei: Lern doch mal anständig C++. Das kann man ja nicht mit ansehen, was du da so fabrizierst. Da fehlt ne ganze Menge an Grundlagen. Für sowas gibt's schlaue Bücher.



  • Sorry aber Deinen Code verstehe ich nicht ganz...



  • Und das wird wohl auch so bleiben, wenn du keine konkrete Fragen dazu stellst.

    Falls du dich auf die Funktion median beziehst: Die C++ Standardbibliothek bietet extrem praktische, auf Sequenzen arbeitende Algorithmen, die man benutzen kann, nachdem man den entsprechenden Header <algorithm> einbindet. Ein gescheites C++ Buch sollte dich u.a. darüber aufklären, dass es sowas gibt, was da alles bei ist und wie der Kram zu benutzen ist. Von einem guten C++ Buch erwarte ich, dass es relativ früh (und nicht erst ganz zum Schluss) die wichtigen Dinge der Standardbibliothek erklärt. Das sind u.a. Container, Iteratoren, Algorithmen und deren Zusammenhang. nth_element ist ein Algorithmus (bzw Funktions-Template). Was das Ding macht, kannst du hier nachlesen. Die median-Implementierung über nth_element hat nur einen amortisierten, zeitlichen Aufwand von O(n) wohingegen dein Verfahren mit den zwei verschachtelten Schleifen quadratischen Aufwand in der Elementzahl n hat, also O(n^2).



  • in meine IDE kopieren, es laufen lasssen. gucken was passiert, per debugger drüber schauen, was wie wo passiert.

    und nachschlagen was da genutzt wird



  • krümelkacker schrieb:

    Und das wird wohl auch so bleiben, wenn du keine konkrete Fragen dazu stellst.

    Hm ... Dann stelle ich mal eine Frage:

    Wie sinnvoll ist ist, Kandidat als Rückgabewert zu deklarieren?



  • > Wie sinnvoll ist ist, Kandidat als Rückgabewert zu deklarieren?

    Was man deklariert ist der Rückgabetyp. Und der ist hier double.

    Wenn du eine Funktion "median" nennst, dann soll sie wahrscheinlich den Median zurück geben, nehme ich mal an. Der Median einer Sequenz von double-Zahlen ist eine double-Zahl, daher der Rückgabetyp double. Falls die Anzahl der Elemente gerade ist, taucht der Median nicht unbedingt in der Sequenz auf. Der Median der Sequenz {1,2,3,1729} ist beispielsweise 2.5.



  • Diese Frage gehört zu den Grundaufgaben jeder Programmierung, also zum Entwurf eines Programmes (Design). Programmblöcke 'lagert' man dann in Funktionen aus, wenn diese im Programm häufiger gebraucht werden oder die Übersichtlichkeit (Lesbarkeit) erhöhen. Ansonsten haben Funktionen eine Rückgabe und Parameter wie z.B.

    double AddiereZweiDoublezahlen(double Zahl1, double Zahl2)
    {
       double Ergebnis;
       Ergebnis = Zahl1 + Zahl2:
       return Ergebnis;
    }
    

    Mit mehr oder sehr viel weiteren Möglichkeiten zur Auslagerung in Funktionen von C++ sollst du nicht gleich erschreckt werden.

    Hast du schon mal darüber nachgedacht, ein Buch zu lesen? Könnte hilfreich sein! 🕶


Anmelden zum Antworten