Den kleinsten Wert in einem Vektor finden...



  • hi habe ein problem und ich weiß, dass ihr mir hier helfen könnte...

    int find()
    {
        //Diese Funktion findet heraus, welcher Band die wenigsten Dopplungen hat
        //und gibt diesen Band (den Vektorindex) zurück.
    //------------------------------------------------------------------------------------
        int j = 0;
        int index = 0;
        int min = Dopplungsanzahlen[j];
        while(j != 8)
        {
            j++;
            if(Dopplungsanzahlen[j] < min)
            {
                    min = Dopplungsanzahlen[j];
                    index = j;
            }
        }
        cout << endl << "min Dopplungen : " << min << endl << "position im vektor : " << index << endl; // ist nur dazu da, damit ich sehe, ob das programm richtig handelt
        return index;
    
    }
    
    int Dopplungsanzahlen [8];
    

    in diesem vektor wollte ich den kleinsten wert finden mit der oberen funktion.(im vektor stehen zahlen drin, die aber nicht relevant sind, da der fehler da nicht liegt ;))

    ich hoffe, dass meine funktion verständlich ist, ansonsten einfach nachfragen...
    das problem ist, dass sie nicht immer den kleinsten wert findet und dass sie dann nicht den richtigen index zurückliefert.



  • Wenns dir nur um den kleinsten Wert und nicht auch um den Index geht ist folgender Ansatz mit der STL sicher günstiger und sicherer. 🙂

    #include <algorithm>
    using namespace std;
    
    int finde_max()
    {
      int Dopplungsanzahlen[] = {1, 5, 4, 0, 3, 2};
      //return *(min_element(&Dopplungsanzahlen[0], &Dopplungsanzahlen[6]));
      return *(min_element(&Dopplungsanzahlen[0], &Dopplungsanzahlen[sizeof Dopplungsanzahlen / sizeof *Dopplungsanzahlen]));
    }
    
    int main(int argc, char* argv[])
    {
      int result = finde_max();
      return 0;
    }
    

    mfg JJ



  • Wie wäre es mit std::min_element? 🙂

    IMO greifst Du aber einfach auf Speicher zu der Dir nicht mehr gehört:

    // j == 7
    while(j != 8)
        {
            // daher ein weiterer durchlauf
            j++;
            // j == 8
            if(Dopplungsanzahlen[j] < min)
            // Dopplungszahlen[8] gehoert dir nicht - peng!
    

    edit: Wieder mal zu langsam... 😉



  • nman schrieb:

    Wie wäre es mit std::min_element? 🙂

    IMO greifst Du aber einfach auf Speicher zu der Dir nicht mehr gehört:

    // j == 7
    while(j != 8)
        {
            // daher ein weiterer durchlauf
            j++;
            // j == 8
            if(Dopplungsanzahlen[j] < min)
            // Dopplungszahlen[8] gehoert dir nicht - peng!
    

    edit: Wieder mal zu langsam... 😉

    jo das hatte ich auch bemerkt... hatte ich nach dem post geändert.... habe das problem nun auch gelöst.... thx für eure antworten und mühen... 👍 😋


Anmelden zum Antworten