Argmin

Résolu
toiles -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

On veut programmer en c++ une fonction qui prend en argument un tableau de réels et un entier indiquant sa taille et qui renvoie l'indice de minimum.

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Si tu travailles en C++, il serait mieux d'utiliser
    std::vector
    . Tu peux t'inspirer de cette discussion.

    Exemple

    #include <algorithm> // std::min_element
    #include <iterator>  // std::distance
    #include <iostream>  // std::cout
    #include <vector>    // std::vector
    
    template <typename T>
    std::size_t argmin(const std::vector<T> & v) {
        return std::distance(v.begin(), std::min_element(v.begin(), v.end()));
    }
    
    int main() {
        using namespace std;
        const vector<int> v = {2, 1, 10, 0, 3};
        size_t i = argmin(v);
        cout << "index = " << i << " valeur = " << v[i] << endl;
        return 0;
    }


    ... retourne :

    index = 3 valeur = 0


    Documentation

    Si tu veux vraiment utiliser un tableau de base, on est plus dans l'esprit du C :

    #include <iostream>
    
    template <typename T>
    std::size_t argmin(const T tab[], std::size_t n) {
        if (n == 0) return 0;
        T min = tab[0];
        std::size_t imin = 0;
        for (size_t i = 1; i < n; i++) {
            if (tab[i] < min) {
                min = tab[i];
                imin = i;
            }   
        }   
        return imin;
    }
    
    int main() {
        using namespace std;
        const int tab[5] = {2, 1, 10, 0, 3};
        size_t i = argmin(tab, 5);
        cout << "index = " << i << " valeur = " << tab[i] << endl;
        return 0;
    }


    Bonne chance
    1