Argmin

Résolu/Fermé
toiles - Modifié le 25 juil. 2019 à 17:38
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 25 juil. 2019 à 17:35
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

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié le 25 juil. 2019 à 17:46
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