Programmation mastermind - Page 2
Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 76

Programmation mastermind



  1. #31
    invite0bb5307a

    Re : Programmation mastermind


    ------

    Par exemple ça:

    Code:
    tour=1
    victoire = %F
    S=round(7*rand(1,4)+1)
    M=[]
    A=[]
    while (victoire == %F) & (tour<13)
        victoire = (M==S)
        if (victoire == %F)
            M=input('entrer une proposition')
            if size(M)~=[1,4] then
                disp('mauvais format')
            else
                if (M==S)
                    disp('Gagné')
                else
                    i=1
                    while (i<5)
                        j=1
                        while (j<5)
                            if M(i)==S(j) then
                                if i==j then
                                    A=[A,11]
                                    else A=[A,10]
                                end
                            end
                        end
                    j=j+1
                end
                i=i+1
                end
            end
            A
    
    end
    tour=tour + 1
    end
    
    if M~=S then
      disp('Perdu')
    end

    -----

  2. #32
    invite4492c379

    Re : Programmation mastermind

    tu as testé ?

  3. #33
    invite0bb5307a

    Re : Programmation mastermind

    J'avais un problème avec A mais je l'ai initialisé à un autre endroit :

    Code:
    tour=1
    victoire = %F
    S=round(7*rand(1,4)+1)
    M=[]
    while (victoire == %F) & (tour<13)
        victoire = (M==S)
        if (victoire == %F)
            M=input('entrer une proposition')
            if size(M)~=[1,4] then
                disp('mauvais format')
            else
                if (M==S)
                    disp('Gagné')
                else
                    i=1
                    while (i<5)
                        A=[]
                        j=1
                        while (j<5)
                            if M(i)==S(j) then
                                if i==j then
                                    A=[A,11]
                                    else A=[A,10]
                                end
                            end
                        end
                    j=j+1
                end
                i=i+1
                end
            end
            A
    
    end
    tour=tour + 1
    end
    
    if M~=S then
      disp('Perdu')
    end
    Je ne peux plus tester pour l'instant parce que scilab plante !

  4. #34
    invite0bb5307a

    Re : Programmation mastermind

    Les modifications plante scilab dont je déduis que ça n'aide pas le programme.
    J'en suis donc là :

    Code:
    tour=1
    victoire = %F
    S=round(7*rand(1,4)+1)
    M=[]
    A=[]
    while (victoire == %F) & (tour<13)
        victoire = (M==S)
        if (victoire == %F)
            M=input('entrer une proposition')
            if size(M)~=[1,4] then
                disp('mauvais format')
            else
                i=1
                j=1
                while (i<5)
                    while (j<5)
                        if M(i)==S(j) then
                            if i==j then
                                A=[A,11]
                                else A=[A,10]
                            end
                    end
                    j=j+1
                end
                i=i+1
                end
            end
    
    end
    tour=tour + 1
    end
    if (victoire == %T)
      disp('Gagné')
    else
      disp('Perdu')
    end

  5. #35
    invite4492c379

    Re : Programmation mastermind

    Quand tu dis «plantent» as-tu un nmessage d'erreur ?

  6. #36
    invite0bb5307a

    Re : Programmation mastermind

    Pas de message d'erreur mais je suis obligée de redémarrer scilab pour m'en servir

  7. #37
    invite4492c379

    Re : Programmation mastermind

    Bon, comme c'est assez lourd ces aller-retour j'ai décidé de m'installer scilab. Un peu déroutant au départ ... mais soit. Je regarde ça de plus près et je reposte ici ...

  8. #38
    invite4492c379

    Re : Programmation mastermind

    Bon, plusieurs remarques et questions :

    * si A et B sont des matrices, le résultat de A==B renvoie une matrice de booléens, les conditionnelles seront plus simple à manipuler si tu utilises la fonction isequal(A,B), elle renvoie %T si les matrices sont égales ou %F si elles ne le sont pas.

    * sais-tu écrire une fonction scilab ?

    * j'ai une version fonctionnelle, je te donne le squelette :
    Code:
    tour = 1;
    S=round(7*rand(1,4)+1)
    disp(S)
    M=[]
    victoire=%F
    while ( (tour<13) & (~victoire) )
        disp('tour :'+string(tour))
        M=[]
        while (~ isequal(size(M),[1,4]))
            M=input('Combinaison : ")
            if (~ isequal(size(M),[1,4])) then
                disp('Mauvais format')
            end
        end
        victoire = isequal(M,S)
        A=[]
        if (~victoire) then
            // à compléter
        end
        tour=tour+1
    end
    if (victoire) then
        disp('Bingo')
    else
        disp('Looser')
    end
    Ce que je vais te demander de faire maintenant, est de m'expliquer en Français (pas de code) comment tu vas construire A, la matrice qui va recevoir les 10 (= bien placé) 11(=mal placé) et 12(=non présent).

  9. #39
    invite0bb5307a

    Re : Programmation mastermind

    J'ai déjà fait des fonctions avec function oui.

    Le but est de comparer chaque élément de M aux éléments de S.
    Mais si je fais les deux while ça n'ira pas. Il faut privilégier le bien placé au bien placé. Si par exemple S=[1 1 3 4] et M=[6 1 7 8], on doit placer uniquement un "bien placé" dans A pour le 1 de M alors qu'avec les while, on aurait 10 & 11!

  10. #40
    invite4492c379

    Re : Programmation mastermind

    ce que tu me dis est en fait :

    on parcourt M, on va dire que i représente l'index de l'élément de M sur lequel on se trouve. Si M(i) et S(i) sont égaux alors on met un 10 dans A(i), sinon il faut vérifier que M(i) ne se trouve pas à une autre position dans S.


    Comment ferais-tu le «il faut vérifier que M(i) ne se trouve pas à une autre position dans S.» ?

  11. #41
    invite0bb5307a

    Re : Programmation mastermind

    Mettre une boucle if pour M(i)=S(i) puis si M(i)~=S(i) mettre un while?

  12. #42
    invite4492c379

    Re : Programmation mastermind

    je dirai oui

    mais sans vouloir pinailler, if est une instruction conditionnelle pas une boucle

    essaye déjà de le faire avec une boucle for et on verra comment passer d'un for à un while sur ce petit morceau simple.

  13. #43
    invite0bb5307a

    Re : Programmation mastermind

    J'avais fait ça :

    Code:
    for i=1:4
        if M(i)==S(i) then
            A=[A,11]
        else
            j=1
            while (j<5) & (j~=i)
                if M(i)==S(j) then
                    A=[A,10]
                end
            end
        end
    end

  14. #44
    invite4492c379

    Re : Programmation mastermind

    c'est un bon début, mais que se passe-t-il si il y a plusieurs S(j) qui correspondent ?

  15. #45
    invite0bb5307a

    Re : Programmation mastermind

    Plusieurs 10 dans A pour un seul élément de M..

  16. #46
    invite0bb5307a

    Re : Programmation mastermind

    Est ce que l'on peut mettre j=92 après le if M(i)==S(i)
    Comme ça on ne rentrera plus dans le while..

  17. #47
    invite4492c379

    Re : Programmation mastermind

    la technique pour éviter ça est en fait d'utiliser un booléen, nommons le par exemple malPlacéTrouvé.
    Tu l'initialise à faux au départ, dans ta boucle tu le mets à vrai si tu le trouve, et le test pour continuer la boucle est un peu transformé ... «de tant que pas à la fin du vecteur» en «de tant que (pas à la fin du vecteur) et (pas malPlacéTrouvé)»

    tu comprends la démarche ?

  18. #48
    invite4492c379

    Re : Programmation mastermind

    Citation Envoyé par alice1812 Voir le message
    Est ce que l'on peut mettre j=92 après le if M(i)==S(i)
    Comme ça on ne rentrera plus dans le while..
    oui tu peux aussi artificiellement mettre j=5 (5 est suffisant ) pour sortir de la boucle. C'est plus succint et un peu moins lisible ... mais ici ça passe bien

  19. #49
    invite0bb5307a

    Re : Programmation mastermind

    Je fais quoi alors?

  20. #50
    invite4492c379

    Re : Programmation mastermind

    Essaye déjà de coder ça avec le truc du «si je le trouve je mets j=5 »

  21. #51
    invite0bb5307a

    Re : Programmation mastermind

    Code:
    for i=1:4
        if M(i)==S(i) then
            A=[A,11]
        else
            j=1
            while (j<5) & (j~=i)
                if M(i)==S(j) then
                    (A=[A,10]) & (j=5)
                end
                j=j+1
            end
        end
    end

  22. #52
    invite4492c379

    Re : Programmation mastermind

    en fait la boucle while ne fonctionne ra pas correctement
    la condition que tu code est
    tant que j inférieur 5 ET j différent de i

    cela signifie que si l'une des deux conditions n'est pas respectée alors on arrête le boucle. Imaginons que i vaut 1
    alors dès le départ i=j et donc on ne rentre pas dans la boucle.

    Ce que tu veux est plutot
    Code:
    tant que j<5
      si i différent de j et M(i)=S(j) alors
        tu as trouvé un malplacé

  23. #53
    invite0bb5307a

    Re : Programmation mastermind

    Comme ça ?

    Code:
    for i=1:4
        if M(i)==S(i) then
            A=[A,11]
        else
            j=1
            while (j<5)
                if (i~=j) & (M(i)==S(j)) then
                    (A=[A,10]) & (j=5)
                end
                j=j+1
            end
        end
    end

  24. #54
    invite4492c379

    Re : Programmation mastermind

    Après, au bout d'un moment il va falloir tester ... mais il y a une erreur dans ton code (facile à détecter).

  25. #55
    invite0bb5307a

    Re : Programmation mastermind

    Non je vois pas..

  26. #56
    invite4492c379

    Re : Programmation mastermind

    que fais ce bout de code ?


    (A=[A,10]) & (j=5)

  27. #57
    invite0bb5307a

    Re : Programmation mastermind

    = d'affectation

    Ajoute un terme à A et donne une autre valeur à j

  28. #58
    invite4492c379

    Re : Programmation mastermind

    je ne connais pas suffisemment scilab mais comme il s'agit de deux instructions séparées je les mettrai chacune sur une ligne ...

  29. #59
    invite0bb5307a

    Re : Programmation mastermind

    C'est pas mal mais il y a encore un soucis !

    par exemple si S=[3 3 8 3] et M=[3 3 3 3] on me met A=[11 11 10 11]..

  30. #60
    invite4492c379

    Re : Programmation mastermind

    c'est là qu'intervient le débuggage

    les capacités de scilab sont très limitées ... essaye de faire à la main ce que le programme fait pour voir où une erreur s'est glissée. Enfin s'il y a une erreur, en effet le troisième 3 de M est un 3 mal placé ...

Page 2 sur 3 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. réalisation de mastermind
    Par invite7f58f807 dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 08/12/2010, 08h27
  2. Mastermind
    Par invite7553e94d dans le forum Science ludique : la science en s'amusant
    Réponses: 1
    Dernier message: 22/04/2009, 19h00
  3. Programmation
    Par invite1dee7ead dans le forum Logiciel - Software - Open Source
    Réponses: 24
    Dernier message: 03/01/2009, 10h48
  4. Programmation C
    Par invite34aea5f7 dans le forum Électronique
    Réponses: 21
    Dernier message: 22/03/2008, 00h19
  5. programmation
    Par invite70772835 dans le forum Électronique
    Réponses: 0
    Dernier message: 01/05/2007, 19h03