begin process at 2012 05 30 13:54:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

un ti pb sur les tableaux


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

un ti pb sur les tableaux

mardi 30 octobre 2001 à 17:30:17 | un ti pb sur les tableaux

Julius Caesar

On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'il n'y a pas 2 nbrs identiques générés.
dimanche 4 novembre 2001 à 00:25:32 | Re : un ti pb sur les tableaux

Lu


Il faut comparer chacun des nombres aux autres.

Le plus simple (et légèrement mieux que comparer chaque nombre à tous les autres) :
bool tous_differents = true;
static const unsigned int TAILLE = 8;
int tableau[TAILLE];
for(unsigned int i = 0; tous_differents && i != TAILLE-1; ++i)
{
for(unsigned int j = i+1; tous_differents && j != TAILLE; ++j)
{
tous_differents = (tableau[i] != tableau[j]);
}
}

(attention : je n'ai pas testé ce programme, c'est juste une idée qui me passe par la tête)

-------------------------------
Réponse au message :
-------------------------------

On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'il n'y a pas 2 nbrs identiques générés.
dimanche 4 novembre 2001 à 12:22:42 | Re : un ti pb sur les tableaux

Kaid


Pour moi la meilleure solution est d'utiliser une collection permettant la recherche d'éléments.

Tu peux par exemple utiliser l'objet MFC CMap, ou std::map avec la STL.


-------------------------------
Réponse au message :
-------------------------------


Il faut comparer chacun des nombres aux autres.

Le plus simple (et légèrement mieux que comparer chaque nombre à tous les autres) :
bool tous_differents = true;
static const unsigned int TAILLE = 8;
int tableau[TAILLE];
for(unsigned int i = 0; tous_differents && i != TAILLE-1; ++i)
{
for(unsigned int j = i+1; tous_differents && j != TAILLE; ++j)
{
tous_differents = (tableau[i] != tableau[j]);
}
}

(attention : je n'ai pas testé ce programme, c'est juste une idée qui me passe par la tête)

-------------------------------
Réponse au message :
-------------------------------

On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'il n'y a pas 2 nbrs identiques générés.

dimanche 4 novembre 2001 à 13:37:16 | Re : un ti pb sur les tableaux

Lu

Effectivement, mieux vaut utiliser la STL.
Cependant, je ne vois pas pourquoi tu proposes une map, puisque l'on gère des valeurs simples et non pas des paires clé/valeur. En plus, un std::map ne permet pas de multiples valeurs pour une même clé (il faudrait alors un std::multimap). Pour répondre spécifiquement au problème, sans doute vaudrait-il mieux un std::multiset.

Par ailleurs, le choix ne dépend pas de la recherche que l'on veut faire (qui n'est apparemment qu'une validation de données) mais de l'utilisation de ces données. En effet, si std::multiset semble adapté au problème de validation, il risque fort de ne pas l'être pour l'utilisation ultérieur du fait que l'on perd ici l'ordonnancement des données.

Voyons ainsi comment tranposer l'algorithme (avec une petite différence pour les pointilleux observateurs) en utilisant un std::vector. Cet exemple permet de voir l'utilisation d'une fonction d'<algorithm> plutôt que les méthodes spécifiques à std::multiset, comme std::multiset::equal_range qui semblerait assez adaptée si on avait choisit ce type collection. De plus, ce code a l'avantage d'être assez indépendant de la collection choisie (comptons donc le nombre de retouches à faire si on change le std::vector en une autre collection à éléments simples, comme std::list ou std::deque...)

#include <algorithm>
#include <vector>
typedef std::vector<int> notre_collection;
bool tous_differents(const notre_collection & donnees)
{
for(notre_collection::const_iterator i = donnees.begin(); i != donnees.end(); ++i)
{
notre_collection::const_iterator j = i;
++j;
if(std::find(j,donnees.end(),*i) != donnees.end()) return false;
}
return true;
}

