Help,,sudoku!!
crénios
Messages postés
1
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
saluut tous le monde,,alors voilà je suis supposé réaliser un programme,,enfin un sudoku en langage c,mais le problème est que je ne sais pas d'où commencé,,je veux dire si jamais vous pouvez m'aider ça sera sympa de votre part,,enfin les fct que je dois mettre au point,,,genre on fait comment pour l'affichage....
saluut tous le monde,,alors voilà je suis supposé réaliser un programme,,enfin un sudoku en langage c,mais le problème est que je ne sais pas d'où commencé,,je veux dire si jamais vous pouvez m'aider ça sera sympa de votre part,,enfin les fct que je dois mettre au point,,,genre on fait comment pour l'affichage....
A voir également:
- Help,,sudoku!!
- Sudoku - Télécharger - Jeux vidéo
- Sudoku Susser - Télécharger - Outils professionnels
- Sudoku-7 - Télécharger - Puzzle & Réflexion
1 réponse
Pour écrire un programme il faut raisonner en plusieurs étapes
1) Modéliser ce que tu veux faire :
a) Au niveau des variables :
- un quadrillage mat capable de stocker chaque chiffre placé (matrice 9x9 d'entiers dans {1,...,9})
- un quadrillage eff capable d'indiquer si un chiffre est effaçable ou pas (matrice de 9x9 de booléens, par exemple eff[x][y] ==1 si on peut modifier la case (x,y), 0 sinon)
b) Au niveau des entrées (ce que l'utilisateur va gérer) :
- les coordonnées (x,y) de la case à modifier (couple à valeur dans {0,...8} car les tableaux se numérotent à partir de [0] en langage C)
- la valeur à mettre val (valeur dans 0...9 ou 0 signifie que l'utilisateur veut effacer un chiffre par exemple)
c) Au niveau des sorties (quel résultat va calculer le programme)
- est ce que la partie est finie ou non
2) Ensuite il faut réfléchir à comment maintenir intègre ces variables, ce qui sous-entend de vérifier que quand l'utilisateur saisit un chiffre
- les coordonnées (x,y) sont correctes : x < 9 && y < 9 && x >= 0 && y >= 0
- la valeur v est correcte : eff[x][y] == 1 && v >=0 && v <= 0
- vérifie que v n'entre pas en contradiction avec les valeurs déjà saisie (il va falloir écrire des boucles for pour vérifier les lignes, colonnes, et carrés de mat dans une fonction)
- une fois le chiffre inséré, vérifie qu'il reste des cases vides (à 0), sinon c'est que le joueur à gagné.
3) Écrire la structure du programme :
Maintenant à toi de boucher les trous ;-)
Bonne chance
1) Modéliser ce que tu veux faire :
a) Au niveau des variables :
- un quadrillage mat capable de stocker chaque chiffre placé (matrice 9x9 d'entiers dans {1,...,9})
- un quadrillage eff capable d'indiquer si un chiffre est effaçable ou pas (matrice de 9x9 de booléens, par exemple eff[x][y] ==1 si on peut modifier la case (x,y), 0 sinon)
b) Au niveau des entrées (ce que l'utilisateur va gérer) :
- les coordonnées (x,y) de la case à modifier (couple à valeur dans {0,...8} car les tableaux se numérotent à partir de [0] en langage C)
- la valeur à mettre val (valeur dans 0...9 ou 0 signifie que l'utilisateur veut effacer un chiffre par exemple)
c) Au niveau des sorties (quel résultat va calculer le programme)
- est ce que la partie est finie ou non
2) Ensuite il faut réfléchir à comment maintenir intègre ces variables, ce qui sous-entend de vérifier que quand l'utilisateur saisit un chiffre
- les coordonnées (x,y) sont correctes : x < 9 && y < 9 && x >= 0 && y >= 0
- la valeur v est correcte : eff[x][y] == 1 && v >=0 && v <= 0
- vérifie que v n'entre pas en contradiction avec les valeurs déjà saisie (il va falloir écrire des boucles for pour vérifier les lignes, colonnes, et carrés de mat dans une fonction)
- une fois le chiffre inséré, vérifie qu'il reste des cases vides (à 0), sinon c'est que le joueur à gagné.
3) Écrire la structure du programme :
#include <stdio.h>
#include <stdlib.h>
// Initialiser les grilles mat et eff
void init_grille(unsigned **mat,unsigned **eff){
//...
}
// Tester si v peut être insérer en x,y
// retourne 1 si v peut être insérée en (x,y) 0 sinon
int verifier_grille(const unsigned **mat, const unsigned **eff,unsigned x,unsigned y,unsigned v){
//...
}
// Tester si la grille est remplie
int grille_terminee(const unsigned **mat){
//..
}
// Afficher la grille
void afficher_grille(const unsigned **mat){
//...
}
int main(){
unsigned x,y,v;
unsigned **mat, **eff;
// Allouer mat et eff
while(!grille_terminee(mat)){
afficher_grille(mat);
do{
// Demander x,y,v
scanf("%i",&x);
scanf("%i",&y);
scanf("%i",&v);
}while(! verifier_grille(mat,eff,x,y,v));
mat[x][y] = v;
}
// Desallouer mat et eff
return 0;
}
Maintenant à toi de boucher les trous ;-)
Bonne chance
kilian
Messages postés
8854
Statut
Modérateur
1 526
:-)