Algo du jeu mastermind

Fermé
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 22 janv. 2009 à 18:21
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 26 janv. 2009 à 06:43
Bonjour, je dois faire l'algo du jeu du mastermind mais je bloque sur une des procédures du programme

Enoncé :
L'ordinateur choisit 5 nombres au hasard entre 1 et 8. Il est possible qu'il choisisse plusieurs fois le même nombre. Le joueur a droit a 10 tentatives. A chaque tentative, l'ordinateur lui indique le nombre de chiffre exact proposés à la bonne place, et le nombre de chiffre exacts mais proposés à la mauvaise place.
Des remarques :
Un chiffre compté à sa place ne doit pouvoir compter comme "Exact mais mal placé"
Lorsqu'un tirage comporte plusieurs chiffres identiques, il ne faut qu'un même chiffre de la proposition du joueur puisse compter plusieurs fois comme exact.
Lorsqu'une proposition comporte plusieurs chiffres identiques, il ne faut pas les considérer tous comme correspondant à un même chiffre du tirage.
Procédures du prog :
Procédure Tirage (E/S : Tordi[1...5] : tableau d'entiers)
Cette procédure effectue le tirage aléatoire des 5 nombres, compris entre 1 et 8 et les stockee dans le tableau Tordi.
Procédure Saisie_Proposition (E/S : Tpropo[1...5] : tableau d'entiers
Cette procédure gère la sasie de le proposition du joueur. Cette proposition est stockée dans le tableau Tpropo. La saisie du joueur doit etre validée : il ne doit pas pouvoir proposer un nombre inférieur à 1 ni un nombre supérieur à 8.
Procédure Analyse (E : Tordi[1...5] : tableau d'entiers, E : Tpropo [1...5] : tableau d'entiers, E/S : nbbp : entier, E/S : nbmp : entier)
Cette procédure compare la proposition du joeur à celle de l'ordinateur et calcule le nombre de chiffrs exacts proposés à la bonne place (nbbp) et le nombre de chiffres exacts proposés à la mauvaise place (nbmp).

Donc mon souci ce trouve sur la procédure analyse car je l'ai faite mais je me suis fait enguelé par la prof car je les ai comparé un a un avec des SI alors que je devrais utilisés une boucle mais je ne vois pas du tout comme l'écrire avec une boucle donc si quelqu'un pouvait m'aider cela serait très sympa. Ne vous casez surtout pas la tête sur le programme prncipal et les autres procédures car les autres sont juste.
Merci d'avance.
A voir également:

7 réponses

mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
24 janv. 2009 à 18:00
Coucou
Tout d’abord en plus de tes deux tableaux tordi et tpropo, je rajouterais un tableau tires de même taille initialisé à 0.
Je m’explique, voilà l’idée.

1.	Init :
nbbp = 0, nbmp = 0, tires[1…5] = 0
tordi[1…5] = {o1,o2,….,o5)
tpropo[1…5] = { p1,p2, ….,p5)

2.	Contrôle des numéros en bonne position
Pour num : 1 à 5 joueur (tpropo) faire
	Si tpropo(num) = tordi(num) alors
		nbbp = nbbp + 1
		tires(num) = 1
	fin si
fin pour
// A ce stade, on connaît le nombre de numeros bien placés et d’avoir mis 1 dans leur « case » réspective nous évite les doublons dans la suite du traitement

3.	Contrôle des numéros mal positionnés
//On va controler un par un les numeros du joueur par rapport à ceux de l’ordi non marqués dans la table tires
numj = 1
faire
	pour numordi = 1 à 5 faire
		si tires(numordi) <> 1 alors//c.a.d non tirés
			si tpropo(numj) = tordi(numordi) alors
				//Ici on est sur d’avoir un nb mal placé
				nbmp = nbmp + 1
				//Le numero ne doit plus être testé
				tires(numordi) = 1
                               //On sort alors du pour numordi vu que l’on a 
                               //trouvé un numero
                               sorti pour
			fin si
		fin si
	fin pour 
	numj = numj + 1 //numero suivant du joueur
tant que numj <=5 //On fait tous les jetons

Voilà le principe, j’espère avoir été assez clair car je l’ai codé en vb, mais pour le mettre en français, bonjour la galère !

Tout de suite, je pars pour un match de tennis de table à l’autre bout du département, mais n’hésite pas à me dire ce que tu en penses, je regarderais en rentrant vers 2, 3 heures du mat.

A bientôt.
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
24 janv. 2009 à 18:16
Merci pour ton aide mikebzh oui tu as été très clair.
Bonne chance pour ta compétition de tennis de table, moi c demain mais je joue en petit niveau Départementale 2 du Rhone a Caluire. Bon week end
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
24 janv. 2009 à 20:31
Je voudrais juste un petit renseignement après avoir relu une autre fois ta solution je narrive pas bien a comprendre a quoi te sert ta variable numj si tu pouvais m'expliquer juste ça. Merci d'avance.
0
mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
25 janv. 2009 à 01:06
Re-bonjour

En fait numj correspond au numéro du joueur que l'on est en train de traiter, si on avait des boules, on peut dire que numj correspond à la boule 1, puis 2, etc...
L'idée est là, je prends mon premier numéro, est-il dans mon premier test, c'est à dire bien placé, non, alors je regarde les boules de l'ordi une par une, je trouve une correspondance, bingo, elle est mal placée, on sort et on prend le deuxième numéro, etc...

Bonne nuit
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
25 janv. 2009 à 16:30
Bonjour
Je devais être fatigué hier car dans ma soluce il y a un bug (cas où jeton bien placé + identique mal placé non géré, enfin bref..)
Voilà le morceau de source en vb (on peut presque le considérer come un algo, vu que j'ai mis des commentaires,
tu verras que j'ai rajouté un tableau jj pour connaitre les jetons du joueur dejà traités.

[code]
.......declarations variables, init tpropo & tordi..........
For i = 0 To 4
    jj(i) = 0
    jo(i) = 0
Next i

nbbp = 0
nbmp = 0

'on regarde si jeton bien place
For numj = 1 To 5
        If tpropo(numj - 1) = tordi(numj - 1) Then
            nbbp = nbbp + 1
            jj(numj - 1) = 1 'on le(s) considére(nt) traité(s) dans tableau joueur et ordi jj & jo
            jo(numj - 1) = 1
        End If
Next numj

'on regarde si mal place
numj = 1
Do
    If jj(numj - 1) <> 1 Then 'le jeton n'est pas traité
        For numo = 1 To 5
            If jj(numo - 1) <> 1 Then 'ce jeton de l'ordi n'est pas traité
                If tpropo(numj - 1) = tordi(numo - 1) Then
                    nbmp = nbmp + 1
                    jj(numj - 1) = 1 'mal placé trouvé on le considère traité
                    jo(numo - 1) = 1 'ce jeton de l'ordi sert donc a quelqu'un --> traité
                    Exit For
                End If
            End If
        Next numo
    End If
    'jeton suivant
    numj = numj + 1
Loop While (numj <= 5)


..........recup nbbp & nbmp.........
[\code]

Normalement ça roule et on doit pouvoir intégrer la gestion bien placé et mal placé en même temps.
Je regarde ça.
A plus.
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
26 janv. 2009 à 06:43
Merci bien pour ton aide, oui c'est vrai qu'avec ton nouveau tableau cela me semble plus correcte.
Bonne journée moi je vais en cours !!!
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
24 janv. 2009 à 08:47
Merci pour l'aide sympa
-1