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

Signal Discussion :

recherche un élément dans un vecteur trié


Sujet :

Signal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut recherche un élément dans un vecteur trié
    Salut;
    j'ai un vecteur v qui contient n valeurs.
    Comment je dois faire si je veux chercher un élément x dans ce vecteur v trié. Tel que cet élément x doit être la dernière qui a la différence avec le suivant supérieur à 100.
    Peut être mon explication n'est pas clair donc je donne un exemple.
    v = [120 200 250 280 405] ==> x sera égal à 280;
    LE CODE sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i= 1: n
    traitement;
    end

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Avant de chercher à coder il faudrait peut-être réfléchir à l'algorithme.
    Donc essayes déjà de formaliser un peu mieux ton problème (une boucle, une condition,...)
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut
    voilà un essai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    i=1
    while(i<length(v))
        if (diff(v(i),v(i+1))
            x=v(i+1)
            i= i+1;
        end
    end
    comment je peux le rendre mieux
    merci

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Et ça fonctionne ? (en fait je pose la question mais la réponse est non).
    As-tu regardé l'aide de la fonction DIFF ?
    Pourquoi se compliquer la vie alors que la condition pourrait simplement être :Et pourquoi faire un WHILE et pas une boucle FOR (en arrêtant la boucle à length(v)-1 puisque tu utiliseras i+1) ?

    Voilà quelques pistes.
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 203
    Points : 68
    Points
    68
    Par défaut
    bon la réponse est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i= 1:length(v)-1
    if(v(i+1)-v(i)>100)
    v(i+a) =v(i);
    end
    end
    Merci pour tous "les matlabiens"

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    C'est quoi a ?

    Enfin maintenant que tu as trouvé une réponse par toi-même, il faut savoir que ce code est largement optimisable grâce à la vectorisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    difference=v(2:end)-v(1:end-1) %vecteur des différences v(i+1)-v(i) pour i=1 : length(v)-1
    idx=difference > 100 %indices logiques (voir la FAQ sur ce sujet) des éléments de différence supérieurs à 100
    res=v(idx) %les elements tq la difference avec le suivant est > 100
    %Le dernier de ces élements est la réponse :
    res(end)
    ps : n'oublie pas le bouton résolu
    Règles du Forum

    Adepte de la maïeutique

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/05/2014, 10h29
  2. Suppression d'un élément dans un vecteur
    Par C.R.E.A.M dans le forum SL & STL
    Réponses: 6
    Dernier message: 02/02/2008, 23h11
  3. Réponses: 9
    Dernier message: 28/11/2007, 08h12
  4. Réponses: 6
    Dernier message: 26/11/2007, 16h26
  5. Rechercher un élément dans un DataGridView
    Par vb dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/08/2007, 17h31

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