IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

parcourir un tableau a la recherche de la plus petite valeur


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut parcourir un tableau a la recherche de la plus petite valeur
    Bonsoir,

    je me casse les dents depuis 1 heure sur ce problème.
    J'ai crée un tableau à 4 indices et pour chaque indice j'affecte la position de début du texte que je cherche dans une chaîne de caractère, ce qui donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim tableau(3) As Integer
                tableau(0) = dernier_ticket.IndexOf("Luxe :") 
                tableau(1) = dernier_ticket.IndexOf("Moyen :") 
                tableau(2) = dernier_ticket.IndexOf("Basique :") 
                tableau(3) = dernier_ticket.IndexOf("Neant :")
    ensuite je souhaite extraire de ce tableau, la plus petite valeurs des 4 entrées et l'affecté à une variable mais sans prendre en compte les valeurs =-1
    (oui car en effet si IndexOf retourne -1 c'est qu'il n'a pas trouvé le texte passé en paramètre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                Dim i As Integer
                For i = 0 To tableau.GetLowerBound(0) - 1
                    If tableau(i) <> -1 Then
                        test_choix = tableau(i)
                    End If
                Next
    Mais cela ne fonctionne pas j'ai toujours 0 pour ma var test_choix, je dois me tromper quelque part !

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Le problème est là tableau.GetLowerBound je te laisse consulter sa documentation pour comprendre
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Oui effectivement : Obtient l'index du premier élément de la dimension spécifiée dans le tableau.
    dans ce cas j'aurais toujours 0 effectivement. dois je utiliser une collection ?

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    un tableau c'est déjà une collection tu devrais chercher dans la documentation s'il n'y aurait pas une méthode qui fait ce que tu souhaites quelque chose qui permettrait d'obtenir l'index du dernier élément de la dimension spécifiée dans le tableau. par exemple
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    non je n'ai pas trouvé !!!

  6. #6
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bah faut apprendre à chercher (ça te sera utile pour la suite) la réponse se trouve sur cette page (et pas très loin de celle que tu as utilisée par erreur de surcroit)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Mais oui suis je bete mille excuse pour mes questions sans meme avoir chercher profondement donc au final si cela peu servir voila ce que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Array.Sort(tableau)
                test_choix = tableau(0)
    et ainsi j'obtient la valeur mini.
    merci sehnsucht désolé de t'avoir dérangé et merçi du temps que tu ma consacré.

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Ça va pas t'aider des masses ça ; si tu tries ton tableau et que tu prends la première valeur ; si jamais ton tableau contient des -1 la valeur minimale (et donc la première) sera ce -1, chose que tu disais ne pas vouloir dans un précédent post
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ah oui ben pour les -1 j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim i As Integer
                For i = 0 To tableau.Length - 1 'on parcour le tableau des libelles
                    If tableau(i) = -1 Then 'et si on trouve -1 on le place en haut du tableau
                        tableau(i) = 999 'on affecte une valeur forte
                    End If
                Next i
     
                Array.Sort(tableau) 'on trie le tableau le premier element etant la plus petite valeur
                test_choix = tableau(0) 'on cherchera entre la position de nature et test_choix
    pas mal non ?
    je suis fier de moi la !

  10. #10
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    T'as pas l'impression que ton tri sert à rien ?

    Déjà tu as (en partie) trouvé ce que tu cherchais en utilisant tableau.Length (personnellement je pensais te faire trouver GetUpperBound qui se trouvait juste 2 lignes en dessous de GetLowerBound dans la documentation mais ça revient au même)

    Ensuite, toi tu parcours ton tableau, en remplaçant les -1 par une grosse valeur, puis tu tries et enfin tu prends la première valeur ; pourquoi tu ne profites pas de ton parcours initial (celui où tu remplaces par des grosses valeurs) pour chercher ton minimum directement ; par exemple tu pourrais faire (en gros le code que tu avais commencé dans ton premier post du sujet) :

    1. initialiser ton test_choix à une grande valeur
    2. parcourir ton tableau
    3. si la valeur courante est -1 on ne fait rien
    4. sinon si la valeur courante est plus petite que test_choix on la remplace

    Moralité en fin de boucle test_choix contiendra la plus petite valeur qui n'est pas -1
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  11. #11
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour/Bonsoir

    Pourquoi mettre dans un tableau les indexof et ne pas chercher la plus petite valeur directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    dim minval as integer
    minval = dernier_ticket.length 
    dim thestrings as new list(of string)
      thetrings.add ("Luxe :"    )
      thetrings.add ("Moyen :")
      thetrings.add ("Basique :")
      thetrings.add ("Neant :" )
     
     for each item in thestrings
       if (dernier_ticket.IndexOf(item) < minval) andalso dernier_ticket.IndexOf(item) >-1  then
          minval =  dernier_ticket.IndexOf(item)
       end if 
    next

  12. #12
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    echo ?! c'est un peu ce que je viens de dire (à ceci près que tu le fais directement là où je parlais du tableau qu'il évoque [car il a peut-être besoin de ses IndexOf plusieurs fois et dans ce cas là faut bien les stocker]) sans parler du fait que calculer 3 fois le même IndexOf par item c'est peu judicieux
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  13. #13
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    sehnsucht j'ai du mal à saisir ce que tu me dit car :
    Ensuite, toi tu parcours ton tableau, en remplaçant les -1 par une grosse valeur, puis tu tries et enfin tu prends la première valeur ; pourquoi tu ne profites pas de ton parcours initial (celui où tu remplaces par des grosses valeurs) pour chercher ton minimum directement
    si je fait ca j'obtiendrais en minimum -1 ! or je commence à chercher le minimum positif.

    est ce que tu pense que ma méthode ralentira mon programme ?

  14. #14
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par gastoncs Voir le message
    Ensuite, toi tu parcours ton tableau, en remplaçant les -1 par une grosse valeur, puis tu tries et enfin tu prends la première valeur
    Ça c'est ce que tu fais toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To tableau.Length - 1
        If tableau(i) = -1 Then tableau(i) = 999
    Next
    Ce qui est déjà bancal; imagine toutes les valeurs de ton tableau sont plus grandes que 999 sauf les -1 même en les augmentant comme cela tu récupèrerais la mauvaise valeur

    Citation Envoyé par gastoncs Voir le message
    pourquoi tu ne profites pas de ton parcours initial (celui où tu remplaces par des grosses valeurs) pour chercher ton minimum directement
    Ça c'est ce que je te conseille de faire (par exemple) ; après tout en se basant sur le code juste au dessus ; t'as juste à faire "si c'est -1 ; je fais rien (autrement dit si c'est pas -1), sinon si c'est plus petit que la valeur mini courante [que je conserve] je la remplace"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    valeur_mini = 999 ' ou autre valeur forte genre Integer.MaxValue
    For i = 0 To tableau.Length - 1
        If tableau(i) <> -1 Then ' Si c'est pas -1
            If tableau(i) < valeur_mini Then ' Si c'est plus petit que mon mini actuel
                valeur_mini = tableau(i) ' on remplace
            End If
        End If
    Next
    Et après on peut condenser les 2 If en un seul et on retombe en gros sur le code montré par shayw

    De toute façon y'a 50 manières (plus ou moins alambiquées ) de faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Dim mini = tableau.Where(Function(num) num <> -1).Min
    ' qu'on peut aussi écrire
    Dim mini = Aggregate num In tableau Where num <> -1 Into Min
     
    ' ou bien
    Dim mini = tableau.OrderBy(Function(num) num).First(Function(num) num <> -1)
    ' qu'on peut aussi écrire
    Dim mini = Aggregate num In tableau Order By num Into First(num <> -1)
     
    ' ou bien (plus extravagant encore)
    Dim mini = tableau.OrderBy(Function(num) num).SkipWhile(AddressOf (-1).Equals).First
    ' qu'on peut aussi écrire
    Dim mini = Aggregate num In tableau Order By num Skip While num = -1 Into First()
     
    ' etc.
    Citation Envoyé par gastoncs Voir le message
    est ce que tu pense que ma méthode ralentira mon programme ?
    Ça dépend principalement de la taille de ton tableau ; mais c'est surtout un non-sens logique ; tu parcours ton tableau (donc comme tu passes sur chaque élément un par un tu as les moyens de les regarder pour prendre le plus petit) tu augmentes les -1 pour qu'il soit plus grands ; tu tries et tu prends le premier.

    Donc si on prenait une situation du "quotidien" ; tu cherches la plus petite personne non naine (nain = -1 ici) tu commences par les regarder un par un, les nains tu leur donnes des échasses puis tu les tries du plus petit au plus grand et tu prends le premier.
    Ma solution, c'est tu les regardes un par un en gardant toujours le plus petit à côté de toi hors du rang, si c'est un nain, tu zappes et tu passes direct au suivant ; et quand t'en trouve un plus petit que celui qui est avec toi tu le remplaces par le nouveau ; au final quand t'as fini de regarder tout le monde, t'as bien le plus petit avec toi c'est quand même mieux non ? [et j'aurai le prix de la métaphore de l'année là ]
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  15. #15
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    belle métaphore en tout cas tes explications sont claires, je vais de suite me mettre au travail. merci pour ton aide sehnsucht

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Recherche de la plus grande valeur d'un tableau et de son rang
    Par TheSpecialOneDZ dans le forum Free Pascal
    Réponses: 2
    Dernier message: 23/12/2014, 19h27
  2. [XL-2003] Recherche de la plus grande valeur correpondant à une clé
    Par blepy dans le forum Excel
    Réponses: 3
    Dernier message: 26/09/2012, 08h25
  3. Recherche rapide de la plus petite valeur propre
    Par Alexis.M dans le forum Mathématiques
    Réponses: 3
    Dernier message: 08/12/2011, 16h54
  4. Recherche de la kième plus petite valeur : 2 solutions à étudier
    Par Cladouros dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 25/10/2010, 09h59
  5. Réponses: 5
    Dernier message: 08/12/2007, 20h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo