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

MATLAB Discussion :

Repérer des valeurs identiques dans un tableau. [Débutant]


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut Repérer des valeurs identiques dans un tableau.
    Bonjour à tous ,

    Je bloque sur cet exercice (étudiant en info, cours d'introduction à Matlab) ;

    --

    Ecrire un programme qui demande à l'utilisateur de rentrer un tableau (easy ), ainsi qu'un nombre k > 0.

    Le programme vérifie ensuite si dans le tableau il y a un nombre qui revient exactement k fois.

    --

    Je m'arrête là, car c'est mon soucis en fait, je ne sais pas comment faire cette vérification avec des fonctions simples, étant donné qu'on me demande d'utiliser ce qu'on a étudié en cours jusqu'à présent, c'est à dire : find, etc.. Des choses assez basiques. Pas de boucles ni de if.

    Quelqu'un pourrait-il m'aiguiller ?

    Merci d'avance pour votre aide .

    Olimpe.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    tu donnes la réponse dans ta question, non?

    Il suffit d'utiliser la fonction find puis de regarder si le nombre d'éléments renvoyés par find correspond à k.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Bonjour magelan,

    Hum.. Peut-être ne saurais-je pas bien utiliser find, mais je ne saisis pas ce que tu veux dire..

    J'utilise habituellement find pour chercher dans un tableau une valeur quelconque. Je récupère un tableau en 0 1 0 1 1...

    Mais là je veux savoir si une valeur dans mon tableau revient k fois dans le tableau, par exemple je rentre k = 3, et mon tableau c'est [1 5 5 5 96 3 63..], le 5 revient trois fois, donc la réponse à ma question est "oui".

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Regarde ce que renvoie find :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A = [1 5 5 5 96 3 63]
    find(A==5)
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Arf ah j'ai du mal me faire comprendre alors,

    Le programme me demande de rentrer un tableau, je rentre ce que je veux, puis k.

    Ensuite il vérifie, mais il n'est absolument pas sensé savoir qu'il faut chercher 5 ou autre chose, tu vois ce que je veux dire ?

    Par la suite, le programme doit renvoyé la valeur qui est répété k fois (si il y en a une !), sinon il doit renvoyé 0 à l'utilisateur.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Ah! autant pour moi, j'avais lu trop vite!

    Il y plusieurs façons de faire. Tu peux combiner les fonctions histc et unique par exemple.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Ok Apparemment histc me permet de compter les valeurs dans un tableau, par exemple :

    N = histc(a,5);

    Comptera le nombre de valeurs 5 dans mon tableau a. Mais comment lui indiquer que je veux qu'il compte le nombre de valeurs de chaque chiffre présent dans mon tableau ?

    Merci.

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    salut,

    tu obtiendra tous les éléments différents de ton tableau avec la fonction unique()

    exemple
    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
    16
    17
     
    A =
     
         1     1     1
         2     3     4
         7     4     8
     
    >> B = unique(A)
     
    B =
     
         1
         2
         3
         4
         7
         8
    il te suffit alors de faire le test histc avec chacun des elements de B

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Mais comment suis sensé savoir quels sont les éléments de B ? En prenant ton exemple.

    Je rappelle que je dois écrire un programme, je ne connais donc absolument pas ce que rentre l'utilisateur.

    D'autre part, je ne vois pas comment utiliser histc ici au niveau de la syntaxe.. Désolé même avec help, j'ai un peu de mal ..

    Merci.

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    il me semble que au moment où tu fais ta recherche, l'utilisateur a renseigné ton tableau, sinon il te faut être devin.

    Reprenons

    - l'utilisateur rentre un tableau. Appelons le A.
    - l'utilisateur rentre le nombre k pour savoir si un élément du tableau A qu'il vient de rentrer revient k fois.

    à ce stade tu as un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    A =
     
         9     9     0     0     3     6     2     2     8     0
         1     9     8     2     7     6     5     8     5     5
         9     4     9     0     7     1     6     2     5     7
         6     8     6     0     1     1     8     9     9     9
         0     1     7     8     4     4     9     3     2     1
         2     4     7     6     4     9     5     1     7     5
         5     9     3     3     6     3     1     2     7     4
         9     7     6     9     7     5     1     6     3     0
         9     9     1     0     7     2     2     4     5     3
         1     6     7     4     2     7     8     3     0     1
    par exemple et

    k = 12 par exemple.

    - tu as besoin de savoir quels sont les différents éléments de ton tableau tu fais donc

    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
     
    B = unique(A)
     
    B =
     
         0
         1
         2
         3
         4
         5
         6
         7
         8
         9
    -tu es bien d'accord qu'il faut que tu comptes le nombre de fois que reviennent chacun de ces chiffres de B dans A. donc, tu parcours les éléments de B et tu comptes combien de fois il reviennent dans A, avec histc ou find, peu importe

    ici tu trouves que 7 revient 12 fois

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Oui tout à fait d'accord avec ton raisonnement.

    Juste une petite précision, le tableau que l'utilisateur doit rentrer est une simple matrice 1*1, un tableau ligne quoi.

    Pour le reste je comprends ce que tu veux dire, juste au niveau de la syntaxe je cale un peu pour le find de fin dirons nous .

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a =
     
        12    25    85     6     6     6    32     5     4
     
     
    >> b = unique(a);
    >> b
     
    b =
     
         4     5     6    12    25    32    85
    Et ensuite comment utiliser find exactement ? Je l'utilise habituellement comme par exemple find(a==2) ou find(a==1), etc.. Mais la ce n'est pas ça..

    Merci.

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    fait un histc avec les elements de b

    pour reprendre ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i = 1:numel(B) % numel est le nombre d'éléments de B
          resultat = histc(A,B(i)) % resultat est le nombre d'éléments de A égaux au ième élément de B
     
    %te reste plus qu'a tester si résultat vaut k
     
    end

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    D'accord, c'est plus clair à présent.

    Pour ce qui est de la deuxième partie, c'est à dire vérifier si le résultat est égal à k, ce n'est pas vraiment résultat qui doit être égal à k, c'est plutôt une des valeurs de mon tableau résultat, par exemple j'ai :

    résultat = [1 1 1 3 1 1 1]

    Je vois qu'une valeur apparaît donc 3 fois dans A.

    Comment sans utiliser de boucles ou de if, peut-on effectuer la vérification avec le k ?

    En l'occurence la mon k=3, donc c'est Ok, maintenant je veux que le programme affiche le nombre qui se répète trois fois dans A.

    Merci.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En passant
    FAQ Comment obtenir le nombre d'occurrences des valeurs d'une matrice ?

    Pour la suite tu peux utiliser la fonction find, ou l'indexage logique

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    OK, avec toutes ces réponses je commence à y voir plus clair, je voudrais récapituler ce que j'ai jusque là :

    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
    16
    17
    18
    a = [12 25 85 6 6 6 32 5 4]
     
    k = 3
     
    *** Pris à titre d'exemple pour mon programme ***
     
    b = unique(a);
     
    b =
     
         4     5     6    12    25    32    85
     
    i = 1:length(b);
    c = histc(a,b(i));
     
    c =
     
         1     1     3     1     1     1     1

    Maintenant en utilisant find car c'est au moins on l'a vu en cours sûr et certain , je ferais quelque chose comme ça :

    Ce qui me donne en ans, 3.

    Et là pardon, mais pour la vérification avec k je ne vois toujours pas.. Si k = 3 alors je ferais comme ceci :

    Je remonterai à b en fait pour savoir à quel chiffre de b correspond le 3 (en l'occurrence là c'est 6).

    Je pense à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    d = b(find (c > 1));
     
    d =
     
         6
    Et il faudrait ensuite afficher d.


    Si quelqu'un pouvait m'aider pour le code de la partie manquante.. Sans if. Je ne vois pas trop là tout de suite comment faire exactement.

    Merci.

  16. #16
    Invité
    Invité(e)
    Par défaut
    d = b(find (c > 1)); directement sans find d = b(c > 1); c'est le principe de l'indexage avec des valeurs logiques.

    Sinon tu souhaites trouver les valeurs égales à k, donc compares-les à ce k justement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    k = 3;
    c =  [ 1     1     3     1     1     1     1 ];
     
    >> c==k
     
    ans =
     
         0     0     1     0     0     0     0

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    En effet

    Bon je crois que j'ai finalement grâce à vos aides, réussi ce que je voulais.

    Petite question supplémentaire sur le même exo tant que j'y suis :

    Y'a t'il un moyen d'éviter d'utiliser histc mais plutôt d'utiliser sort ? Je sais que ça n'a rien à voir, mais vu que sort est autoriser pour résoudre l'exercice je me dis qu'il doit y avoir une raison.

    Si quelqu'un a une idée.

    Merci bien ! (Et merci pour le coup de main).

  18. #18
    Invité
    Invité(e)
    Par défaut
    La fonction sort est plutôt utilisée au sein de la fonction unique.
    Tu peux t'inspirer de ce sujet de la FAQ.

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Hum oui je vois donc difficile de se substituer à histc quoi qu'il arrive..

    Ok merci bien pour ta réponse, ah et je post quand même le code final au cas ou ça intéresserait/aiderait quelqu'un d'autre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    a = input('Tableau 1*1 : ');
    k = input(Nombre k > 0 :');
    b = unique(a);
    i = 1:length(b);
    c = histc(a,b(i));
    r = min(b(find(c == k)));
    disp(r);
    le min c'est parce que dans l'exercice on demande également que si c == k pour plusieurs valeurs dans le tableau a, on affiche la plus petite des deux.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Indexage logique : on se passe de find pour trouver les indices correspondant aux valeurs "true", on utilise les valeurs logiques directement :
    [EDIT]
    Sinon si tu tiens à remplacer histc, tu as accumarray
    Plus sérieusement, suite à un sort tu peux faire une simple boucle qui compare chaque élément avec le précédent.

    Préfère utiliser des nom de variables de plus d'une lettre et qui décrivent explicitement leur rôle

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2010, 13h40
  2. [WD-2003] Compter le nombre de valeurs identiques dans un tableau word
    Par borocam dans le forum VBA Word
    Réponses: 4
    Dernier message: 20/01/2010, 18h19
  3. Réponses: 8
    Dernier message: 28/12/2008, 17h08
  4. Manipulation des valeurs contenues dans un tableau
    Par khasanouray dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2007, 20h36
  5. recherche de valeur identique dans un tableau
    Par jean tof dans le forum Langage
    Réponses: 9
    Dernier message: 20/06/2006, 13h33

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