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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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.

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