Help,,sudoku!!

crénios Messages postés 1 Statut Membre -  
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....
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

mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
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 :
#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
1
kilian Messages postés 8854 Statut Modérateur 1 526
 
:-)
0