(attention : une fois de plus je n'ai pas testé ce programme)

-------------------------------
Réponse au message :
-------------------------------


Pour moi la meilleure solution est d'utiliser une collection permettant la recherche d'éléments.

Tu peux par exemple utiliser l'objet MFC CMap, ou std::map avec la STL.


-------------------------------
Réponse au message :
-------------------------------


Il faut comparer chacun des nombres aux autres.

Le plus simple (et légèrement mieux que comparer chaque nombre à tous les autres) :
bool tous_differents = true;
static const unsigned int TAILLE = 8;
int tableau[TAILLE];
for(unsigned int i = 0; tous_differents && i != TAILLE-1; ++i)
{
for(unsigned int j = i+1; tous_differents && j != TAILLE; ++j)
{
tous_differents = (tableau[i] != tableau[j]);
}
}

(attention : je n'ai pas testé ce programme, c'est juste une idée qui me passe par la tête)

-------------------------------
Réponse au message :
-------------------------------

On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'il n'y a pas 2 nbrs identiques générés.


dimanche 4 novembre 2001 à 16:33:48 | Re : un ti pb sur les tableaux

Kaid


J'ai dit std::map pour le principe car j'utilise très
rarement la STL.


-------------------------------
Réponse au message :
-------------------------------

Effectivement, mieux vaut utiliser la STL.
Cependant, je ne vois pas pourquoi tu proposes une map, puisque l'on gère des valeurs simples et non pas des paires clé/valeur. En plus, un std::map ne permet pas de multiples valeurs pour une même clé (il faudrait alors un std::multimap). Pour répondre spécifiquement au problème, sans doute vaudrait-il mieux un std::multiset.

Par ailleurs, le choix ne dépend pas de la recherche que l'on veut faire (qui n'est apparemment qu'une validation de données) mais de l'utilisation de ces données. En effet, si std::multiset semble adapté au problème de validation, il risque fort de ne pas l'être pour l'utilisation ultérieur du fait que l'on perd ici l'ordonnancement des données.

Voyons ainsi comment tranposer l'algorithme (avec une petite différence pour les pointilleux observateurs) en utilisant un std::vector. Cet exemple permet de voir l'utilisation d'une fonction d'<algorithm> plutôt que les méthodes spécifiques à std::multiset, comme std::multiset::equal_range qui semblerait assez adaptée si on avait choisit ce type collection. De plus, ce code a l'avantage d'être assez indépendant de la collection choisie (comptons donc le nombre de retouches à faire si on change le std::vector en une autre collection à éléments simples, comme std::list ou std::deque...)

#include <algorithm>
#include <vector>
typedef std::vector<int> notre_collection;
bool tous_differents(const notre_collection & donnees)
{
for(notre_collection::const_iterator i = donnees.begin(); i != donnees.end(); ++i)
{
notre_collection::const_iterator j = i;
++j;
if(std::find(j,donnees.end(),*i) != donnees.end()) return false;
}
return true;
}

(attention : une fois de plus je n'ai pas testé ce programme)

-------------------------------
Réponse au message :
-------------------------------


Pour moi la meilleure solution est d'utiliser une collection permettant la recherche d'éléments.

Tu peux par exemple utiliser l'objet MFC CMap, ou std::map avec la STL.


-------------------------------
Réponse au message :
-------------------------------


Il faut comparer chacun des nombres aux autres.

Le plus simple (et légèrement mieux que comparer chaque nombre à tous les autres) :
bool tous_differents = true;
static const unsigned int TAILLE = 8;
int tableau[TAILLE];
for(unsigned int i = 0; tous_differents && i != TAILLE-1; ++i)
{
for(unsigned int j = i+1; tous_differents && j != TAILLE; ++j)
{
tous_differents = (tableau[i] != tableau[j]);
}
}

(attention : je n'ai pas testé ce programme, c'est juste une idée qui me passe par la tête)

-------------------------------
Réponse au message :
-------------------------------

On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'il n'y a pas 2 nbrs identiques générés.





Cette discussion est classée dans : pb, tableaux, ti, générés


Répondre à ce message

Sujets en rapport avec ce message

Pb Tableaux et initialisation. [ par AstraDeon ] Bonjour,Voila je tentais une simple initinitialisation d'un tableau bidimensionnel, mais j'ai pas le resultat escomptsS, voici le code :#include int m Pb tableaux langage C (Borland) [ par SniPi ] Comment on fait pr faire un tableau avec 10 valeurs, mais que les 10 valeurs ce soit l'utilisateur qui les rentre...??Amicalement...SniPi Pb de tri et taille de tableaux [ par daarkon666 ] Salut !!Je viens de terminer le tri/fusion itératif (et d'autres algos de tri, pr un projet info de fac) en C, et je suis soumis à un pb auss ibien so Pb de sécurité... [ par wanny ] Bonjour.Je travaille sur une nouvelle version d'un logiciel commercial.Actuellement, la licence de ce logiciel est généré en fonction du nom de la mac Pb Multilanguage [ par crocejf2000 ] J'ai appliqué la methode de mettre les ressources dans des dlls partagé, tout fonctionne bien sauf quand je veut faire un apercu avant impression ou u pb avec string-VC++ [ par didrocks ] Tout content d'essayer la class string, j'ai fait cela:#include string Chaine = "test";et là, le compilateur me donne ce message:C:\ff7tss\Filer.cpp(4 pb affichage de polygone [ par dbtm ] J'essaie d'afficher un polygone. Quand je fait tourner le polygone, il disparaît par moment.Si j'aligne le polygone sur les axes et que je le tourne, pb avec variable [ par jeffise57 ] Please aidez moiJe reçoit comme arugument du fonction des variables unsigned char* et je doit passer dans une deuxième fonction les même arguments mai Pb de passage de parametres en C++ [ par hergestridgefr ] Bonjour,J'ai un souci avec un appli que j'ai développée en C++, et qui recoit des arguments d'une autre appli (faite en Flash), avant de les traiter.S pb avec nMaxFile dans CFileDialog vc++ [ par pichu ] Dans une CFileDialog on est limité dans le nombre de selection si on en selectionne plusieursle pb est que je veux etre illimite dans le nombreComment


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,168 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales