Exercice langage C
[tab name=’Exercice langage C’]
Le jeu des cailloux : un tas de N cailloux se trouve entre deux joueurs ; à tour de rôle chacun prend 1, 2 ou 3 cailloux. Celui qui est obligé de prendre le dernier caillou a perdu.
Ce jeu possède une stratégie gagnante : le joueur qui réussit, à laisser un nombre de cailloux égal à un multiple de 4 plus 1, à chaque fois qu’il doit jouer, gagne à coup sûr.
Le but est d’écrire un programme qui simule le jeu des cailloux (entre vous et la machine) :
Ecrire une fonction initialiser qui demande le nombre de cailloux et quel joueur commence le premier.
Ecrire une fonction utilisateur_joue qui demande à l’utilisateur le nombre de cailloux à prendre et qui met à jour le nombre de cailloux restants.
Ecrire une fonction machine_joue qui permet à la machine de prendre un nombre de cailloux et qui met à jour le nombre de cailloux restants.
Ecrire le programme principal.
Les prototypes :
void initialiser(int *nbCa, int *jo) ;
void utilisateur_joue(int *nbCa) ;
void machine_joue(int *nbCa) ;
nbCa : le nombre de cailloux
jo : joueur (1 : l’utilisateur et 2 : la machine)
[/tab][tab name=’Correction’]
/* jeu des cailloux */ #include /* initialisation de la partie, avec la saisie du nombre total de cailloux et * du joueur qui demarre la partie */ void initialiser(int *nbCa, int *jo); /* le jeu proprement dit pour un des deux joueurs : choix du nombre de * cailloux */ void jeu(int jo, int *nbCa); /* la machine joue */ void machine_joue(int *nbCa); /* l'utilisateur joue, et saisit le nombre de cailloux */ void utilisateur_joue(int *nbCa); /* changement de joueur dans *jo */ void changer_joueur (int *jo); int main() { int finJeu = 0; int nbCailloux , joueur, perdant; initialiser(&nbCailloux, &joueur); while ( !finJeu ) { printf("\nil reste %d cailloux\n", nbCailloux); jeu (joueur, &nbCailloux); if (nbCailloux == 0) { perdant = joueur; finJeu = 1; } else { changer_joueur (&joueur); } } if (perdant == 1) { printf("dommage: tu as perdu\n"); } else { printf("bravo: tu as gagne\n"); } return 0; } void initialiser(int *nbCa, int *jo) { int rep; printf("donnez le nombre de cailloux : "); scanf("%d", nbCa); printf("\nchoix du premier joueur :\n"); printf("\tutilisateur.: 1\n"); printf("\tmachine.....: 2\n"); printf("qui ? "); scanf("%d", &rep); switch (rep) { case 1: *jo = 1; break; case 2: *jo = 2; break; } } void jeu(int jo, int *nbCa) { if (jo == 2) { machine_joue(nbCa); } else { utilisateur_joue(nbCa); } } void machine_joue(int *nbCa) { int cailloux_pris, modu; modu = *nbCa % 4; switch (modu) { case 0: cailloux_pris = 3; break; case 1: cailloux_pris = 1; break; case 2: cailloux_pris = 1; break; case 3: cailloux_pris = 2; break; } printf("j\'ai pris %d cailloux \n",cailloux_pris); *nbCa = *nbCa - cailloux_pris; } void utilisateur_joue(int *nbCa) { int cailloux_pris; do { printf("combien de cailloux: "); scanf("%d", &cailloux_pris); } while ((cailloux_pris <= 0) || (cailloux_pris >= 4) || (cailloux_pris > *nbCa)); *nbCa = *nbCa - cailloux_pris; } void changer_joueur (int *jo) { if (*jo == 2) { *jo = 1; } else { *jo = 2; } }
Exercice langage C
Exercice informatique, Correction exercice, exercices corrigés, Solution exercice, Exercice langage C
[/tab][end_tabset skin= »lightness » ]