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 :

master mind 8 chiffres à deviner


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut master mind 8 chiffres à deviner
    un joueur dispose de 6 essais pour deviner 8 chiffres que l'ordinateur l'a obtenu d'une manière aléatoire, le pc indique les nombres en bonne position / mauvaise/ absent ..
    ecrire un programme permettant de simuler ce jeux


    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Bonjour,

    Par quel problème es-tu bloqué ?

    Comme nous ne ferons pas cet exercice à ta place mais simplement fournirons une aide, il est important de préciser
    - Ce que tu as déjà fait (code ou son ébauche ou comment tu l'envisages...)
    - Quels sont les points précis sur lesquels tu as besoin d'aide ou d'explications

  3. #3
    Membre actif
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define COUP_MAX    6      // Nombre de coup Maximal
    #define NB_CHIFFRE  8       // Nombre de chiffre dans le code
    #define BORNE_MAX   10      // Borne superieur du hasard
    // Different entrees pour le menu d'affichage
    #define RESULTAT    'r'
    #define GAGNE       'g'
    #define PERDU       'p'
    #define MENU        'm'
    #define IN  1
    // Fonctions externes
    static void init_res (char res[COUP_MAX][NB_CHIFFRE]);
    static void raz_chiffre (int chiffre[2][10]);
    static int hasard(void);
    static void saisie (int ROW, int essai[COUP_MAX][NB_CHIFFRE]);
    static void teste (int ROW, int *p_bon,char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE], int chiffre[2][10]);
    static void affichage(char mode, int ROW, char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE]);
    // Programme principal
    int main(void)
    {
        int essai[COUP_MAX][NB_CHIFFRE] = {{0}};            // Tableau conteant les combinaisons essayees
        char res[COUP_MAX][NB_CHIFFRE];                     // Tableau contenant les resultats de chaques combinaisons
        int code[NB_CHIFFRE] = {0};                         // Tableau contenant le code a decouvrir
        int chiffre[2][10] = {{0,1,2,3,4,5,6,7,8,9},{0}};   // Tableau de controle des valeurs jouees
        int bon;
        int ROW;                        // Indique la ligne en cours de traitement
        int coup;                       // Indique le nombre de coup joue
        int i;
        coup = 1;
        ROW = 0;
        // initialise le tableau RES & CODE
        init_res (res);
        // Generation du code aleatoire
        srand(time(NULL));
        for (i = 0; i < NB_CHIFFRE; i++) {
            code[i] = hasard();
            printf("%d ", code[i]);
        }
        // Affichage du menu
        affichage(MENU,0,res,code,essai);
        // Test de l'essai
        do {
            saisie(ROW,essai);
            bon = 0;
            teste(ROW,&bon,res,code,essai,chiffre);     // On teste le code entré
            affichage(RESULTAT,ROW,res,code,essai);     // On affiche le code essaye et son resultat
            raz_chiffre(chiffre);                       // On reinitialise le tableau de controle
            ROW++;
            coup++;
        }
        while (bon != NB_CHIFFRE && coup <= COUP_MAX);
        if (bon == NB_CHIFFRE)
            affichage(GAGNE,0,res,code,essai);
        else
            affichage(PERDU,0,res,code,essai);
        return 0;
    }
    // FONCTION INITIALISATION DU TABLEAU RESULTAT
    static void init_res (char res[COUP_MAX][NB_CHIFFRE]) {
        int j;
        for (j = 0; j < COUP_MAX; j++) {
            int i;
            for (i = 0; i < NB_CHIFFRE; i++)
                res[j][i] = '.';
        }
    }
    // FONCTION REMISE A ZERO DU CODE TEMP
    static void raz_chiffre (int chiffre[2][10]) {
        int i;
        for (i = 0; i < 10; i++)
            chiffre[1][i] = 0;
    }
    // FONCTION HASARD
    static int hasard(void) {
        return (int)(rand()/(double)RAND_MAX * (BORNE_MAX));
    }
    // FONCTION DE SAISIE DE LA COMBINAISON
    static void saisie (int ROW, int essai[COUP_MAX][NB_CHIFFRE]) {
        int n;
        do {
            char chaine[20];
            printf("\nEntrez votre combinaison : " );
            fgets(chaine, sizeof chaine, stdin);
            n = sscanf(chaine, "%d %d %d %d %d", &essai[ROW][0], &essai[ROW][1], &essai[ROW][2], &essai[ROW][3],&essai[ROW][4] );
            if (n != NB_CHIFFRE)
                puts("ERREUR" );
        }
        while (n != NB_CHIFFRE);
    }
    // FONCTION TEST
    static void teste (int ROW, int *p_bon, char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE], int chiffre[2][10]) {
        int i,j,k;
        k = 0;
        /* boucle pour les valeurs presentes et bien placees*/
        for (i = 0; i < NB_CHIFFRE; i++)
            if (essai[ROW][i] == code[i]) {
                res[ROW][k++] = '#';
                chiffre[1][essai[ROW][i]] = IN;
                (*p_bon)++;
            }
        /* boucle pour les valeurs presentes mais mal placees */
        for (i = 0; i < NB_CHIFFRE; i++)
            for (j = 0; j < NB_CHIFFRE; j++)
                if (essai[ROW][i] == code[j] && j != i && chiffre[1][essai[ROW][i]] != IN) {
                    res[ROW][k++] = '*';
                    chiffre[1][essai[ROW][i]] = IN;
                }
    }
    // FONCTION AFFICHAGE
    static void affichage(char mode, int ROW, char res[COUP_MAX][NB_CHIFFRE], int code[NB_CHIFFRE], int essai[COUP_MAX][NB_CHIFFRE]) {
        int i, j;
        switch (mode) {
            case 'r' :
                 for (j = 0; j <= ROW; j++) {
                    for (i = 0; i < NB_CHIFFRE; i++)
                        printf("%d ", essai[j][i]);
                    printf("\t" );
                    for (i = 0; i < NB_CHIFFRE; i++)
                        printf("%c ", res[j][i]);
                    printf("\n" );
                }
                break;
            case 'p' :
                printf("\nPERDU, le code correct etait :\t" );
                for (i = 0; i < NB_CHIFFRE; i++)
                    printf("%d ", code[i]);
                printf("\n\n" );
                break;
            case 'g' :
                printf("\nGAGNE, le code etait bien :\t" );
                for (i = 0; i < NB_CHIFFRE; i++)
                    printf("%d ", code[i]);
                printf("\n\n" );
                break;
            case 'm' :
                printf("\t*****************************\n" );
                printf("\t*                           *\n" );
                printf("\t*        MASTERMIND         *\n" );
                printf("\t*                           *\n" );
                printf("\t*****************************\n" );
                        break;
        }
    }
    Voici mon code .
    Je suis bloqué sur le message donné par le programme , je veux qu'il affiche B pour bonne position, M pour mauvaise position
    Il s'agit au fait d'un numéro de téléphone à deviner..

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 853
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Ton code fait plaisir à voir. Tu l'as découpé en tâches élémentaires que tu appelles quand il faut, tu as remplacé les valeurs spéciales par des macros ; bref on sent que t'es à l'aise et donc qu'il n'y a aucune raison pour que ton code ne fonctionne pas. Ce qui est confirmé par une lecture où je n'ai rien vu de choquant ou d'incongru. Juste que je n'ai pas trop compris pourquoi raz_chiffre() ne s'occupe que de l'élément [1] mais je pense que ça doit être clair pour toi.

    Et donc en l'état actuel, je ne pense pas que ce forum puisse t'aider plus car pour se faire, il faudrait maintenant prendre ton code, le compiler et le tester en détail en rajoutant des affichages de variables aux moments clefs ; bref faire un travail un peu plus poussé que peu de gens ont envie de faire surtout que tu semble parfaitement capable de le faire toi-même.

    Juste quelques remarques perso
    1) évite les noms de variables en majuscules (réservé aux macros)
    2) tu peux remplacer init_res() par memset()

    Bon courage
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [XL-2010] Master problème chiffres significatifs
    Par ArcticM dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/10/2013, 19h51
  2. [Débutant] Master mind (mode console)
    Par Lunalune dans le forum VB.NET
    Réponses: 2
    Dernier message: 09/12/2011, 08h31
  3. [VB6] [Printer] Chiffres alignés à droite
    Par Laye dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/10/2002, 18h36
  4. Chiffre a Virgule Fixe
    Par garybaldi dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 10h41
  5. Recherche programme qui convertit les chiffres arabes en nb
    Par oli57 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/06/2002, 03h11

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