Se connecter / S'enregistrer
Votre question

Creation Sudoku en C

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
12 Avril 2009 01:54:56

Bonjour,

je dois pour un projet de fin d'année réaliser un sudoku en c et non c++. Or je rencontre quelque souci. Je dois en effet ecrire une fonction qui renvoi "vrai si et seulement si on peut placer k dans la case de coordonnées (i,j)"

Voila le début de mon programme. Petite précision je suis tenus de grader ce qu'il y a deja d'inscrit je n'ai donc pas vraiment beaucoup de marche de manœuvre pour pouvoir réadapter le programme de manière a ce que ça conception soit plus simple :

  1. #include "ez-draw.h"
  2. #define TAILLE_CASE 36
  3. #define HAUT_TITRE 25
  4. #define HAUT_LEGENDE 10
  5.  
  6. enum {false,true};
  7. typedef unsigned char Boolean;
  8. // les pavés sont numérotés de 0 à 8 ainsi que les lignes et les colonnes.
  9. // Pave[i][j] vrai ssi j est présent dans le pavé n°i.
  10. // l[i][j] vrai ssi j est présent dans la ligne n° i.
  11. // c[i][j] vrai ssi j est présent dans la colonne n° i.
  12. Boolean pave[9][10], l[9][10], c[9][10];
  13.  
  14. int enonce[9][9]={
  15. {7,9,0,0,4,0,0,0,0},
  16. {0,0,4,0,1,0,8,7,0},
  17. {0,0,0,0,0,2,0,6,0},
  18. {0,5,6,0,0,1,0,0,3},
  19. {0,0,0,0,5,0,0,0,0},
  20. {3,0,0,8,0,0,7,1,0},
  21. {0,8,0,2,0,0,0,0,0},
  22. {0,3,5,0,8,0,1,0,0},
  23. {0,0,0,0,6,0,0,5,8}
  24. };;
  25. int grille[9][9];
  26.  
  27. enum {MODE_SOL,MODE_JEU};
  28. int mode=MODE_JEU;
  29.  
  30. // i_clic et j_clic indique les indices ligne et colonne de la case où l'on a cliqué
  31. // -1 indiquant que l'on a cliqué en dehors de la grille
  32. int i_clic=-1, j_clic=-1;
  33.  
  34. // win fenêtre de jeu, win2 fenêtre d'aide
  35. Window win,win2=None;;
  36.  
  37. // possible renvoie vrai ssi on peut placer k dans la case de coordonnées (i,j)
  38. Boolean possible (int i,int j,int k)
  39. {
  40. // .............. à compléter..........
  41. }


Merci de votre aide

Autres pages sur : creation sudoku

a b L Programmation
12 Avril 2009 10:45:45

Plutôt simple comme projet de fin d'année, et t'es pas capable de pondre une seule ligne de code ? change d'études :D 
12 Avril 2009 13:02:54

CRicky a dit :
Plutôt simple comme projet de fin d'année, et t'es pas capable de pondre une seule ligne de code ? change d'études :D 



Merci beaucoup pour ton aide c'est très constructif. Je pense que toi tu devrais changer de mentalité. J'ai simplement un souci au niveau de ce point précis le reste je devrais réussir a me débrouiller.

Bref des réponses comme la tienne ne serve à rien donc va voir ailleurs sur la toile si j'y suis. Ca devrais t'occuper vu qu'il me semble que tu as pas mal de temps a perdre
Contenus similaires
Pas de réponse à votre question ? Demandez !
a b L Programmation
12 Avril 2009 15:28:54

Citation :
J'ai simplement un souci au niveau de ce point précis le reste je devrais réussir a me débrouiller.

1. je ne vois pas de point précis, juste un énoncé général. Si tu ne montres pas ton réel problème, on ne peut pas être constructif avec toi.
2. je ne vois pas une ligne de code dans ta fonction, t'as rien fait ? t'attend peut-être que quelqu'un te fasse ton boulot?
3. oui mes posts sur ce sujet ne servent à rien, peut-être juste pour te faire comprendre que faire faire un boulot simple aux autres ne va pas t'aider beaucoup...
13 Avril 2009 00:55:08

CRicky a dit :
Citation :
J'ai simplement un souci au niveau de ce point précis le reste je devrais réussir a me débrouiller.

1. je ne vois pas de point précis, juste un énoncé général. Si tu ne montres pas ton réel problème, on ne peut pas être constructif avec toi.
2. je ne vois pas une ligne de code dans ta fonction, t'as rien fait ? t'attend peut-être que quelqu'un te fasse ton boulot?
3. oui mes posts sur ce sujet ne servent à rien, peut-être juste pour te faire comprendre que faire faire un boulot simple aux autres ne va pas t'aider beaucoup...



