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

MFC Discussion :

éléments de tableaux


Sujet :

MFC

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 9
    Par défaut éléments de tableaux
    Existe t'il une fonction qui me donnerait le nombre de valeurs différentes contenues dans un tableau (à 1 seul dimension) ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut
    Je ne crois pas, mais comme ce n'est pas très difficile à écrire 8)
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 9
    Par défaut
    alors peut être quel qu'un pourrait me dire ce qui cloche dans ma fonction ? c'est probablement une erreur toute bêt mais je ne vois pas laquelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	int k=0; // mon compteur du nombre de valeurs distinctes
    	int tmp[10]; // le tableau où stocker les différentes valeurs trouvées (pas plus de 10)
    	for(int j=0;j<10;j++) // initialisé à 0
    		tmp[j]=0;
    	for (i=0;i<nombre;i++) // je parcours le tableau
    		for(int j=0;j<10;j++) // et ma "table de stockage"
    			if (tmp[j]!=gph.niveau[i]) // est ce que la nouvelle valeur est déjà dans le tableau ? 
    			{
    				tmp[k]=gph.niveau[i]; // sinon je l'ajoute au tableau
    				k++; // et je compte un de plus
    			}

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    k ne deviendrait pas plus grand que 9 à un moment ou un autre ? ==> débordement

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Il faut regarder plutôt si la valeur est déjà dans la table de stockage et pas le contraire :
    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
    19
    20
      int k=0; // mon compteur du nombre de valeurs distinctes
       int tmp[10]; // le tableau où stocker les différentes valeurs trouvées (pas plus de 10)
       for(int j=0;j<10;j++) // initialisé à 0
          tmp[j]=0;
       for (i=0;i<nombre;i++) // je parcours le tableau
       {
           trouve = 0;
          for(int j=0;j<10;j++) // et ma "table de stockage"
             if (tmp[j]==gph.niveau[i]) // est ce que la nouvelle valeur est déjà dans le tableau ?
             {
                 trouve = 1;
                 break;
             }
     
          if (trouve == 0) // on n'a rien trouve, on ajoute
          {      
                tmp[k]=gph.niveau[i]; // sinon je l'ajoute au tableau
                k++; // et je compte un de plus
          }    
       }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Oui, il y aussi le problème de la taille du tableau de stockage et dnas la boucle, tu peux simplement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          for(int j=0;j<k;j++) // et ma "table de stockage"
             if (tmp[j]==gph.niveau[i]) // est ce que la nouvelle valeur est déjà dans le tableau ?
             {
                 trouve = 1;
                 break;
             }
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          if (trouve == 0) // on n'a rien trouve, on ajoute
          {     
                if (k < 10)
                {
                  tmp[k]=gph.niveau[i]; // sinon je l'ajoute au tableau
                  k++; // et je compte un de plus
                }
                else
                {
                    puts("tableau tmp trop pettit");
                     return <code_erreur>:
                }
          }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    et un truc comme ça :
    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
     
    // mon tableau ici des chaines ma ca peut etre autre chose
    char *aszressai[]={"11","12","11","13","14","13","20" };
     
    // un map key -> nb d'elements
        std::map<CString,int> MapItem;
        for(int i=0;i<sizeof(aszressai)/sizeof(char *);i++)    
            MapItem[aszressai[i]]++;        
     
        // comptage valeur unique.    
        i=0;
        std::map<CString,int>::iterator itpos;
        for(itpos=MapItem.begin();itpos!=MapItem.end();itpos++)
        {
            if(itpos->second==1) i++;
        }
        TRACE("\n unique : %d",i);
        TRACE("\n nb sans doublons : %d",MapItem.size());

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Encore mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <set>
     
    std::set<MonType> Set(tmp, tmp + 10);
    std::size_t NombreDeDifferents = Set.size();
    Avec comme seule restriction que les instances de MonType soient comparables.

  9. #9
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    S'il n'y a pas besoin de l'histogramme, j'utiliserai directement un std::set.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::set<type_des_elements> ens;
    std::copy(tab, tab+taille_tab, std::inserter(ens, ens.begin()));
    std::cout << "il y a " << ens.size() << " éléments différents.\n";
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Le nombre de lignes de code serait-il inversement proportionnel au nombre d'étoiles ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    On peut encore épurer un peu et epargner quelques octets à la pile 8)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int NbDifferents = std::set<MonType>(Tab, Tab + 10).size();

  12. #12
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut

    Tiens je n'avais pas fait attention qu'il y a avait eu une réponse pendant que je tapais la mienne.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Membre habitué
    Inscrit en
    Janvier 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 9
    Par défaut
    merci pour vos réponses

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

Discussions similaires

  1. opération sur les éléments de tableaux
    Par pingouin84k dans le forum Débuter
    Réponses: 17
    Dernier message: 30/09/2014, 18h28
  2. [Débutant] combinaison éléments de tableaux
    Par Hamza_Am dans le forum MATLAB
    Réponses: 8
    Dernier message: 21/05/2012, 16h52
  3. création de tableaux avec Array() et élément 'fantome'
    Par Talieth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2005, 09h49
  4. Réponses: 4
    Dernier message: 27/10/2005, 10h09
  5. Réponses: 2
    Dernier message: 14/09/2005, 13h39

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