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 :

petit probleme de programmation de memory


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    504
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 504
    Par d�faut petit probleme de programmation de memory
    salut,

    j'essaie de faire un petit jeu de memory
    j'ai juste quelques problemes: parfois il m'indique des touches qui ne sont pas memoris� dans mon tableau chiffre . et lors de l'affichage lorsque j'ai trouve une paire de mots il m'indique toujours les tous indices du tableau cacher ex:

    au debut du programme j'ai 1234
    5678

    apres lorsque je trouve une paire de mots ex kiwi j'ai: 1Kkiwi23kiwi4
    5678

    et je voudrais bien voir le resultat 1kiwi3kiwi
    5678

    voici mon programme :
    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
    #include <iostream.h>
    #include <string.h>
    #include <time.h>
    #include <stdio.h>
     
     
     
    int main(int argc,char** argv)
    {
     
    	srand((unsigned)time(NULL));
    	char mots[8][10];
    	strcpy(mots[0],"fraise");
    	strcpy(mots[1],"fraise");
    	strcpy(mots[2],"pomme");
    	strcpy(mots[3],"pomme");
    	strcpy(mots[4],"kiwi");
    	strcpy(mots[5],"kiwi");
    	strcpy(mots[6],"orange");
    	strcpy(mots[7],"orange");
     
    	char mots_melange[8][10];
    	int i,aleatoire;
    	int tableau_aleatoire[8];
    	int cacher[8];
    	int nombre1,nombre2;
    	bool game=true;
    	bool jeu=true;
    	int tour=0;
    	int chiffre[8];
     
     
    	while(game==true&&tour!=4)
    		{
     
    		if(jeu==true)
    		{
    			for (i=0;i<8;i++)
    				{    
    					 cacher[i]=i+1;
    					 cout<<cacher[i];
     
    					if (i==3)
    					{
    						cout<<"\n";
    					}
    					jeu=false;
    				}
     
    	for (i=0;i<8;i++)
    	{
    		tableau_aleatoire[i]=0;
    		chiffre[i]=0;
    	}
     
    	for (i=0;i<8;i++)
    	{
    	do
    	   {
    		aleatoire=rand()%8;
    		strcpy(mots_melange[i],mots[aleatoire]);
     
    	   }while(tableau_aleatoire[aleatoire]==1);
    		 tableau_aleatoire[aleatoire]=1;
       }
     
    }	
    	do{	
    	cout<<"tapez un nombre : ";
    	cin>>nombre1;
    	cout<<"\n"<<mots_melange[nombre1];
    	cout<<"\n"<<"tapez un deuxieme nombre : ";
    	cin>>nombre2;
    	cout<<"\n"<<mots_melange[nombre2];
    	if (chiffre[nombre1]==1||chiffre[nombre2]==2)
    	{
    		cout<<"vous avez deja tapez ses nombre recommencez :\n";
    	}
    	}while(chiffre[nombre1]==1||chiffre[nombre2]==2);
    	cout<<mots_melange[nombre2];cout<<"\n";
    	if (strcmp(mots_melange[nombre1],mots_melange[nombre2])==0)
    	{
     
    		chiffre[nombre1]=1;
    		chiffre[nombre2]=2;
    		tour++;
    		for(i=0;i<8;i++)
    		{
     
    			if (chiffre[i]==1)
    			{
    				cout<<mots_melange[i];
     
    			}
     
     
     
    			if (chiffre[i]==2)
    			{
    				cout<<mots_melange[i];
     
    			}
     
     
    			if(chiffre[i]!=1!=chiffre[i]!=2)
    			{
    				cout<<cacher[i];
     
    			}
     
     
     
    			if (i==3)
    			{
    				cout<<"\n";
    			}
    		}
    		cout<<"\n";
    	}
     
     
    	}
     
     
    	return 0;
    }
    merci !

  2. #2
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Je n'ai pas le courage de lire en d�tail ton code � cette heure ci, mais juste de faire quelques remarques apr�s un bref survol.

    Tu utilises des char* et char[], ce qui est source d'erreur. Je te conseille de d�finir ton tableau plus simplement : std::string mots_melange[8]; (apr�s un #include <string>), ou pour plus de flexibilit� sur le nombre d'�l�ments :
    std::vector<std::string> mots_melange;

    Ta fonction est trop grosse. D�coupe l� en fonctions plus �l�mentaires. Par exemple une fonction qui affiche l'�tat courant du jeu me semble int�ressante.

    J'ai l'impression que pour g�rer les diff�rentes choses li�es � l'�tat du jeu, tu utilises diff�rents tableaux, l'un pour les noms, l'un pour l'�tat cach�/visible... J'aurais pour ma part d�fini une structure carte, et j'aurais fait un tableau de cette structure. :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    struct Carte
    {
      bool visible;
      string nom;
    };
     
    vector<Carte> jeu;
    L'id�e est d'avoir un truc packag� et coh�rent.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  3. #3
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    La premi�re r�action, � froid, qui me vient � l'esprit serait de t'inciter � utiliser la classe string, accessible via un #include <string> et disponible dans l'espace de nommage std, pour tout ce qui concerne la gestion de cha�nes de caract�res...

    Son utilisatio de base est bien plus facile, intuitive et s�curis�e que celle d'un tableau de caract�res "C style" identique:

    Ainsi, rien ne t'emp�che de cr�er un tableau de cha�nes sous la forme de
    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
    #include <string>
    using namespace std;
    int main()
    {
        string mots[8];
        mots[0]="fraise";
        mots[1]="fraise";
        mots[2]="pomme";
        mots[3]="pomme";
        mots[4]="kiwi";
        mots[5]="kiwi";
        mots[6]="orange";
        mots[7]="orange";
        for(size_t i=0;i<7;i++)
            cout<<mots[i]<<endl;
        return 0;
    }
    (code minimum compilable pour montrer l'utilisation d'un tableau de cha�nes )

    La deuxi�me remarque que me sugg�re ton code serait de veiller � utiliser des r�gles d'indentation strictes, pour permettre une relecture facile (un code est bien plus souvent lu qu'�crit )

    Ton code serait bien plus facile � lire (sans l'avoir modifi�) s'il prenait la forme de
    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
    #include <iostream.h>
    #include <string.h>
    #include <time.h>
    #include <stdio.h>
     
     
     
    int main(int argc,char** argv)
    {
        srand((unsigned)time(NULL));
        char mots[8][10];
        strcpy(mots[0],"fraise");
        strcpy(mots[1],"fraise");
        strcpy(mots[2],"pomme");
        strcpy(mots[3],"pomme");
        strcpy(mots[4],"kiwi");
        strcpy(mots[5],"kiwi");
        strcpy(mots[6],"orange");
        strcpy(mots[7],"orange");
        char mots_melange[8][10];
        int i,aleatoire;
        int tableau_aleatoire[8];
        int cacher[8];
        int nombre1,nombre2;
        bool game=true;
        bool jeu=true;
        int tour=0;
        int chiffre[8];
        while(game==true&&tour!=4)
        {
            if(jeu==true)
            {
                for (i=0;i<8;i++)
                {    
                    cacher[i]=i+1;
                    cout<<cacher[i];
                    if (i==3)
                    {
                        cout<<"\n";
                    }
                    jeu=false;
                }
                for (i=0;i<8;i++)
                {
                    tableau_aleatoire[i]=0;
                    chiffre[i]=0;
                }
                for (i=0;i<8;i++)
                {
                    do
                    {
                        aleatoire=rand()%8;
                        strcpy(mots_melange[i],mots[aleatoire]);
                    }while(tableau_aleatoire[aleatoire]==1);
                    tableau_aleatoire[aleatoire]=1;
                }
            }	
    	do
            {	
                cout<<"tapez un nombre : ";
                cin>>nombre1;
                cout<<"\n"<<mots_melange[nombre1];
                cout<<"\n"<<"tapez un deuxieme nombre : ";
                cin>>nombre2;
                cout<<"\n"<<mots_melange[nombre2];
                if (chiffre[nombre1]==1||chiffre[nombre2]==2)
                {
                    cout<<"vous avez deja tapez ses nombre recommencez :\n";
                }
            }while(chiffre[nombre1]==1||chiffre[nombre2]==2);
            cout<<mots_melange[nombre2];cout<<"\n";
            if (strcmp(mots_melange[nombre1],mots_melange[nombre2])==0)
            {
                chiffre[nombre1]=1;
                chiffre[nombre2]=2;
                tour++;
                for(i=0;i<8;i++)
                {
                    if (chiffre[i]==1)
                    {
                        cout<<mots_melange[i];
                    }
                    if (chiffre[i]==2)
                    {
                        cout<<mots_melange[i];
                    }
                    if(chiffre[i]!=1!=chiffre[i]!=2)
                    {
                        cout<<cacher[i];
                    }
                    if (i==3)
                    {
                        cout<<"\n";
                    }
                }
                cout<<"\n";
            }
        }
        return 0;
    }
    et il met en �vidence le fait qu'il te manque un peu de "factorisation" du code...

    En effet, l'un des premiers et principaux principes qu'il faut apprendre � mettre en oeuvre est la d�l�gation des t�ches (une fonction est responsable d'une seule chose, mais elle le fait bien... cf cette intervention de ma part)

    Ainsi, on pourrait envisager une fonction "Melanger" qui s'occupera... du m�lange des paires et une autre "jouer"...

    La troisi�me remarque qu'il m'inspire est "sois attentif � utiliser les bons fichiers d'en-t�te"...:
    • <iostream.h> et <string.h> sont avantageusement remplac� par leurs homologues sans extensions (<iostream> et <string>)
    • stdio.h est une en-t�te C, et n'apporte rien ici


    Enfin, je dirais que l'utilisation d'un tableau statique n'est pas vraiment l'id�al � utiliser quand on souhaite effectuer un "m�lange" des �l�ment en s'assurant l'unicit� de l'utilisation... Mais je vais peut �tre un peu trop vite par rapport � tes connaissances

    Pour le reste, tu m'excusera, mais, vu l'heure, j'ai un peu la flegme de v�rifier ton code... je *t�cherai* d'y jeter un �il demain dans la journ�e
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. petit probleme en programmation modulaire .
    Par elmcherqui dans le forum C
    R�ponses: 3
    Dernier message: 24/11/2008, 15h59
  2. petit probleme de programme
    Par fedora9!!! dans le forum G�n�ral Python
    R�ponses: 4
    Dernier message: 18/09/2008, 23h24
  3. petit programme = Petit probleme
    Par DEGARINTE dans le forum Administration syst�me
    R�ponses: 2
    Dernier message: 08/10/2007, 14h32
  4. R�ponses: 1
    Dernier message: 15/03/2007, 20h16
  5. R�ponses: 6
    Dernier message: 02/08/2006, 17h24

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