Funktion Array sortieren und kleinsten(Anfang) und größten(Ende) Wert ausgeben.



  • Hallo,
    dies ist mein erster Post in diesem Forum.

    ich habe folgendes Problem. Ich finde keinen Weg eine Funktion zu schreiben, welche einen array nimmt(ohne feste größe) und diesen sortiert und mit den kleinsten und größten Wert ausgibt. Wir sollen es mit double Werten machen, jedoch habe ich es erstmal mit int gemacht. Das habe ich derzeit: Im der main ist mein code, welcher auch funktioniert. ich kriege ihn aber einfach nicht in eine funktionierende Funktion. Danke für eure Hife, und bitte versucht mir meine Fehler genaustens zu erklären, ich habe nicht viel Erfahrung mit c++ (:

    #include <algorithm>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    vector<int> arrtovecMinMax(const vector<int> *arr)
    {
        vector<int> tmp{};
    
        std::sort(tmp.begin(), tmp.end());
        std::cout<<"Min: "<<tmp.begin()<<"  Max: "<<tmp.end()<<endl;
        return tmp;
    }
    
    int main(){
      int v[] = {30, 40, 50, 20, 10};
      
      int arrSize = sizeof(v)/sizeof(v[0]);
      
      std::sort(std::begin(v), std::end(v));
      
      for (int n = 0; n<arrSize; n++){
        std::cout<<v[n]<<"	";
      }
      std::cout<<"\n";
      std::cout<<"MIN: "<<v[0]<<"	MAX: "<<v[arrSize-1]<<"\n";
      
      std::cout<<"Jetzt mit vektor!\n";
      arrtovecMinMax(v);
      
      
      return 0;
    }```cpp
    
    


  • @Nykz sagte in Funktion Array sortieren und kleinsten(Anfang) und größten(Ende) Wert ausgeben.:

    Danke für eure Hife, und bitte versucht mir meine Fehler genaustens zu erklären,

    Hast du denn die Fehlermeldung vom Compiler? Die sind immer wichtig.


  • Mod

    Dank begin und end können und sollten beide Varianten exakt gleich aussehen. Was derzeit bei dir nicht gleich aussieht:

    • Die vector-Variante hat komische Sternchen drin, die in der Arrayvariante nicht drin sind
    • Die Arrayvariante rechnet die Größe aus, die Vectorvariante hat dies nicht nötig
    • Die Vectorvariante hat irgendein komisches Objekt tmp, dass es bei der Arrayvariante gar nicht gibt


  • @Nykz sagte in Funktion Array sortieren und kleinsten(Anfang) und größten(Ende) Wert ausgeben.:

    welche einen array nimmt(ohne feste größe) und diesen sortiert und mit den kleinsten und größten Wert ausgibt.

    Noch was anderes: ist sortieren gefordert? Wenn du nämlich nur das Minimum und Maximum haben willst, kannst du https://en.cppreference.com/w/cpp/algorithm/minmax_element benutzen. Siehe auch den Beispielcode auf der cppreference-Seite.

    Also wichtig nochmal zu überlegen, was deine Funktion eigentlich machen soll:
    a) Vektor sorieren?
    b) Sortierte Kopie vom Vektor zurückgeben?
    c) Min und Max ermitteln und ausgeben?
    d) Min und Max returnen?
    Eine Funktion sollte möglichst nur eine Aufgabe haben. Was will deine machen? Was soll die returnen, wenn sie etwas reutrnen soll; was soll sie ausgeben, wenn sie überhaupt was ausgeben soll? Denk mal darüber nach!

    std::cout<<"Min: "<<tmp.begin()<<" Max: "<<tmp.end()

    Dazu 2 Dinge:
    a) du willst nicht den Iterator, sondern den Wert ausgeben, d.h. *tmp.begin() mit *.
    b) der end()-Iterator zeigt hinter das letzte Element. Du darfst diesen nicht mit * dereferenzieren. Du kannst aber einfach rbegin() verwenden (da geht der *, da das auf das erste Element von hinten zeigt).

    (und deine Funktion sollte natürlich eine andere Ausgabe machen, wenn der Vektor leer ist)


Anmelden zum Antworten