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 :

Jeu du pendu : problème de boucle


Sujet :

Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut Jeu du pendu : problème de boucle
    Bonjour à tous, voici en deux mots mon souci : j'essaie de faire tourner un jeu du pendu réalisé en langage pascal mais je n'arrive pas à créer la boucle qui permet au joueur de faire plusieurs propositions, tant qu'il n'abandonne pas ou qu'il n'est pas pendu. Pour l'instant, le programme tourne bien sauf cette boucle, merci d'avance pour votre aide.
    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
    program jouer_au_pendu;
     
     
    uses pendu_et_affichage;
     
    var
       encore_envie	 : BOOLEAN; // pour recommencer une nouvelle partie
       mot_a_trouver : STRING;  // contient le mot à trouver
       mot_cache     : STRING;  // contient le mot en cours de découverte
     
       // cette fonction sert à fabriquer une chaîne de n étoiles.
       function repete_etoile(const n : CARDINAL) : STRING;
       var i:cardinal;
       var a:string;
    begin
       a:='';
       for i:=1 to n do a:=a+'*';
       repete_etoile:=a;
    end;{repete_etoile}
     
       // cette procédure permet de modifier la variable mot_cache
       // en faisant apparaître la lettre proposée lettre
       procedure decouvrir(const lettre  : CHAR);
       var b:cardinal;
    begin
       for b:=1 to length(mot_a_trouver) do if lettre=mot_a_trouver[b] then mot_cache[b]:=lettre;
    end;{decouvrir}
     
       // cette procédure demande à l'utilisateur une proposition. 
       // Si la proposition est erronnée alors le joueur est sanctionné,
       // sinon la lettre est découverte.
         procedure faire_proposition;
       var c:char;
       var e:cardinal;
    begin
         afficher_gibet;
         mot_a_trouver:='azerty';
         writeln(repete_etoile(length(mot_a_trouver)));
         writeln('votre proposition ? (*/?/lettre/mot)');
         readln(c);
         if c='?' then begin Afficher_regle; readln; end;
         if c='*' then exit;
         for e:=1 to length(mot_a_trouver)do if c=mot_a_trouver[e] then decouvrir(c)else
                           begin decouvrir(c);
                                 mot_cache[e]:=c;
                                 writeln(mot_cache); readln; end;
     
         if mot_a_trouver<>c then sanctionner else writeln('bonne réponse, le mot était ; ',mot_a_trouver);
               end;(*faire_proprosition*)
     
       // cette procédure effectue une partie de jeu du pendu
       // - choix du mot à trouver
       // - interrogation de l'utilisateur jusqu'à fin de partie
       procedure jouer;
     
    begin
       writeln(repete_etoile(length(mot_cache)));
       preparer_gibet;
       mot_a_trouver:='azerty';
       writeln(repete_etoile(length(mot_cache)));
       faire_proposition;
       if pendu=true then writeln('Vous avez perdu');
       end;(*jouer*)
     
       // cette procedure demande à l'utilisateur
       // s'il veut poursuivre la partie
       // et lit sa réponse
       // attribue la valeur VRAI à la variable globale encore_envie
       // si l'utilisateur a répondu par l'affirmative
       // et la valeur FAUX dans le cas contraire
       procedure demander_si_encore_envie;
       var f:char;
    begin
          writeln('Voulez-vous recommencer une partie ?(o/n)');
          readln(f) ;
          If f='o' then encore_envie:=TRUE else encore_envie:=false;
    end; (*demander_si*)
     
     
    BEGIN  
       jouer();
       demander_si_encore_envie();
       while encore_envie do begin
          jouer();
          demander_si_encore_envie();
       end (*while*);
     
    END.

  2. #2
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour et bienvenue
    tu pourais utiliser la balise code stp (# dans l'editeur) c'est pas facile de lire dans tout ça surtout a cette heure .
    Juste pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        var i:cardinal;
        var a:string;
    Un seul var suffira.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BEGIN
       jouer();
       demander_si_encore_envie();
       while encore_envie do 
        begin
           jouer();
           demander_si_encore_envie();
        end (*while*);
    Moi je ferais plutot(pour simplifier le code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        begin
             repeat
                 jouer();     
                 demander_si_encore_envie();
             until Pas(encore_envie));
         end;
    Citation Envoyé par hitman_47
    je n'arrive pas à creer la boucle qui permet au joueur de faire plusieurs propositions, tant qu'il n'abandonne pas ou qu'il n'est pas pendu.
    Quand tu parles de faire plusieurs propositions tu veux dire quoi?
    Si je te t'ai bien compris tu veux faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          repeter
                 Jeu;
          Jusqu''a (Abandon ou Pendaison);
    ?

    Pour faire plusieurs propositions c'est dans procedure faire_proposition; que tu dois le faire non?
    Bon bref je vois pas mal de procedures et ton unité pendu_et_affichageque tu nous montres pas
    Bon je m'arrete la @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  3. #3
    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
    Points : 2 501
    Points
    2 501
    Par défaut
    D' abord commence par bien identer ton code. C' est presque illisible. essaie de mettre une seule instruction par ligne.
    Je crois aussi que tu n' as pris le temps de faire un brouillon.Il y' a beaucoup de repetition dans le code que tu devrais eviter.
    Revenons sur le code :
    procedure faire_proposition;
    var c:char;
    var e:cardinal;
    begin
    afficher_gibet;
    mot_a_trouver:='azerty';
    writeln(repete_etoile(length(mot_a_trouver)));
    writeln('votre proposition ? (*/?/lettre/mot)');
    readln(c);
    if c='?' then begin Afficher_regle; readln; end;
    if c='*' then exit;
    for e:=1 to length(mot_a_trouver)do if c=mot_a_trouver[e] then decouvrir(c)else
    begin decouvrir(c);
    mot_cache[e]:=c;
    writeln(mot_cache); readln; end;

    if mot_a_trouver<>c then sanctionner else writeln('bonne réponse, le mot était ; ',mot_a_trouver);
    end;(*faire_proprosition*)
    if c='?' then begin Afficher_regle; readln; end
    d' abord, apres avoir testé '?', il vas encore etre consideré comme une proposition qui sera forcement fausse.
    if c='*' then exit;
    c' est mieux d' eviter ces genres de sorties.
    for e:=1 to length(mot_a_trouver) do
    if c=mot_a_trouver[e] then
    decouvrir(c)
    else
    begin
    decouvrir(c);
    mot_cache[e]:=c;
    writeln(mot_cache); readln; end;
    Tu sais au moins ce que fais la procedure decouvir() ? tu te repetes sans cesse.

  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
    Points : 2 501
    Points
    2 501
    Par défaut
    A ta place, j' aurais fais la procedure faire_proposition comme suit :
    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
     
    procedure faire_proposition;
     const nombre_proposition=10;{par exemple}
     var c:char;
          e:cardinal;
          sortie:boolean;
          proposition:integer;
    begin
    afficher_gibet;
    mot_a_trouver:='azerty';
    sortie:=false;
    proposition:=0;
    writeln(repete_etoile(length(mot_a_trouver)));
    repeat
    writeln('votre proposition ? (*/?/lettre/mot)');
    readln(c);
    case c of
       '*' : sortie:=true;
       '?' :begin
            afficher_regle;
            readln;
            end;
     else
      begin
      decouvrir(c);
      writeln(mot_cache);
      proposition:=proposition+1;
      if (proposition>nombre_proposition) or (mot_caher=mot_a_trouver) then
        sortie:=true;
      end;
     end;
    until sortie;
    if (proposition>nombre_proposition) then
     {il a perdu}
     else
     if (mot_caher=mot_a_trouver) then
      {il a gagné}
     else 
      {il a interompu le jeu}
     
    end;
    J' avis oublié une remarque :
    if mot_a_trouver<>c then sanctionner else writeln('bonne réponse, le mot était ; ',mot_a_trouver);
    end;(*faire_proprosition*)
    en comparant mot_a_trouver et c, tu esperes avoir quoi ? On ne fait pas de la magie ici.
    Tu eviterais ces erreurs si tu prends la peine de faire un brouillon

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut un pas de plus...
    Je sais bien que je ne suis pas bon en programmation, que mon programme paraît inutilement complexe pour beaucoup mais je n'est que 2 mois de cours en poche... je m'excuse d'tre très brouillon. maintenant j'ai ce programme a rendre pour très vite je me suis arraché les cheveux dessus depuis quelques nuits et je suis totalement bloqué! j'ai fait le dico, l'affichage et le squelette dev me dit qu'il n'y a plu d'erreur, si je lance par exemple le programme sans le dico tout va bien ça marche mais avec toujours le même mot... pas tres interessant mais impossible d'inclure mon dico pour permettre de selectionner unmot au hasard dans un fichier dico.txt, a qui peut sauver mes derniers cheveux... merci!

    LE DICO
    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
    unit dico;
     
    interface
     
    function mot_au_hasard : STRING;
     
     
    implementation
    const nb_max_mot = 70000;
     
    var
       t : array [1..nb_max_mot] of STRING;
       n : CARDINAL;
     
     
    procedure initialiser(const nom_fichier_dictionnaire : STRING);
    var
       f : TEXT;
       i : CARDINAL;
    begin
       i:=0;
       assign(f,nom_fichier_dictionnaire);
     
       reset(f);
       while not eof(f) do begin     
          readln(f,t[i]);
          i:=i+1;
       end (*while*);
       n:=i;
       close(f);
    end (*initialiser*);
     
    function mot_au_hasard : STRING;
    begin
       mot_au_hasard:=t[random(N)];
    end (*mot_au_hasard*);
     
     
    initialization 
       randomize();
       initialiser('dico.txt');
    L'AFFICHAGE
    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
    unit pendu_et_affichage;
     
    interface
     
    // -----
    // |/  |
    // |   O
    // |  /|\
    // |   |
    // |  / \
    //---
     
     
      procedure Preparer_Gibet;
      procedure Sanctionner;
     
      function pendu: BOOLEAN;
     
      procedure Afficher_gibet;
      procedure Afficher_regle;
     
     
     
    implementation
     
    uses SysUtils;
     
    type
     
       ELEMENTS_DU_PENDU = (aucun,tete,corps,
                            bras_droit,bras_gauche,
                            jambe_droite,jambe_gauche);
     
       Deja_Pendu = class(exception);
     
     
       procedure Afficher(etat:ELEMENTS_DU_PENDU); forward;
     
    var
       etat_pendu:ELEMENTS_DU_PENDU;
     
       procedure sanctionner;
       begin
          if pendu then begin
             raise deja_Pendu.create('deja Pendu declenchee par sanctionner');
          end else begin
             etat_pendu:=succ(etat_pendu);
          end (*if*);
       end (*sanctionner*);
     
       procedure preparer_gibet;
       begin
          etat_pendu:=aucun;
       end (*preparer_gibet*);
     
       function pendu : BOOLEAN;
       begin
          pendu:= (etat_pendu=jambe_gauche);
       end (*pendu*);
     
     
       procedure Afficher_gibet;
       begin
          afficher(etat_pendu);   
       end (*afficher_gibet*);
     
       procedure Afficher_regle;
       begin
          writeln('*********** JEU DU PENDU ************************** ');
          writeln('Vous devez trouver un mot choisi au hasard dans le');
          writeln('dictionnaire par l''ordinateur.');     
          writeln();
          writeln('Pour faire cela, vous avez le droit de faire un nombre limite');
          writeln('de propositions. A chaque proposition erronee, un autre ');
          writeln('morceau du corps du pendu s''affiche. Lorsque le corps du');
          writeln('pendu est completement dessine a l''ecran, vous avez perdu.');
          writeln();
          writeln('Lors de chaque proposition, vous pouvez soit');
          writeln(' - quitter la partie en tapant *');
          writeln(' - consulter les regles en tapant ?');
          writeln(' - proposer une lettre. ');
          writeln(' - soit proposer le mot');
          writeln();
          writeln('***************************************************');
       end (*afficher_regle*);
     
     
      procedure Afficher(etat:ELEMENTS_DU_PENDU);
      begin
         writeln(' -----');
         writeln(' |/  |');
         if etat>=tete then begin
            writeln(' |   O');
         end else begin
            writeln(' |    ');
         end (*if*);
         if etat>=bras_droit then begin
            write(' |  /');
         end else begin
            write(' |   ');
         end (*if*);
         if etat>=corps then begin
            write('|');
         end else begin
            write(' ');
         end (*if*);
         if etat>= bras_gauche then begin
            writeln('\');
         end else begin
            writeln(' ');
         end (*if*);
         if etat>=corps then begin
            writeln(' |   |');
         end else begin
            writeln(' |    ');
         end (*if*);
         write(' |  ');
         if etat>=jambe_droite then begin
            write('/');
            if etat>= jambe_gauche then begin
               writeln(' \');
            end else begin
               writeln('');
            end (*if*);
         end else begin
            writeln('');
         end (*if*);
         writeln('---');
      end (*Afficher*);
     
     
    initialization
       etat_pendu:=jambe_gauche;
     
    finalization
       writeln('USTL - InitProg 2007');
       readln;
    end.
    LE SQUELETTE
    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
    program jouer_au_pendu;
     
     
    uses dico, pendu_et_affichage;
     
    var
       encore_envie	 : BOOLEAN;
       mot_a_trouver : STRING;
       mot_cache     : STRING;
     
       function repete_etoile(const n : CARDINAL) : STRING;
       var i:cardinal;
       var a:string;
    begin
       a:='';
       for i:=1 to n do a:=a+'*';
       repete_etoile:=a;
       a:=mot_cache;
    end;{repete_etoile}
     
       procedure decouvrir(const lettre  : CHAR);
       var b:cardinal;
    begin
       for b:=1 to length(mot_a_trouver) do if lettre=mot_a_trouver[b] then mot_cache[b]:=lettre;
    end;{decouvrir}
     
     
         procedure faire_proposition;
       var c:string;
       var g:char;
     
    begin
     
         afficher_gibet;
         mot_a_trouver:= ***il est la le probleme que mettre??**;
         writeln(repete_etoile(length(mot_a_trouver)));
         mot_cache:=repete_etoile(length(mot_a_trouver));
         while (pendu=false) and (mot_cache<>mot_a_trouver) do begin
         writeln('votre proposition ? (*/?/lettre/mot)');
         readln(c);
         if c='?' then begin Afficher_regle; readln; end;
         if c='*' then exit;
     
         if length(c)=1 then begin g:=c[1]; decouvrir(g); afficher_gibet; writeln(mot_cache); end
         else
         if c=mot_a_trouver then begin mot_cache:=c; (*writeln('Bravo! le mot etait bien "',mot_a_trouver,'"')*) end
                        else begin sanctionner; afficher_gibet;end;
     
         if pos(c,mot_cache)=0 then begin sanctionner; afficher_gibet; writeln(mot_cache); end;
         if mot_cache=mot_a_trouver then begin writeln(); writeln('Bravo! le mot etait bien "',mot_a_trouver,'"'); end; end;
     end;(*faire_proposition*)
    J'ai vraiment tout tenté et j'avoue je ne sais plus...

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut
    La fin...
    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
    procedure jouer;
    begin
       preparer_gibet;
       faire_proposition;
       if pendu=true then begin writeln('Vous avez perdu'); writeln('Le mot a trouver etait "',mot_a_trouver,'"'); end;
       end;(*jouer*)
     
     
       procedure demander_si_encore_envie;
     
       var f:char;
    begin
          writeln('Voulez-vous recommencer une partie ?(o/n)');
          readln(f) ;
          If f='o' then encore_envie:=TRUE else begin if f='n' then encore_envie:=false else begin writeln(); writeln('Entrer ''o'' pour oui et ''n'' pour non !'); demander_si_encore_envie; end ;end;
    end; (*demander_si*)
     
     
    BEGIN  
       jouer();
       demander_si_encore_envie();
       while encore_envie do begin
          jouer();
          demander_si_encore_envie();
       end (*while*);
     
    END.

  7. #7
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour on a dit que ça serait plus lisible pour tout le monde de mettre des balises codes(#)
    Et pour ne pas repeter des remarques qu'on ta deja faites je passe, et la moi aussi je constate que tu prend toujours pas bien la peine de bien concevoir ton projet et d'etablir un bon algo avant de te lancer à coder.
    j'ai pas trop envie de jeter un coup d'oeil dans ce code s'il n'est pas bien en forme et bien commenté
    mais je pourrais neamoins repondre à ta question
    Citation Envoyé par hitman_47
    j'ai fait le dico, l'affichage et le squelette dev me dit qu'il n'y a plu d'erreur, si je lance par exemple le programme sans le dico tout va bien ça marche mais avec toujours le même mot... pas tres interessant mais impossible d'inclure mon dico pour permettre de selectionner unmot au hasard dans un fichier dico.txt,
    Si t'as fait une fonction pour selectionner un mot au hasard d'un fichier remplis de mots alors
    t'a juste a lui appliquer au mot à trouver du gene
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motATrouver:=motHasardTire;
    sachant que motHasardTire est la fonction qui renvoie un mot au hasard dans le fichier.

    a qui peut sauver mes derniers cheveux... merci!
    Faudrais pas oublier de dire combien de cheveux il te reste
    Et juste j'ai vu un truc au debut qui m'a frapper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const nb_max_mot = 70000;
    var
    t : array [1..nb_max_mot] of STRING;
    Un tableau statique de 70000 mot et en plus chaine de caractere sachant que'une de caractere par defaut peut avoir 255 caracteres . ?
    Et le compilateur t'a rien dit?
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  8. #8
    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
    Points : 2 501
    Points
    2 501
    Par défaut
    Ce qu' il veut dire c' est qu' il faut diminuer la taille du tableau. 70000 string doit provoquer un depacement de capacité.
    Proposition: pourquoi ne pas faire une fonction qui choisit aleatoirement les mots dans le fichier ?.

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lei,
    Citation Envoyé par darrylsite Voir le message
    Ce qu' il veut dire c' est qu' il faut diminuer la taille du tableau. 70000 string doit provoquer un depacement de capacité.
    Proposition: pourquoi ne pas faire une fonction qui choisit aleatoirement les mots dans le fichier ?.
    +1

    De plus, d'une manière générale, tout charger ainsi en mémoire est une mauvaise habitude, on finit toujours par buter sur les limites.
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut
    ba je vous avoue que je suis incapable de creer une telle fonction...

  11. #11
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    Citation Envoyé par hitman_47
    ba je vous avoue que je suis incapable de creer une telle fonction...
    Bah tu rigole la . quand tu dis c'est que tu ne veux pas faire d'effort ,si tu veux arriver a quelque chose il faut de te donner les moyens,j'aurai preferé que tu nous dises "Comment je pourrais faire ce que vous dites ?"
    alors indice : tu sais lire dans un fichier ,tu sais tirer un nombre aleatoire alors ..........
    Au lieu de dire que tu es incapable penses a l'algo que tu pourra utiliser
    @+
    Bonne année 2008
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Plop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const nb_max_mot = 70000;
    var
    t : array [1..nb_max_mot] of STRING;
    C'est pas type a la place de var la ?

    J'ai moi aussi a faire un pendu en programmation objet a faire comme mini projet en iut informatique AS (année spéciale), ce qui s'annonce passionnant

    Pour ton probleme de gestion des mots, tu peux utiliser la fonction RANDOMIZE
    Petit exemple ici => LA

    Ne perd pas confiance

    ++

  13. #13
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     const nb_max_mot = 70000;
    var
    t : array [1..nb_max_mot] of STRING;
    C'est pas type a la place de var la ?
    Non absolument pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type t=array[1..nb_max_mot] of string;
    la oui

    Moi aussi je te file un lien du meme auteur pour revoir les types -ici
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut
    je ne comprend pas, ma fonction mot_au_hasard du dico.pas devrait me choisir un mot au hasard... quand je ne met que l'unité affichage et le programme squelette ça marche mé toujours avec le même mot, donc logiquement avec mon dico rajouté ça devrait fonctionner, mais quande je lance le tout apres compilation il y a un code erreur et ça se referme.. si quelqu'un pouvait le tester dans dev pascal et me dire ce qu'il en pense..

  15. #15
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    C'est quoi le code d'erreur que tu obtiens?
    tu as pris la peinne de lire les remarques qu'on ta signaler plus haut?
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut
    une erreur de type runtime error 2 at... si mes sources sont bonnes c'est un fichier introuvable...

  17. #17
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    une erreur de type runtime error 2 at... si mes sources sont bonnes c'est un fichier introuvable...
    je ne te demande ce que ça pourrait etre mais l'erreur exacte (pas de supposition s'il te plait)
    Si c'est un fichier introuvable tu peux regler ça,
    Prends juste la peine de faire une bonne conception sur papier avant de passer au code (on te la deja repeter)
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut
    mais ma conception sur papier était bonne puisque le programme fonctionne, seul le dico.pas fait defaut, ce dernier nous a été fourni par le prof et on ne doit pas y toucher pourtant en combinant ça ne fonctionne pas, je ne peux reussir la ou mon prof a echoué. si je viens demander de l'aide sur ce forum c'est parceque j'ai tout essayé (dans la mesure de ce que je sais) et donc c'est mon dernier recours. je rend cela lundi, j'y suis depuis 2 semaines alors c'est que vraiment je ne trouve pas. ce n'est pas un manque d'envie vu le temps que j'y est consacré mais parfois il faut savoir dire qu'on peut être depassé

  19. #19
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Alors c'est quoi l'erreur exacte?
    c'est ton prof qui fait cette declaration?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const nb_max_mot = 70000;
     var
       t : array [1..nb_max_mot] of STRING;
       n : CARDINAL;


    je ne peux reussir la ou mon prof a echoué.
    Les profs ne sont pas censé connaitre tout et il leur arrive aussi de faire des fautes(mais si ces fautes sont rares)
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 1
    Points
    1
    Par défaut
    non lui avait mis array of string et l'erreur a la compilation se située entre array et of donc je me suis renseigné dans mes cours et j'ai vu qu'il fallait mettre un intervalle [borne inf..borne sup] donc j'ai mis cela et ça s'est compilé. puisque ça venait de mes cours je me suis dit c'est ok mais aparemmen... un probleme demeure! pour l'erreur exact c'est : runtime error at 2 0x... après je n'ai pas le temps de lire ça s'affiche très brievement et même en ajoutant un readln à la fin

Discussions similaires

  1. Jeu du pendu sur console - problème de boucle
    Par Pif_Paf_Pouf dans le forum Débuter
    Réponses: 4
    Dernier message: 13/10/2014, 16h36
  2. Problème d'un jeu type pendu
    Par qnop dans le forum C
    Réponses: 6
    Dernier message: 08/07/2010, 18h14
  3. Réponses: 2
    Dernier message: 02/11/2009, 15h25
  4. Un jeu d'invasion en POO - Problème de boucle
    Par <arobase> dans le forum Tkinter
    Réponses: 2
    Dernier message: 10/05/2008, 17h48
  5. Réponses: 2
    Dernier message: 31/01/2008, 21h41

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