Existe t'il une fonction qui me donnerait le nombre de valeurs différentes contenues dans un tableau (à 1 seul dimension) ?
Existe t'il une fonction qui me donnerait le nombre de valeurs différentes contenues dans un tableau (à 1 seul dimension) ?
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
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 }
k ne deviendrait pas plus grand que 9 à un moment ou un autre ? ==> débordement
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
Oui, il y aussi le problème de la taille du tableau de stockage et dnas la boucle, tu peux simplement faire :
Puis
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; }
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
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());![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Encore mieux :
Avec comme seule restriction que les instances de MonType soient comparables.
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();
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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...
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
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();
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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...
merci pour vos réponses
Partager