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

C Discussion :

Eviter les doublons avec la fonction rand()


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Eviter les doublons avec la fonction rand()
    Bonjour,

    je voudrais éviter d'avoir des doublons avec ma fonction rand(), en effet dans mon jeu de poker je génère 5 cartes, mais parfois l'obtient la même carte...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void tirage1(card *main)
    {
    	int i=0;
    	for(i=0; i<5; i++)
    	{
    		main[i].color= (rand()%4) + 1;
    		main[i].value= (rand()%13)+ 1;
    	}
    }
    Merci pour votre aide

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    tu as un tableau de 52 cartes rangées au hazard
    tu as un compteur de nombre de cartes (initialisé à 52)
    tu fais un tirage entre 1 et "compteur nombre cartes" (52 la 1ere fois)
    la carte tirée, tu la retires (ou la met à la fin du tas) et tu décrémentes le compteur de nombre de cartes
    tu fais un tirage entre 1 à "compteur nombre cartes" (51 maintenant)
    la carte tirée, tu la retires (ou la met à la fin du tas) et tu décrémentes le compteur de nombre de cartes
    ...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    Tu utilises mal rand(), le seed que la fonction utilise au runtime est toujours le meme. Va voir du cote des tutos pour que rand() renvoie un chiffre random (ca utilise time et le pid du process).

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par ironzorg Voir le message
    Tu utilises mal rand(), le seed que la fonction utilise au runtime est toujours le meme. Va voir du cote des tutos pour que rand() renvoie un chiffre random (ca utilise time et le pid du process).
    Je fais un dans mon Main.c

    Sinon j'ai réussi a éviter les doublons grâce a cette méthode :

    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
    21
    22
    23
    24
    void  tirage1(card *main)
    {
    	int i=0;
    	int j=0;
    	int compteur = 0;
     
    	for(i=0, j = 1; i < 5; )
    	{
    		main[i].color= (rand()%4) + 1;
    		main[i].value= (rand()%13)+ 2;
     
    		if (i > 0)
    			for (j = 0; j < i ; j++)
    				if (main[i].color == main[j].color && main[i].value == main[j].value) // contre mesure pour eviter les doublons
    					{
    						j = -1;
    						break;
    					}
    		if (j > 0)
    			i++;
     
    	}
     
    }
    Malheureusement je n'arrive pas a appliquer cette méthode dans mon deuxième tirage, ça bug complètement

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    void tirage2(card *main)
    {
    	int p=0;
    	int j=1;
    	int i=0;
    	char choix[6];
    	printf("Appuyez sur o pour garder ou n pour retirer\n\n");
    	for (p=1; p<6; p++)
    	{
    		printf("Voulez vous garder votre %de carte?\n", p);
    		scanf("%s", &choix[p-1]);
    		if (choix[p-1] == 'o' )
    		{
    		}
    		else
    		{
    		for(i=0, j = 1; i < 5; )
    	{
    		main[i].color= (rand()%4) + 1;
    		main[i].value= (rand()%13)+ 2;
     
    		if (i > 0)
    			for (j = 0; j < i ; j++)
    				if (main[i].color == main[j].color && main[i].value == main[j].value) 
    					{
    						j = -1;
    						break;
    					}
    		if (j > 0)
    			i++;
    	}
     
     
    		}
    	}
    	choix[5] = '\0';
    }
    Merci pour votre aide

Discussions similaires

  1. Eviter les doublons dans JCombobox avec hibernate
    Par dh3h1b1 dans le forum Composants
    Réponses: 3
    Dernier message: 16/02/2011, 18h45
  2. [Débutant][XSLT]Eviter les doublons
    Par leminipouce dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/10/2005, 11h34
  3. hash et Tie , eviter les doublons
    Par bluecurve dans le forum Langage
    Réponses: 5
    Dernier message: 12/10/2005, 16h39
  4. Eviter les doublons
    Par cyrill.gremaud dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2005, 12h37
  5. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05

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