Language C: basique :sudoku 9*9
Résolu
MIchelSardoche
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
MIchelSardoche Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
MIchelSardoche Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonsoir à tous, je cherche à faire un sudoku en language C pour un projet scolaire. Mon programme est presque finit mais je rencontre un problème lors de la définition de mon tableau (en toute fin de programme). Lors de l'exécution je n'arrive pas à afficher mes données dans le tableau et la demande de données est donc sans fin.
Je vous met le programme ci-dessous si quelqu'un a le courage de me faire remarquer mon erreur ou de me proposer une amélioration
Merci d'avance
Je vous met le programme ci-dessous si quelqu'un a le courage de me faire remarquer mon erreur ou de me proposer une amélioration
Merci d'avance
#include <stdlib.h> #include <stdio.h> #include <stdbool.h> // Fonction d'affichage void affichage (int sudoku[9][9]) { int i,j; for(i=0; i<9; i++) { for(j=0; j<9; j++) { printf( ((j+1)%3) ? "%d " : "%d|", sudoku[i][j]); } putchar('\n'); if (!((i+1)%3)) puts("------------------"); } puts("\n\n\n"); } bool VerifieLigne (int k, int sudoku[9][9], int i) { int j; for (j=0; j < 9; j++) if (sudoku[i][j] == k) return false; return true; } bool VerifieColonne (int k, int sudoku[9][9], int j) { int i; for (i=0; i < 9; i++) if (sudoku[i][j] == k) return false; return true; } bool VerifieBloc (int k, int sudoku[9][9], int i, int j) { int _i = i-(i%3), _j = j-(j%3); for (i=_i; i < _i+3; i++) for (j=_j; j < _j+3; j++) if (sudoku[i][j] == k) return false; return true; } bool Valide (int sudoku[9][9], int position) { int i,k,j; if (position == 9*9) return true; i= position/9, j = position%9; if (sudoku[i][j] != 0) return Valide(sudoku, position+1); for (k=1; k <= 9; k++) { if (VerifieLigne(k,sudoku,i) && VerifieColonne(k,sudoku,j) && VerifieBloc(k,sudoku,i,j)) { sudoku[i][j] = k; if ( Valide (sudoku, position+1) ) return true; } } sudoku[i][j] = 0; return false; } int main (void) { int sudoku[9][9],i,j,a; //INITIALISATION DU TABLEAU for(i=0; i<=4-1; i++) { for(j=0; j<=4-1; j++) { sudoku[i][j]=0; } } //DEMANDE DES DONNEES do { printf("Entrer les coordonnees de la case voulue\n"); printf("Entrer la ligne de la case voulue\n"); scanf("%d,&x"); printf("Entrer la colonne de la case voulue\n"); scanf("%d,&y"); printf("Entrer la valeur de la case voulue\n"); scanf("%d,&sudoku[x][y]"); printf("Tant que vous souhaiter entrer des valeurs tapez 1 sinon tapez 0 pour commencer le jeu\n"); scanf("%d,&a"); } while(a=1); Valide(sudoku,0); printf("Grille du Sudoku\n"); affichage(sudoku); return 0; }
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Language C: basique :sudoku 9*9
- Language binaire - Guide
- Windows display language french - Guide
- Vistalizator language pack windows 7 - Télécharger - Traduction
- Autocad 2008 language pack french - Forum AutoCAD
- Photoshop cs6 french language pack - Forum Photoshop
1 réponse
Bonjour,
Lignes 79 à 85, tu n'initialises qu'une partie de la grille au lieu de toute la grille.
Ligne 99, au lieu de tester si a vaut bien 1, tu écris la valeur 1 dans a. C'est ton erreur et le compilateur a dû te le signaler par un beau warning!
Ligne 101, tu appelles une fonction assez complexe, mais tu ignores complètement son résultat, alors pourquoi l'appeler?
Lignes 79 à 85, tu n'initialises qu'une partie de la grille au lieu de toute la grille.
Ligne 99, au lieu de tester si a vaut bien 1, tu écris la valeur 1 dans a. C'est ton erreur et le compilateur a dû te le signaler par un beau warning!
Ligne 101, tu appelles une fonction assez complexe, mais tu ignores complètement son résultat, alors pourquoi l'appeler?
MIchelSardoche
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
Bonjour et merci pour tes correction j'ai corrigé tes deux premières remarques. Ligne 101 j'utilise cette fonction pour qu'elle résolve ma grille avec les données que j'ai entré précédemment. En fait je ne m'intéresse pas directement à ce qu'elle renvoie mais aux modifications qu'elle fait sur ma grille pour que je puisse afficher mon sudoku résolu ensuite.