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

Pascal Discussion :

Trouver "la combinaison secrète" générée par l'ordinateur


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 40
    Par défaut Trouver "la combinaison secrète" générée par l'ordinateur
    Bonjour et merci pour votre attention

    Donc voilà : je dois faire une jeu en Pascal et je bloque sur un point; le jeu consiste à trouver une combinaison secrète que l'ordinateur à déjà généée (j'ai utilisé random) et sauvegardée dans un vecteur et donc, à chaque fois que le joueur entre une combinaison, elle est testée et l'ordinateur doit rendre le score des gains. Et c'est là où se trouve le problème car les gains sont comptés comme suit :
    gains = (10 * (nombre de chiffres bien placés)) + (nombre de chiffres mal placés).
    Si le joueur trouve la bonne combinaison, il a 50 points.

    Voilà le début du code :
    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
    program la_combinaison_secrete;
    const
    min=1;max=8;
    type
    vec=array[1..5]of integer;
    var
    e,s:vec;
    j,y,u,i,o,p:integer;
    abandonner:boolean;
    procedure tiragesecret(var s:vec);
    begin
    s[1]:=random(max - min) + min;
    s[2]:=random(max - min) + min;
    s[3]:=random(max - min) + min;
    s[4]:=random(max - min) + min;
    s[5]:=random(max - min) + min;
    end;
    procedure lirecombinaison(var e:vec);
    begin
    writeln('tapez 5 chiffres accol‚s de 1 … 8, ou 00000 pour quitter');
    readln(y);e[1]:=y;
    readln(u);e[2]:=u;
    readln(i);e[3]:=i;
    readln(o);e[4]:=o;
    readln(p);e[5]:=p;
    if y=0 then if u=0 then if i=0 then if o=0 then if p=0 then abandonner:=true
    else
    begin
     
    ***** la se trouve le problème ******
    end;......
    Merci de m'aider , de mon côté j'y travaille sans relâche ...

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Bao,

    Déjà, je vois que pour sortir, tu demandes l'entrée de 5 zéros successifs. Il faut corriger ça (si un programme te demandait 5 fois la même entrée pour se terminer, tu serais plutôt énervé. Non ?)

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Par défaut
    Bonjour anissben,

    Déjà, pourquoi ne pas faire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i:=1 to 5 do
    Begin
      ReadLn(e[i]);
    End;
    pour l'entrée des chiffres ? Du coup, tu économises 5 variables inutiles. Et puisque j'y suis, pourquoi déclarer vec en tableau d'intteger et non de byte ? Tu doubles du coup l'utilisation mémoire de tes tableaux (Bon, d'accord, 5 octets, c'est pas beucoup)
    pour rien.

    Ensuite, tu peux utiliser les test booléens pour compter ton score:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i from 1 to 5 do
    Begin
      Score:= Score + 10*(e[i]=s[i]) + (e[i]<>s[i]);
    End;

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par CP / M Voir le message
    [CODE]
    Ensuite, tu peux utiliser les test booléens pour compter ton score:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i from 1 to 5 do
    Begin
      Score:= Score + 10*(e[i]=s[i]) + (e[i]<>s[i]);
    End;
    Ce bout de code n'est du tout correct. Il n'est pas possible de melanger des entiers avec des booleans.
    Comment calculerais tu l'espression :
    score:=0+10*(true)+(false)

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 169
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Ce bout de code n'est du tout correct. Il n'est pas possible de melanger des entiers avec des booleans.
    Comment calculerais tu l'espression :
    En effet, désolé de la boulette.
    Par contre ceci devrait fonctionner, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i from 1 to 5 do
    Begin
      Score:= Score + 10*Ord(e[i]=s[i]) + Ord(e[i]<>s[i]);
    End;

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par CP / M Voir le message
    En effet, désolé de la boulette.
    Par contre ceci devrait fonctionner, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i from 1 to 5 do
    Begin
      Score:= Score + 10*Ord(e[i]=s[i]) + Ord(e[i]<>s[i]);
    End;
    La syntaxe de la boucle for n'est pas correcte.
    Mais on peut bien faire simple et lisible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    score=0;
    for i:=1 to 5 do
     if (e[i]=s[i]) then
      score=score+10
     else
      score=score+1;

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par droggo Voir le message
    Bao,

    Déjà, je vois que pour sortir, tu demandes l'entrée de 5 zéros successifs. Il faut corriger ça (si un programme te demandait 5 fois la même entrée pour se terminer, tu serais plutôt énervé. Non ?)
    je serais bien enervé si ça m'arrivait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure lirecombinaison(var e:vec);
    begin
     writeln('tapez 5 chiffres accol‚s de 1 … 8, ou 00000 pour quitter');
     
     readln(y);e[1]:=y;
    if y=0 then
     abandonner:=true
    else
     begin
      readln(u);e[2]:=u;
      readln(i);e[3]:=i;
      readln(o);e[4]:=o;
      readln(p);e[5]:=p;
    et pourquoi n'avoir pas fait readln(e[1]) directement?

    je me demande si tu utilises toutes ces variables globales parce qu'elles sont necessaire.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/07/2014, 11h55
  2. [SAX] Erreur pour trouver la DTD d'un fichier XML parsé!
    Par gdawirs dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 14/01/2006, 15h28
  3. Réponses: 2
    Dernier message: 01/06/2004, 15h08

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