IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Téléchargé 36 fois
Vote des utilisateurs
0 
1 
Détails
Éditeur : CLEMENSON
Licence : Freeware
Mise en ligne le 10 novembre 2012
Plate-formes : Linux, Windows
Langue : Français
Référencé dans
Navigation

resolveur sudoku simple

Resolveur de sudoku codé en c permettant de résoudre les grilles simples (sans hypothèses).
Avatar de tigrou3000
Nouveau membre du Club https://www.developpez.com
Le 04/11/2012 à 17:38
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.
Avatar de Pouet_forever
Membre éclairé https://www.developpez.com
Le 04/11/2012 à 18:37
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
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 !
Avatar de tigrou3000
Nouveau membre du Club https://www.developpez.com
Le 04/11/2012 à 20:42
Merci pour ces conseils très complets, je ne manquerai pas d’améliorer ces divers points.
Avatar de shervid5
Candidat au Club https://www.developpez.com
Le 02/06/2016 à 3:56
bonjour, je viens de débuté dans la programmation, et je suis très content de vous. merci pour le partage.
Avatar de forum
Robot Forum https://www.developpez.com
Le 03/11/2012 à 23:02
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 ?
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.