Le souci est au niveau du a completer.
Le programme est bien plus long comme tu dois t'en douter.
Je ne demande pas a ce qu'on me le fasse je demande juste de l'aide pour comprendre ce que je dois faire.
Ok peut etre que pour toi c'est évident mais moi je ne suis pas dans une filière informatique c'est juste une option et les grève de ce semestre ne m'ont pas permis d'apprendre grands chose si ce n'est rien (2 cour simplement c'est tres tres légé). Donc voila je ne m'y connais pas en programmation enfin pas plus que ça et si la logique ca va je ne connais pas les fonctions que je dois utiliser ici.

Maintenant si tu désirs m'aider fait le moi savoir sinon c'est pas vraiment la peine de répondre.
En tout cas "merci" d'avoir jeter un oeil la dessus.
14 Avril 2009 18:14:53

Bon j'ai essayé de comprendre ce qui m'est demandé de faire dans cette fonction quelqu'un pourrait au moins m'indiquer si cela semble bon.



  1. // possible renvoie vrai ssi on peut placer k dans la case de coordonnées (i,j)
  2. Boolean possible(int i,int j,int k)
  3. {int p;
  4.  
  5. p=3*(i/3)+j/3;
  6.  
  7. if(pave[p][k]==true)
  8. return false;
  9. if(l[i][k]==true)
  10. return false;
  11. if(c[j][k]==true)
  12. return false;
  13. else return true;
  14.  
  15. }

14 Avril 2009 19:07:34

J'ai rencontré une nouvelle erreur en cour de chemin. J'espère cette fois ci que ma question ne semblera pas trop ambigu.
J'ai écris une bonne partie de mon programme.
J'ai une fonction verifie_enonce qui vérifie que mon tableau de base respecte les règles du jeu.
J'y ai inséré un printf d pour qu'il m'affiche dans la console si l'énoncé est faux.

