Minimum dans un vecteur

crapette1 Messages postés 2 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 27 avril 2010 - 27 avril 2010 à 16:19
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 27 avril 2010 à 22:04
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2010 à 16:44
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++
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 avril 2010 à 17:11
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]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2010 à 19:24
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++
0
crapette1 Messages postés 2 Date d'inscription lundi 26 avril 2010 Statut Membre Dernière intervention 27 avril 2010
27 avril 2010 à 20:51
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++...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2010 à 22:04
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++
0
Rejoignez-nous