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