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++Builder Discussion :

Souci sur un Random


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Souci sur un Random
    Bonjour,

    Je vous présente mon souci. C'est pour faire un loto. Dans cette fonction je "tire" au sort des nombres de 1 à 90 compris. Je l'ai mets dans un tableau. A chaque nouveau tirage, je parcours mon tableau pour voir si le nombre tiré existe déjà. Si il est déjà sorti, je relance la fonction. Si il est pas sorti, je l'ajoute au tableau. A la fin j'affiche tout mon tableau dans un memo pour vérifier les chiffre. Mais le souci c'est que ca ne marche pas totalement. j'ai plusieurs fois les mêmes chiffres à la fin. Voici le code de la fonction :

    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
    void __fastcall TForm1::ChiffreChapeau()
    {
    	if (PositionSorti != 90)
    	{
    		int nombre = rand() % 90;
    		 PositionSorti++;
    		for (j=0 ; j<=90; j++ )
    		{
    			 if (NombreSorti[j] == nombre)
    			 {
    				 ChiffreChapeau();
    			 }
    			 else
    			 {
    				j++;
    			 }
    		}
    		NombreSorti[PositionSorti] = nombre;
     
    		Memo1->Lines->Add(IntToStr(NombreSorti[PositionSorti]));
     
    	}
    }
    Si quelqu'un a une idée d'où pourrait venir l'erreur car moi je vois pas

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Je ne suis pas certain de ce que tu veux faire, mais se ne serais pas ceci:

    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 __fastcall TForm1::ChiffreChapeau()
    {
    	if (PositionSorti != 90)
    	{
    		int nombre = rand() % 90;
    		 PositionSorti++;
    		for (j=0 ; j<=90; j++ )
    		{
    			 if (NombreSorti[j] == nombre)
    			 {
    				 ChiffreChapeau();
                                     return;
    			 }
    			 else
    			 {
    				j++;
    			 }
    		}
    		NombreSorti[PositionSorti] = nombre;
     
    		Memo1->Lines->Add(IntToStr(NombreSorti[PositionSorti]));
     
    	}
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je viens de tester en ajoutant le return mais sans succès. Alors j'explique d'une manière différente :

    -- Je veux générer avec, un random, 90 chiffre de 1 a 90.
    -- Chaque chiffre sorti, je le place dans le tableau.
    -- A chaque nouveau chiffre, je regarde dans mon tableau si il existe deja
    -- Si il existe, j'en tire un autre
    -- Si non, on continue avec un nouveau chiffre
    On recommence
    -- Nouveau chiffre
    -- Existe dans le tableau ? -> Oui on fait un nouveau chiffre
    -> Non on continue

  4. #4
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Encore une fois je tente de voir si je comprend bien

    Si tu veux mettre dans un ordre aléatoire un tableau de chiffre entier, j'utiliserais plutôt la librairie STL (qui est intégré à C++Builder).

    Regarde la fonction: random_shuffle:
    http://www.sgi.com/tech/stl/random_shuffle.html

  5. #5
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int Nombre[90];
    for(int i = 0; i < 90; i++)
    {      // Rempli le tableau de nombre de 1 à 90
    	Nombre[i] = i + 1;
    }
    std::srand(std::time(0)); // À faire une fois à l'initialisation
    std::random_shuffle(Nombre, Nombre + 90);
    Il ne faut pas oublier de mettre l'entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <algorithm>  // For std::random_shuffle()
    Pour plus d'information tu peux aller voir un exemple sur le site Web suivant: http://gethelp.devx.com/techtips/cpp.../10min1299.asp

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    a) remplir un tableau
    b) permuter aléatoirement les valeurs dans le tableau

    Le tableau peut donc ensuite être lu du début à la fin (le tirage à proprement parlé), il ne pourra jamais y avoir de doublons !

    A plus !

Discussions similaires

  1. souci sur une relation
    Par Eh_manu dans le forum Access
    Réponses: 22
    Dernier message: 05/06/2006, 10h06
  2. soucis sur les USER DEFINED DATA TYPE
    Par f_bobo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 15h53
  3. [C#] Petit soucis sur un TreeView ...
    Par hobotalker dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/11/2005, 15h33
  4. Petit souci sur la libération d'une connexion tcp
    Par alexandre75 dans le forum Développement
    Réponses: 1
    Dernier message: 08/11/2005, 19h43
  5. souci sur ajout de données de zone de liste
    Par Tierisa dans le forum IHM
    Réponses: 6
    Dernier message: 27/09/2005, 08h30

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