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

Turbo Pascal Discussion :

Jeu de Sudoku (en Pascal) [TPW]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Par défaut Jeu de Sudoku (en Pascal)
    Bonjour,
    Je rencontre un problème en essayant de faire le puzzle du jeu "Sudoku" dans une matrice (9x9) .. en faite, ça m'a donné un message d'erreur: "NTVDM.exe à cesser de fonctionner" .. peut-être à cause d'une boucle infinie.., voici les lignes de 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
    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
    type
      short = 1..9;
     
    var
      i, k, j, n, l, p, q, limk1, limk2, limi1, limi2: short;
      ch, num: string[1];
      x, y: integer;
      b, t: boolean;
      key: char;
      M: array [1..9, 1..9] of string[1];
      xy: array [1..2, 1..81] of integer;
     
    label
      theend, randoms;
     
    begin
      randomize;
      for k := 1 to 9 do
      begin
        if k in [1..3] then
        begin
          limk1 := 1;
          limk2 := 3;
        end
        else if k in [4..6] then
        begin
          limk1 := 4;
          limk2 := 6;
        end
        else
        begin
          limk1 := 7;
          limk2 := 9;
        end;
     
        for i := 1 to 9 do
        begin
          if i in [1..3] then
          begin
            limi1 := 1;
            limi2 := 3;
          end
          else if i in [4..6] then
          begin
            limi1 := 4;
            limi2 := 6;
          end
          else
          begin
            limi1 := 7;
            limi2 := 9;
          end;
     
     
          randoms:
            randomize;
          str(random(9) + 1, ch);
          b := True;
          for j := 1 to 9 do
            b := b and (ch <> M[j, k]);
          for l := 1 to 9 do
            b := b and (ch <> M[i, l]);
          for p := limk1 to limk2 do
            for q := limi1 to limi2 do
              b := b and (ch <> M[q, p]);
          if b = True then
            M[i, k] := ch
          else
            goto randoms;
        end;
      end;
    ...

    J'espère quelqu'un peut m'aider, et merci.

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Sans doute que sur ce forum, il y une aide potentiellement non négligeable
    et pour Pascal je pourrais même mettre la main à la pâte mais ...
    ... un minimum de présentation dans le code (indentation) serait nécessaire, non ?


    Et puis des indications sur l'algorithme employé faciliterait et donnerait sans doute
    envie de jeter un coup d'oeil dans le code en ce qui me concerne

  3. #3
    Expert confirmé

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

    +1

    et de plus quand je vois des labels et des goto, je vais voir ailleurs sans me poser d'autres questions.

  4. #4
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Citation Envoyé par droggo Voir le message
    ...
    et de plus quand je vois des labels et des goto, ...
    Le "goto" est un sujet d'actualité sur developpez

    http://www.developpez.com/actu/10675...n-utilisation/

  5. #5
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Par défaut
    Citation Envoyé par FChrisF Voir le message
    Je n'ai pas vraiment regardé le code, mais la compilation indique un warning concernant la non initialisation du tableau M à la ligne 60 (et après). Ce qui me semble a priori exact.

    De toute façon, très rapidement le programme boucle de façon infinie avec (par exemple) les lignes suivantes pour M (on voit que seules certaines valeurs sont stockées):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    69172!34256!58714!96521!21439!73865!45697!17983!8234!
    Pouvez-vous expliquer davantage svp? .. x)

  6. #6
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    Citation Envoyé par Crymfox Voir le message
    Pouvez-vous expliquer davantage stp? .. x)
    Désolé, vous avez été trop rapide pour moi. J'ai en effet supprimé mon post, car je me suis aperçu après-coup que votre sujet portait sur l'utilisation de TPW (j'aurais du le lire plus attentivement la 1ère fois). Il se peut donc que ma précédente remarque ne soit pas pertinente (pour le moins).

    Ceci étant, je pense tout de même que votre programme boucle dans la partie randoms/goto randoms. Affichez en sortie le contenu de votre tableau M, et vous verrez très rapidement qu'il n'est plus modifié et qu'il est incomplet (enfin pour ce que crois comprendre).

    Par exemple:
    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
     
    var
    ...
       var1,var2: short;
    ...
     
          str(random(9) + 1, ch);
          for var1 := 1 to 9 do
            begin
              for var2 := 1 to 9 do
                write(M[var1,var2]);
              write('!');
            end;
          writeln;
          b := True;
    ...

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 567
    Par défaut
    Salut à tous

    Citation Envoyé par droggo Voir le message
    Bonjour,

    +1

    et de plus quand je vois des labels et des goto, je vais voir ailleurs sans me poser d'autres questions.
    Moi aussi... Je ne conteste pas la possibilité d'utiliser le GOTO là où il peut rendre service mais il me semble que le code qui nous intéresse peut largement s'en passer au profit d'un boucle while.
    Le langage Pascal a été conçu en bonne partie pour éviter de tels errements.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre averti
    Homme Profil pro
    étudiant
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Par défaut
    Citation Envoyé par vttman Voir le message
    Sans doute que sur ce forum, il y une aide potentiellement non négligeable
    et pour Pascal je pourrais même mettre la main à la pâte mais ...
    ... un minimum de présentation dans le code (indentation) serait nécessaire, non ?


    Et puis des indications sur l'algorithme employé faciliterait et donnerait sans doute
    envie de jeter un coup d'oeil dans le code en ce qui me concerne
    Bon, l'idée est simple.. c'est de choisir un nombre aléatoire entre 1 et 9, le convertir en chaine[1] :p et tester s'il n'existe pas sur colonne, ligne, et puis box (3x3), alors qu'il sera mis dans M[i,k] (M c'est la matrice) , sinon repeter ce traitement jusqu'à cette condition soit vrai .. x)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 20/04/2015, 18h58
  2. Jeu du Sudoku
    Par Hero13 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 06/10/2014, 10h07
  3. Interface graphique pour jeu de Sudoku
    Par Stradithehutt dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 01/11/2006, 10h43

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