Minimum dans un vecteur

Signaler
Messages postés
2
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
27 avril 2010
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,

je cherche à retourner la valeur minimale d'un vecteur mais différente de 0.
exemple x = [7, 0, 12, 5, 13]
Je voudrai retourner le plus petit élément strictement positif donc 5 mais je ne sais pas comment préciser cela en c++.
Si vous pouviez m'aider cela serait très sympa.
Merci d'avance pour vos réponses

5 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Essaie au moins de nous proposer un début de boucle, on aidera ensuite.

int idxPlusPetitSupZero(int *patb)
{
// TON CODE ICI
}

Tu retournes index, -1 si pas de > 0 trouvé ainsi code appelant saura quoi faire en ce cas.

ciao...
BruNews, MVP VC++
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Regarde du côté de min_element: http://www.cppreference.com/wiki/stl/algorithm/min_element
Exemple ici avec le max_element: http://www.cppreference.com/wiki/stl/algorithm/max_element

Ex propre, pure C++:
#include 
#include 
#include <vector>

bool minNotZero(int elem1, int elem2)
{
  if (elem1 <= 0)
    return 1;
  if (elem2 <= 0)
    return -1;

  return elem1 < elem2;
}

int main()
{
  std::vector v;
  std::vector::const_iterator iter;

  v.push_back(7);
  v.push_back(0);
  v.push_back(12);
  v.push_back(5);
  v.push_back(13);

  // Plus petit element
  iter = std::min_element(v.begin(), v.end());
  std::cout << *iter << std::endl;

  // Plus petit element avec predicat
  iter = std::min_element(v.begin(), v.end(), minNotZero);
  std::cout << *iter << std::endl;

  return 0;
}

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
int idxPlusPetitSupZero(int *ptab, int nelems)
{
int v, pos, t, idx;
for(pos = 0; pos < nelems; pos++) {
if((v = ptab[pos]) > 0) goto firstFOUND;
}
return -1;
firstFOUND:
idx = pos;
while(++pos < nelems) {
if((t = ptab[pos]) > 0) {
if(t < v) {v t; idx pos;}
}
}
return idx;
}

J'ai vu que c'est écrit "C++" mais c'est le plus souvent parce que "C" se dit moins, simple effet de mode.
Ce n'est pas pour autant qu'il faut fabriquer des légions de handicapés de la prog. Quand un demandeur n'est pas capable de se faire une mini bouclette du genre que j'ai mis plus haut, c'est pas avec ce que tu lui montres qu'il aura évolué d'un iota.

Ensuite bien entendu, chacun fera comme il voudra.
Si en plus on compare "propreté" à tailleCode + efficacité, alors...

ciao...
BruNews, MVP VC++
Messages postés
2
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
27 avril 2010

Je ne vois pas pourquoi vous avez l'air d'être assez sarcastiques dans vos réponses. Je suis venue demander de l'aide pour une simple petite boucle car je me retourve à devoir faire un algorithme pour "résoudre" un problème de tsp mais je n'ai jamais programmé à part quelques lignes de fortran. Et pour tout vos dire je ne connais même pas la différence entre le C et le C++...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Faut pas te formaliser, les devs ont rarement le temps de prendre des gants pour parler. On va direct au but mais c'est pas pour cela qu'on agresse qui que ce soit.

ciao...
BruNews, MVP VC++