Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

resolveur sudoku simple

Présentation
Resolveur de sudoku codé en c permettant de résoudre les grilles simples (sans hypothèses).
Téléchargement
Compatibilité
Linux Windows
0  1 
Téléchargé 364 fois Voir les 5 commentaires
Détails
Éditeur : CLEMENSON   +
Licence : Gratuit
Date de mise en ligne : 10 novembre 2012




Avatar de Pouet_forever Pouet_forever - Membre éclairé https://www.developpez.com
le 04/11/2012 à 15:14
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
Avatar de tigrou3000 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 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 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 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.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique C