Help,,sudoku!!

Fermé
crénios Messages postés 1 Date d'inscription vendredi 12 décembre 2008 Statut Membre Dernière intervention 12 décembre 2008 - 12 déc. 2008 à 00:31
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 12 déc. 2008 à 01:04
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....

1 réponse

mamiemando Messages postés 32298 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 mars 2023 7 575
12 déc. 2008 à 01:02
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 524
12 déc. 2008 à 01:04
:-)
0