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 :

Création d'une carte de Loto / avec base de donnée


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Création d'une carte de Loto / avec base de donnée
    Bonjour/Bonsoir ! Voilà j'ai des soucis avec mon code c++ qui me crée parfaitement mes 27 chiffres sans aucun soucis. Le but de ce projet est de créer une nombre de cartes de loto(Suisse) et de les mettre dans ma base de donnée (mysql) puis de récupérer un certain nombres de cartes et de les afficher pour pouvoir jouer.

    Voilà mon code de génération de carte :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    void TMain::generateCarte()
    {
    	//Déclaration de variables
    	int i = 0;
    	int j = 0;
    	bool Existence;
    	bool Existencerand ;
    	int ValTempTableau = 0;
     
     
     
    	  // Cette partie de code me permet de créer 27 chiffres qui ne sont pas
    	  // semblables et qui seront par la suite trié.
     
    		for (i = 0; i <= 26; i++)
    		{
    			TabCarte[i].Value = 0;
    		}
     
    		for (i = 0; i <= 8; i++)
    		{
    			for (j = 0; j <= 2; j++)
    			{
    				do
    				{
    				int ValTempTableau = Random(9) + (i * 10);
    				Existence = NbreExistant(ValTempTableau);
     
    				if (Existence == false)
    				{
    					TabCarte[j*9 + i].Value = ValTempTableau;
    				}
     
    				}while(Existence == true);
     
    			}
    		}
     
    	  // J'appelle ma fonction de triage bubblesort
     
    	 TriageBubbleSort();
     
     
    	  // Cette partie de code me permet de supprimer 12 de mes 27 chiffres pour avoir mes
    	  //15 chiffres nécessaire à une carte de loto
     
    		for (i = 0; i <= 11; i++)
    		{
    			int ValTempTableau = Random(26)+1;
     
    			do
    				{
    					ValTempTableau = Random(26)+1;
    					Existencerand = NbreRetiré(ValTempTableau);
     
    					if (Existencerand == false )
    				{
    					TabRand[i].Value = ValTempTableau;
    					TabCarte[ValTempTableau].Value = 0;
    				}
     
    				}while(Existencerand == true);
     
     
    		}
     
    }
    J'ai remarqué que c'est au moment ou je veux enlever mes 12 chiffres et mettre 12 zéros à la place qu'il me plante et qu'il me fait une ligne comme ceci dans ma base de donnée :

    2,0,0,6,0,12,0,20,0,24,32,0,36,42,47,0,54,0,0,61,0,0,74,0,78,80,83,

    pourquoi le 6 est à la quatrième place ?

    voilà ce que font mes autres fonctions :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    //===========================================================================
    UnicodeString TMain::InsertionMultiples()
    {
       //Déclaration de variables
       int i;
       int j;
       UnicodeString ChaineString = "";
     
    	for (i = 0; i <= 26; i++)
    		{
    				ChaineString += UnicodeString(TabCarte[i].Value)+"," ;
    		}
     
    		return ChaineString;
    }
    //===========================================================================
     
    //===========================================================================
    void TMain::TriageBubbleSort()
    {
    	//Déclaration de variables
    	int idx ;
    	bool permute ;
    	int tmp ;
     
    	do
    	{	permute = false ;
    		for (idx = 0; idx < 27; idx++)
    		{	if (TabCarte[idx+1].Value < TabCarte[idx].Value )
    			{
    				tmp = TabCarte[idx].Value ;
    				TabCarte[idx].Value = TabCarte[idx+1].Value ;
    				TabCarte[idx+1].Value = tmp ;
    				permute = true ;
    			}
    		}
    	}
    	while(permute == true );
    }
    //===========================================================================
     
    //===========================================================================
    bool TMain::NbreRetiré(int RandSorti)
    {
    	//Déclaration de variables
    	int i;
    	int j;
    	AnsiString Active;
      /*
    	for (i = 0; i <= 8; i++)
    		{
    			for (j = 0; j <= 2; j++)
    			{
     
    				if (RandSorti == TabRand[j*9 + i].Value || RandSorti == 0 || RandSorti == 3 || RandSorti == 7 || RandSorti == 10 || RandSorti == 13 || RandSorti == 16 || RandSorti == 19 || RandSorti == 22 || RandSorti == 25 )
    				{
    					return true;
    				}
    		   }
    		}   return false;
    	*/
     
    		for (i = 0; i <= 26; i++)
    		{
    				if (RandSorti == TabRand[i].Value || RandSorti == 0 || RandSorti == 3 || RandSorti == 7 || RandSorti == 10 || RandSorti == 13 || RandSorti == 16 || RandSorti == 19 || RandSorti == 22 || RandSorti == 25 )
    				{
    					return true;
    				}
     
    		}   return false;
    }
    //===========================================================================
     
    //===========================================================================
    bool TMain::NbreExistant(int NoSorti)
    {
       //Déclaration de variables
    	int i;
    	int j;
     
    	for (i = 0; i <= 8; i++)
    		{
    			for (j = 0; j <= 2; j++)
    			{
     
    				if (NoSorti == TabCarte[j*9 + i].Value)
    				{
    					return true;
    				}
    		   }
    		}   return false;
     
     
     
    }
    //===========================================================================
     
    void __fastcall TMain::btngenererClick(TObject *Sender)
    {
       int i ;
       int NbreCarte = 0;
     
       switch (rgNbre->ItemIndex)
       {
     
       default:
       NbreCarte = 1;
    	   break;
       case 0 :
       NbreCarte = 15;
       break;
     
       case 1 :
       NbreCarte = 20;
       break;
     
       case 2 :
       NbreCarte = 30;
       break;
     
       case 3 :
       NbreCarte = 100;
       break;
     
       case 4 :
       NbreCarte = 200;
       break;
     
       case 5 :
       NbreCarte = 400;
       break;
     
       case 6 :
       NbreCarte = 800;
       break;
     
       case 7 :
       NbreCarte = 1000;
       break;
     
       break;
       }
     
    	for (i = 0; i <= NbreCarte; i++)
    	{
    		generateCarte();
    		AnsiString requete = "Insert into tblCarte (carteString) VALUES ('"+ InsertionMultiples() + "');";
     
    		Main2->adocommand->CommandText = requete;
    		Main2->adocommand->Execute();
     
     
    	}
    }
    Je me doute bien qu'il y a pleins d'autres méthodes et n'hésitez pas à me dire ce qu'il faudrait que je change... en tout cas merci d'avoir lu ce message et si vous pouviez m'apporter de l'aide j'en serai très reconnaissant. Je vais continuer de chercher de mon côté aussi .

    Si besoin je peux fournir tout le code avec la base de donnée complète au pire des cas ...

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    //---------------------------------------------------------------------------
     
    #ifndef SelectiondumodedejeuH
    #define SelectiondumodedejeuH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Grids.hpp>
    #include <DB.hpp>
    #include <DBTables.hpp>
    #include <Buttons.hpp>
     
    // Définition d'un type structure pour contenir des resultats d'examen
    // avec trois membres: eleve, note et remarque
    struct LotoTirage
    {
    	int Value ;
    	bool Active;
    	int NoSorti;
     
     
    };
    //---------------------------------------------------------------------------
    class TMain : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TCheckBox *CheckBox1;
    	TCheckBox *CheckBox2;
    	TCheckBox *CheckBox3;
    	TLabel *Label1;
    	TRadioGroup *rgNbre;
    	TStaticText *StaticText1;
    	TBitBtn *btngenerer;
    	TBitBtn *btnlancerpartie;
    	TStaticText *StaticText2;
    	TStaticText *StaticText3;
    	TStaticText *StaticText4;
    	TStaticText *StaticText5;
    	void __fastcall btnlancerpartieClick(TObject *Sender);
    	void __fastcall btngenererClick(TObject *Sender);
    private:	// Déclarations utilisateur
    public:		// Déclarations utilisateur
    	__fastcall TMain(TComponent* Owner);
     
    	bool NbreExistant(int NoSorti);
    	bool NbreRetiré(int RandSorti);
    	void TriageBubbleSort();
    	UnicodeString InsertionMultiples();
    	void generateCarte();
     
    	struct LotoTirage TabCarte[27];
    	struct LotoTirage TabRand[27];
       //	struct LotoTirage TabCarte[9][3];
    	struct LotoTirage Tabtemp[9][3];
    	TButton *MonBtn[27];
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TMain *Main;
    //---------------------------------------------------------------------------
    #endif
    Voilà mon point h en plus

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Utilise les balises CODE et supprime les accolades inutiles pour plus de lisibilité.

    i++ sauvegarde la valeur de i, incrémente i puis retourne la valeur enregistrée. Pour les compteur il faut utiliser ++i, c'est plus rapide.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    D'accord je vais faire ça merci de ta réponse !

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i;
    int j;
    for (i = 0; i <= 8; i++)
          for (j = 0; j <= 2; j++)
                if (NoSorti == TabCarte[j*9 + i].Value)
                       return true;
    return false;
    J'ai dû mal à saisir l'intérêt.
    Pourquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int taille(9*3);
    for(int i = 0; i < taille; ++i)
            if(NoSorti == TabCarte[i].Value)
                    return ....
    return ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    				do
    				{
    				int ValTempTableau = Random(9) + (i * 10);
    				Existence = NbreExistant(ValTempTableau);
     
    				if (Existence == false)
    				{
    					TabCarte[j*9 + i].Value = ValTempTableau;
    				}
     
    				}while(Existence == true);
    Autant initialiser Existance à true lors de sa déclaration et utiliser un bête while non?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci de votre aide, mais il me reste un problème maintenant j'ai 4 chiffres au début exemple : 2,3,3,5 au lieu d'en avoir 3 donc j'ai des doublons , comment cela se fait-il ? De plus il manque un chiffre pour les 80.

    exemple : 3,3,6,7,14,17,18,23,24,28,31,33,37,42,42,45,56,56,58,61,66,68,74,77,78,80,85,

    alors qu'avec le code d'avant j'ai ceci :

    2,0,5,7,0,14,16,20,0,0,31,0,35,42,0,45,56,0,58,63,0,0,70,0,0,82,0,

    pas de doublon mais un décalage de 1 0 donc il me manque tout de même le 3 ème 80

    3,0,6,12,0,0,0,22,0,27,31,0,0,43,0,46,52,0,58,61,0,66,74,77,0,83,0,

    sur cette ligne il y a un 0 qui s'est immiscé dans la ligne en plus ! et il manque toujours le 3ème 80 ...

    Avez-vous une idée de pourquoi cela s'est-il passé ?

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Il faudrait que vous regardiez régulièrement la valeur de vos variables grâce à un débogueur ou avec cout.

    Ainsi vous pourrez voir la ligne ou le bloc qui est faux. A partir de là trouver l'erreur sera plus facile.

    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		for (i = 0; i <= 26; i++)
    		{
    				if (RandSorti == TabRand[i].Value || RandSorti == 0 || RandSorti == 3 || RandSorti == 7 || RandSorti == 10 || RandSorti == 13 || RandSorti == 16 || RandSorti == 19 || RandSorti == 22 || RandSorti == 25 )
    				{
    					return true;
    				}
     
    		}   return false;
    Ce n'est pas top niveau lisibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(RandSorti == 0 || RandSorti == ...)
              return true;
    for(int i = 0; i < taille ; ++i)
    {
              if(RandSorti == TabRand[i].Value)
                       return true;
    }
    return false;

    Vous devriez aussi supprimer toutes vos variables globales.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Très bien je vais tenter comme cela et merci encore ... Pour le débogueur je l'utilise, mais avec la ligne c'est dur de voir si c'est bien ce que l'on veut que ça fasse !

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pour savoir ce qu'il faudrait qu'il fasse, le moyen le plus simple reste la feuille de papier et le crayon^^

    Vous pouvez aussi essayer d'établir un jeux d'essais et tester chaque fonction séparément pour voir lesquelles sont correctes et lesquelles sont fausses. Cela réduira votre champ de recherche.


    Pensez aussi à nous donner votre .h qu'on voie comment vous avez tout défini.

    Plus haut j'ai parlé à tort de variable globale, je suppose que c'était un attribut de votre classe, mais sans le .h c'est difficile de voir exactement ce que fait votre classe.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Voilà j'ai rajouter mon .h en espérant que cela peut aider .

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Définition d'un type structure pour contenir des resultats d'examen
    // avec trois membres: eleve, note et remarque
    struct LotoTirage
    {
    	int Value ;
    	bool Active;
    	int NoSorti; 
    };


    Essayer de corriger vos commentaires, d'essayer de rendre votre code plus lisible pour nous encourager à le lire.

    Sinon, pourriez-vous nous donner vite fait l'algorithme que vous voulez mettre en place?
    J'essayerais de me pencher dessus ce soir.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Ah pardon je n'avais pas vu ce commentaire de mon ancien type structuré j'en suis navré.

    Pour ce qui est de l’algorithme j'ai pensé comme ceci :

    Je crée avec une boucle for mes 27 chiffres qui sont chacun vérifié par ma fonction NbreExistant qui me retourne true si le chiffre est déjà sorti et false si le chiffre ne l'est pas encore et avec ma boucle do(while) qui me permet d'atteindre 27 chiffres sans doublons entre 1-90.

    Puis ces 27 chiffres sont triés avec ma fonction BubbleSort() (Jusqu'ici aucun problème n'est détecté).

    Enfin de ces 27 chiffres triés je veux à l'aide d'une fonction Nbreretiré retirer 12 chiffres et les mettres à 0 (Les mettres à 0 me servira plus tard pour mettre mon tableau de button ou il y a les 0 en not enabled avec un if)

    je m'arrange pour avoir minimum un chiffre dans chaque colonne avec justement ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(RandSorti == 0 || RandSorti == 3 || RandSorti == 7 || RandSorti == 10 || RandSorti == 13 || RandSorti == 16 || RandSorti == 19 || RandSorti == 22 || RandSorti == 25)
    		  {
    		  return true;
    		  }
    		for(int i = 0; i < taille ; ++i)
    		{
    		  if(RandSorti == TabRand[i].Value)
    				   {
    				   return true;
    				   }
    		}
    return false;
    c'est justement ici ce que cela coince ... dans ma base données ce qui ressort c'est ça pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    0,0,0,6,0,13,0,21,0,0,34,35,0,42,0,47,51,55,56,66,67,0,74,0,0,80,0,
    1,0,0,7,0,0,0,25,0,28,31,37,0,43,47,0,55,0,0,62,0,66,70,0,76,80,81,
    5,5,6,8,0,0,0,22,25,0,32,34,36,42,0,0,50,0,0,62,0,64,70,0,0,82,0,
    2,0,8,9,0,0,17,20,25,0,31,0,0,40,0,46,50,0,0,60,61,0,70,76,0,82,0,
    4,7,0,10,11,0,0,21,0,0,30,34,0,40,41,0,52,57,0,60,0,0,70,0,75,81,0,
    1,2,0,8,0,12,15,21,25,0,31,0,0,42,0,0,51,0,57,61,0,0,72,0,0,80,81,
    2,0,0,11,0,0,0,22,0,0,32,36,0,42,43,48,50,0,0,62,66,67,70,75,0,80,0,
    2,6,0,13,0,0,18,23,24,0,33,35,0,40,0,0,54,55,0,65,0,68,70,0,0,80,0,
    2,0,0,10,11,15,0,22,24,0,36,0,0,41,0,48,50,54,0,61,62,0,71,0,0,82,0,
    1,2,6,8,0,0,0,20,0,27,30,0,38,40,0,0,54,0,58,62,0,0,71,74,0,80,0,
    2,0,0,13,15,15,0,22,0,0,34,35,0,41,0,0,50,0,0,61,0,66,70,0,72,83,86,
    1,5,0,11,0,0,17,23,0,28,30,0,37,41,47,0,52,0,0,60,66,0,71,0,0,81,0,
    On remarque que la première est toujours buggé dû au faite que c'est la première fois qu'un enregistrement est lancé (je n'ai pas encore trouvé le moyen d'arranger ce bug de ma part).

    Il manque à chaque fois le 3ème 80 et il y a un 0 qui ne devrait pas être à ces endroits là normalement ! (en trop) qui prends la place de ce dit 3ème 80 ...

    Sur certaines lignes il y a chiffres entre 1-9 alors qu'il ne doit y en avoir que 3 !

    Voilà en espérant avoir été plus clair .

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Je crée avec une boucle for mes 27 chiffres qui sont chacun vérifié par ma fonction NbreExistant qui me retourne true si le chiffre est déjà sorti et false si le chiffre ne l'est pas encore et avec ma boucle do(while) qui me permet d'atteindre 27 chiffres sans doublons entre 1-90.
    Le mieux est d'utiliser un vector de chiffre sortie et de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    vector<int> monVector;
    //...
    int newVal;
     
    while(monVector.find(newVal) != monVector.end())
    {
            //on essaye de trouver une nouvelle valeur
    }
    monVector.push_back(newVal);
    Puis ces 27 chiffres sont triés avec ma fonction BubbleSort() (Jusqu'ici aucun problème n'est détecté).
    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sort(monVector.begin(), monVector.end());
    Enfin de ces 27 chiffres triés je veux à l'aide d'une fonction Nbreretiré retirer 12 chiffres et les mettres à 0 (Les mettres à 0 me servira plus tard pour mettre mon tableau de button ou il y a les 0 en not enabled avec un if)
    Nbreretiré devrait faire plus de chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    retirerUnNombre(vector & monVector)
    {
             int alea = ...//choix nombre aléatoire
             while(monVector[alea] != 0)
                          //choix nombre aléatoire
             monVector[alea] = 0;
    }
    Tout ceci simplifiera ton code et le rendra plus lisible.

    Pourrais-tu détailler ce que tu souhaites faire ici? Ce n'est pas très clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    			do
    				{
    					ValTempTableau = Random(26)+1;
    					Existencerand = NbreRetiré(ValTempTableau);
     
    					if (Existencerand == false )
    				{
    					TabRand[i].Value = ValTempTableau;
    					TabCarte[ValTempTableau].Value = 0;
    				}
     
    				}while(Existencerand == true);

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    J'avais pensé pour enlever mes 12 chiffres et mettre les 0 à la place de faire des randoms et de stocker les chiffres déjà sorti et lorsque le chiffre n'est pas encore sorti enlever justement le nombre qui est au random.

    exemple : mon random fait 4 ... il n'est pas encore sortie ... il n'est pas un des nombres que je peux supprimer ... donc je peux mettre 0 et il me fait ça jusqu'à avoir 12 0 dans ma lignes de 27 chiffres donc en gros j aurai.

    15 chiffres qui constituerons ma carte et 12 0 qui seront mes vides dans la carte .

    C'est justement cette partie de code qui me gène le plus à faire, j'ai beaucoup de mal à m'imaginer une autre solution que celle-ci même si je sais qu'il y en a d'autres !

  14. #14
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Ma fonction retirerUnNombre me parait bien appropriée dans ce cas là :

    - on choisit un nombre i entre 0 et 26
    - on regarde l'élément d'indice i.
    -> s'il est différent de 0, on le met à 0.
    -> s'il vaut déjà 0, on recommence.

    Tu n'a donc plus qu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(int i=0; i < 12; ++i)
            retirerUnNombre(monVector);

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci encore une fois pour ce conseil, mais j'ai un erreur avec monVector.find ... On me dit que : "find n'est pas un membre de 'vector<int,allocator<int> >"?

    J'ai bien mis dans mon entête : #include <vector> ainsi que using namespace std;

    Qu'ai-je donc bien pu oublier ?

    De plus je n'ai jamais utilisé de vecteur on n'a pas encore appris à les utiliser ... En regardant un peu les tutoriels sur internet cela parait très compliqué . Et je me demandais si vous pourriez m'en expliquer davantage sur ce sujet ...

    Avec un exemple, car je peine à en comprendre l'utilité.

  16. #16
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Les vecteurs font parties des conteneurs de la STL, ils simplifient énormément la vie du programmeur.

    Les vecteurs ont tout un panel de méthodes (et de redéfinition d'opérateur)pour les gérer ce qui permet de manipuler des vectors comme un tableau classique sans à avoir à réécrire toutes les méthodes nécessaires.

    De plus la STL fournit un grand nombre d'algorithmes comme le trie.

    Et le plus fort, c'est qu'on peut très facilement remplacer un vecteur par un autre conteneur sans à avoir à modifier nos algorithmes.

    Sinon pour le find, j'ai pris celui de la map et non du vector, en fait c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find(monVecteur.begin(), monVecteur.end(), maValeur);
    Sinon dans la FAQ C++ tu as quelques informations sur la STL et les vecteurs. Après si tu as quelques doutes sur une fonction, tu peux soit la rechercher dans la fonction de recherche du forum soit regarder sur le site de C++ Référence.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/03/2014, 12h48
  2. Réponses: 2
    Dernier message: 24/09/2012, 11h56
  3. Réponses: 5
    Dernier message: 17/01/2010, 00h32
  4. Réponses: 3
    Dernier message: 22/05/2007, 11h05
  5. création d'une carte avec navigation du type mappy
    Par BernardT dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 30/10/2005, 01h24

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