Ainsi lorsque je lance mon programme (qui n'est pas encore fini) il me dit qu'en effet mon énoncé est faux.

Voici les fonctions que j'ai déjà rentré.
DÉBUT DU PROGRAMME AVEC L'ÉNONCÉ

  1. #include "ez-draw.h"
  2. #define TAILLE_CASE 36
  3. #define HAUT_TITRE 25
  4. #define HAUT_LEGENDE 10
  5.  
  6. enum {false,true};
  7. typedef unsigned char Boolean;
  8. // les pavés sont numérotés de 0 à 8 ainsi que les lignes et les colonnes.
  9. // Pave[i][j] vrai ssi j est présent dans le pavé n°i.
  10. // l[i][j] vrai ssi j est présent dans la ligne n° i.
  11. // c[i][j] vrai ssi j est présent dans la colonne n° i.
  12. Boolean pave[9][10], l[9][10], c[9][10];
  13.  
  14. int enonce[9][9]={
  15. {7,9,0,0,4,0,0,0,0},
  16. {0,0,4,0,1,0,8,7,0},
  17. {0,0,0,0,0,2,0,6,0},
  18. {0,5,6,0,0,1,0,0,3},
  19. {0,0,0,0,5,0,0,0,0},
  20. {3,0,0,8,0,0,7,1,0},
  21. {0,8,0,2,0,0,0,0,0},
  22. {0,3,5,0,8,0,1,0,0},
  23. {0,0,0,0,6,0,0,5,8}
  24. };;
  25. int grille[9][9];
  26.  
  27. enum {MODE_SOL,MODE_JEU};
  28. int mode=MODE_JEU;
  29.  
  30. // i_clic et j_clic indique les indices ligne et colonne de la case où l'on a cliqué
  31. // -1 indiquant que l'on a cliqué en dehors de la grille
  32. int i_clic=-1, j_clic=-1;
  33.  
  34. // win fenêtre de jeu, win2 fenêtre d'aide
  35. Window win,win2=None;;


FONCTION POSSIBLE QUI VERIFIE QU'ON PEUT ENTRER UN NOMBRE k A LA CASE i,j;
  1. // possible renvoie vrai ssi on peut placer k dans la case de coordonnées (i,j)
  2. Boolean possible (int i,int j,int k)
  3. {
  4. int p;
  5. p=3*(j/3)+(i/3);
  6. if ((pave[p][k]==false)&&(l[i][k]==false)&&(c[j][k]==false))
  7. return false;
  8. else
  9. return true;
  10. }


FONCTION VERIFIE_ENONCE

  1. void verifie_enonce()
  2. {
  3. int i, j, k;
  4.  
  5. for(i=0;i<9;i++)
  6. for(j=0;j<9;j++)
  7. {
  8. k=enonce[i][j];
  9. if(k!=0)
  10. if(possible(i,j,k)==false)
  11. {
  12. printf("Il y a un probleme dans l'enonce\n");
  13. return;
  14. }
  15. }
  16. }


ET LA FONCTION INITIALISATION QUI INITIALISE LE TABLEAU

  1. void initialisations()
  2. {
  3. int i,k,j;
  4.  
  5. /*init pave*/
  6. for(i=0;i<9;i++)
  7. for(k=0;k<10;k++)
  8. pave[i][k]=false;
  9.  
  10. /*init l*/
  11. for(i=0;i<9;i++)
  12. for(k=0;k<10;k++)
  13. l[i][k]=false;
  14.  
  15. /*init c*/
  16. for(i=0;i<9;i++)
  17. for(k=0;k<10;k++)
  18. c[i][k]=false;
  19.  
  20. verifie_enonce();
  21.  
  22. for(i=0;i<9;i++)
  23. for(j=0;j<9;j++)
  24. grille[i][j]=enonce[i][j];
  25.  
  26. }
a b L Programmation
14 Avril 2009 19:51:37

Ta fonction possible de ton premier post est exact, pas celle de ton dernier post.
En fait, tu as juste inversé le return false et return true: tu retourne true lorsque le chiffre est déjà utilisé (il n'est donc pas possible d'insérer le chiffre).
D'ailleurs, ça se voit bien au début, tout est à false, donc ton second possible() retourne forcément toujours false.

J'imagine que ta prochaine fonction est le remplissage initial de pavé, l et c.
15 Avril 2009 15:09:26

merci pour l'info. Oui ma fonction suivante c'est le remplissage. Je vais essayer de me débrouiller
15 Avril 2009 15:31:18

Ne connaissant pas du tout les fonctions de ez-draw je souhaiterais savoir comment procédé pour affiché l'enonce de maniere a ce que les chiffres de celui apparaissent en bleu?
16 Avril 2009 17:57:01

Tu es à Luminy à Marseille ?
17 Avril 2009 19:05:22

oui je suis a luminy ^^
17 Avril 2009 19:33:18

Moi aussi j'ai ce projet à faire ^^
T'es en 1ère année Maths Info ?
Tu as avancé ? tu en es ou ?
17 Avril 2009 20:06:28

je suis en mass. J'ai pas mal avancé j'ai terminé tout le dessine grille et ce qu'il y a au dessus.
J'ai un doute sur une fonction et je vais entamer la fonction de recherche une solution à l'énoncé proposé.
Et toi?
17 Avril 2009 20:19:43

Pareil j'ai fait tout le graphisme, je pense avoir un bug sur la fonction clic_case faut que je la revois je crois que je l'ai mal codé, sinon la fonction affecter clic aussi pour rentrer le texte pas top top ...
18 Avril 2009 12:36:57

Moi la je bloque a la fonction qui doit rechercher un solution a l'énoncé.
Je ne sais pas trop comment manoeuvrer.

  1. /* recherche une solution à l'énoncé proposé */
  2. void parcours(int prof)
  3. {
  4. //................. à compléter .....................
  5. }
21 Avril 2009 23:17:17

Idem j'ai casiment tout fait, je bloque aussi à cette fonction, sans donner de réponse concrète si jamais tu as trouvé, tu peux me dire par où faut commencer ? A quoi sert l'entier prof ?
22 Avril 2009 13:47:52

ben je planceh dessus mais je sais pas du tout je bloque sévère...
a b L Programmation
22 Avril 2009 20:02:41

On vous donne une fonction avec un paramètre à utiliser, et ce paramètre n'est pas décrit en commentaire ?
ça manque de professionnalisme chez le développeur qui a fait cet exercice, à moins que ce ne soit décrit dans "l'énoncé".
23 Avril 2009 11:45:05

CRicky a dit :
On vous donne une fonction avec un paramètre à utiliser, et ce paramètre n'est pas décrit en commentaire ?
ça manque de professionnalisme chez le développeur qui a fait cet exercice, à moins que ce ne soit décrit dans "l'énoncé".



En tout cas c'est pas dans l'énoncé.
28 Avril 2009 23:21:08

c'est bien ca le problème, j'ignore à quoi sert cette variable prof, et comment l'utiliser.
A mon avis il faut le faire récursivement, mais "prof" ne veut rien dire :s
4 Mai 2009 16:46:20

ah ben c'est bon j'ai terminé :-))
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS