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

Télécharger C Discussion :

sudoku.c


Sujet :

Télécharger C

  1. #1
    Robot Forum
    Avatar de forum
    Inscrit en
    novembre 1999
    Messages
    2 000
    Détails du profil
    Informations forums :
    Inscription : novembre 1999
    Messages : 2 000
    Points : 2 432
    Points
    2 432
    Par défaut sudoku.c
    Bonjour,

    Je vous propose un nouvel élément à utiliser : sudoku.c

    Resolveur de sudoku codé en c permettant de résoudre les grilles simples (sans hypothèses).

    Qu'en pensez-vous ?

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 671
    Points : 822
    Points
    822
    Par défaut
    C'est assez douteux. Tu devrais essayer un backtracking, tu pourrais résoudre n'importe quelle grille avec toutes les solutions possibles de la grille (s'il y a).

    Il y a énormément de choses à redire sur le code. :s
    Plus tu pédales moins fort, moins t'avances plus vite.

  3. #3
    Nouveau membre du Club

    Homme Profil pro
    Technicien réseau
    Inscrit en
    novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2012
    Messages : 3
    Points : 30
    Points
    30
    Par défaut backtracking
    J'ai travaillé sur une fonction récursive permettant de faire du backtracking mais je n'ai pas encore de résultats satisfaisant par rapport à sa. Si tu as des conseils ou des améliorations pour le code n'hésite pas.

  4. #4
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 671
    Points : 822
    Points
    822
    Par défaut
    Le nom des variables est assez hasardeux. Essaye de donner des noms clairs aux variables pour savoir ce qu'elles font à la première lecture.
    Tu mets des commentaires inutiles. Le truc du genre "//on ouvre le fichier en lecture", c'est vraiment pas utile. On a vu la ligne fopen, on sait qu'on ouvre le fichier,
    Tu ne testes pas le fopen ligne 281, tu ne testes pas non plus si agrv[2] est valide (NULL ?)
    On préfèrera utiliser des noms de constantes en majuscule (TailleMat),
    Ligne 285, tu fais un for. C'est assez bizarre. Tu commences à i=0, c'est le nom du programme. Tu fais un strcmp sur tous les arguments pour chercher un ? et quitter, tu devrais plutôt faire un truc 'classique' avec des arguments (genre -h pour l'help). C'est pas beaucoup plus compliqué à faire. Tu pourrais faire une fonction 'usage' qui explique comment utiliser le programme.
    Tu pourrais créer un fichier avec un nom arbitraire si le nom de fichier de sortie n'est pas présent,
    Si l'ouverture du fichier a échoué dans init_mat tu continues le programme comme si de rien était, tu devrais afficher une erreur et quitter,
    Ta fonction init_mat est super compliquée. Tu utilises des artifices qui n'ont pas lui d'être. Tu pourrais simplement transformer ta fonction comme ça (j'y suis peut-être allé fort sur les détections d'erreurs ^^) :

    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
    int init_mat(int mat[TailleMat][TailleMat], const char * s) {
      FILE * f;
      int c, i, j;
     
      f = fopen(s, "r");
      if (f == NULL) {
        fprintf(stderr, "Erreur d'ouverture du fichier %s.\n", s);
        exit(EXIT_FAILURE);
      }
     
      for (i = 0; i < TailleMat; i++) {
        for (j = 0; j < TailleMat; j++) {
          c = fgetc(f);
     
          if (c == EOF) {
            if (i != TailleMat && j != TailleMat) {
              fprintf(stderr, "Fichier %s corrompu.\n", s);
              exit(EXIT_FAILURE);
            }
     
            i = TailleMat;
            j = TailleMat;
            continue;
          }
          else if (c == '\n') {
            break;
          }
          else if (isdigit(c)) {
            mat[i][j] = c - '0';
          }
          else {
            fprintf(stderr, "Fichier %s corrompu, caractère inconnu.\n", s);
            exit(EXIT_FAILURE);
          }
        }
      }
     
      fclose(f);
     
      return 0;
    }
    Fais attention avec les indices dans un tableau à 2 dimensions... là tu inverses ! En général je préconise l'utilisation de tableaux à 1 seule dimension. C'est plus flexible.
    Dans ChercheValeur, tu fais if(lire_mat(mat,i,j)>0) mais j n'est pas initialisé,

    Le reste j'ai un peu zappé, c'est du copier/coller. ^^
    Essaye de faire plus de fonctions 'utiles' !

    Bon courage !
    Plus tu pédales moins fort, moins t'avances plus vite.

  5. #5
    Nouveau membre du Club

    Homme Profil pro
    Technicien réseau
    Inscrit en
    novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2012
    Messages : 3
    Points : 30
    Points
    30
    Par défaut sudoku.c
    Merci pour ces conseils très complets, je ne manquerai pas d’améliorer ces divers points.

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    avril 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2016
    Messages : 1
    Points : 2
    Points
    2
    Par défaut coollll
    bonjour, je viens de débuté dans la programmation, et je suis très content de vous. merci pour le partage.

Discussions similaires

  1. Automatiser la réponse au Sudoku
    Par Manopower dans le forum Algorithmes et structures de données
    Réponses: 204
    Dernier message: 08/12/2006, 15h31
  2. Resolution sudoku
    Par Arnaud F. dans le forum C++
    Réponses: 12
    Dernier message: 20/12/2005, 21h01
  3. Sudoku
    Par Arnaud F. dans le forum C++
    Réponses: 17
    Dernier message: 17/12/2005, 16h11
  4. Sudoku++
    Par reggae dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/11/2005, 17h54

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