Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Expliqué Fonctions Algorithmes en Java (sudoku)

Posté par
janou789
10-07-11 à 15:01


Voici j'ai trois fonctions différentes en Java (sudoku)
Je dois les expliquer et donner les algorithmes, j'ai essayé de trouver des réponses sur le Web concernant les algorithmes, mais je ne trouve pas ce que je cherche (les infos)
Pouvez-vous m'aider s.v.p.
Je ne sais pas par quoi commencer.


Merci!

Voici les trois fonctions:

1) public boolean chercherchiffrequadran(int chiffre, int[] quadran, int[][] tab){
boolean test=true;

int lignedebut=quadran[0];
int colonnedebut=quadran[1];
int lignefin=quadran[2];
int colonnefin=quadran[3];
//ATTENTION IL Y A EGALITE DANS LES BOUCLES
for(int ligne=lignedebut;ligne<=lignefin;ligne++…
for(int colonne=colonnedebut;colonne<=colonnefin…
//MEME CHIFFRE DANS LE QUADRAN DONC FAUx
if(tab[ligne][colonne]==chiffre){
test=false;
break;
}
}
}


return test;
}


2) private boolean cherchequadran(int ligne, int colonne, int[][] tab, int chiffre) {
int[] quadran=quadran(ligne,colonne);

if(chercherchiffrequadran(chiffre, quadran, tab)){
return true;
}
else{
return false;
}
}


3) private boolean cherchedg(int ligne, int colonne, int[][] tab, int chiffre) {
boolean test=true;

for(int index=0;index<n;index++){
if((colonne+index)<n){

if (tab[ligne][colonne+index]==chiffre){
test=false;
break;}}


if((colonne-index)>=0){
if(tab[ligne][colonne-index]==chif…
test=false;
break;}}
}
return test;
}

Posté par
Luna_
re : Expliqué Fonctions Algorithmes en Java (sudoku) 12-07-11 à 01:24

Bonjour !
Je vais t'aider pour la première fonction.

Tu remarques tout d'abord que la fonction te renvoit un boolean, c'est à dire: vrai ou faux. Tu sais donc que cette fonction va tester une condition.

Elle prend en entrée un chiffre (celui qu'on va tester probablement), un vecteur (quadran) et un tableau (tab).

Première ligne : on initialise les variables qui seront utilisées dans la fonction. Premièrement, c'est la variable test, qui renvoit un booléen. On verra dans la suite de la fonction que c'est cette variable qu'on renverra à la fin, et qu'elle aura changé ou non suivant l'entrée de la fonction dans les boucles ou non.

Il a ensuite l'initialisation de plusieurs variables : lignedebut, colonnedebut, lignefin, colonnefin, qui vont chercher leurs valeurs dans le vecteur quadran, pris en entrée par la fonction.

On a ensuite une double boucle for :
for(int ligne=lignedebut;ligne<=lignefin;ligne++)
   for(int colonne=colonnedebut;colonne<=colonnefin;colonnefin++)
       { ... }

cela veut dire que
1) on part de l'entier ligne, initialisé à lignedebut.
   tant qu'il est inférieur ou égal à lignefin, on entre dans la boucle, sachant qu'à la fin de la boucle, on ajoute 1 à l'entier ligne, puis on recommence.
  
2) si l'entier ligne est effectivement inférieur à lignefin, et qu'on entre dans la boucle, on tombe alors sur une deuxième boucle for !
   cette boucle fait exactement la même chose que la première, mais en testant l'entier colonne, qui est initialisé à colonnedebut. On parcourra alors chacun des entiers colonne jusqu'à ce qu'il soit supérieur à colonnefin, et cela avant de passer une deuxième fois dans la première boucle for.

petite illustration si tu as du mal à voir tout ça :

imaginons que débutligne = 1 et finligne = 3
              débutcolonne = 1 et fin colonne = 3

les entrées dans les boucles se feront comme ça:

  boucle for 1 : ligne = 1
       boucle for 2 : colonne = 1
       boucle for 3 : colonne = 2
       boucle for 4 : colonne = 3      
  boucle for 2 : ligne = 2
       boucle for 2 : colonne = 1
       boucle for 3 : colonne = 2
       boucle for 4 : colonne = 3  
  boucle for 3 : ligne = 3
       boucle for 2 : colonne = 1
       boucle for 3 : colonne = 2
       boucle for 4 : colonne = 3        
      
puis les conditions finales sont atteintes, donc on sort des boucles et on passe à la suite !

Ici, nous n'avons vu que les conditions de passage dans ces boucles. A présent, étudions ce qu'on y fait lorsqu'on est dedans ! c'est à dire le bout de code :

if(tab[ligne][colonne]==chiffre)
  {
     test=false;
     break;
  }

c'est dans ce code que l'on va tester le fameux chiffre reçu en entrée, en le comparant avec des éléments du tableau reçu en entrée, qui est très certainement la map du sudoku !

pour entrer dans la boucle du if, on doit avoir la condition tab[ligne][colonne] == chiffre.
souvenons nous que nous sommes dans une double boucle for, ou les entiers ligne et colonne sont modifiés à chaque passage dans la boucle. On veut donc savoir si le chiffre est égal à certains éléments spécifiques du tableau. On parcourt même plusieurs lignes et plusieurs colonnes de ce tableau ! (peut-être même toutes, cela dépend des valeurs données dans quadran, et ces valeurs sont peut-être justifiées dans les autres fonctions, il faudra voir).

ensuite, si on trouve qu'un élément testé dans le tableau est égal à chiffre, on modifie test en lui attribuant la valeur false, puis on sort du programme (break).
si aucune valeur testée n'est égale à chiffre, alors on sort des boucles tranquillement une fois qu'on a tout parcouru, test est toujours égal à vrai, ce qu'on renvoit en sortant de la fonction.

Conclusion : ce test compare un chiffre à différentes lignes et colonnes de la map du Sudoku. A quoi sert cette fonction dans le programme Sudoku ? Pour le savoir, il faut étudier à présent les deux fonctions suivantes ! Je te laisse donc le loisir de continuer à étudier méthodiquement chacune des deux autres fonctions. Une fois les trois étudiées, tu comprendras ce qui les lie, et donc la globalité du programme Sudoku. Certains points de cette fonction te paraîtront même certainement plus clairs.

Si tu bloques sur quelque chose, n'hésite pas

Posté par
janou789
Expliqué Fonctions Algorithmes en Java (sudoku) 12-07-11 à 14:55

Bonjour,
Merci pour tes informations , voici ce que j'ai essayé de faire peux-tu continuer à m'aider.

Pour la deuxième fonction:

Ici aussi  la fonction  renvoit un boolean. Cette  fonction va tester une condition en privé.
Elle prend en entrée un chiffre un vecteur (quadran).
Première ligne : on initialise les variables qui seront utilisées dans la fonction.
Il a ensuite l'initialisation d'une variable : quadran.

On a ensuite if (si) : cela veut dire que ce qu'on y fait lorsqu'on est rendu à entrer dans la boucle du if c'est vérifier le chiffre (s'il est bon) on me retourne à vrai, sinon ont me retourne à faux.

if (chercherchiffrequadran (chiffre,  quadran, tab ) ) {
    return true;
  }
else {
   return false;
  }
Es-ce que j'ai un peu compris?  Pour la troisième fonction je ne comprend pas le dg, dans cherchedg
Merci pour votre aide

Posté par
Luna_
re : Expliqué Fonctions Algorithmes en Java (sudoku) 12-07-11 à 16:55

Bonjour,

Ce que tu as écris sur la deuxième fonction est juste. Je pense que tu devrais tout de même préciser ce qu'elle fait. As-tu compris ce qu'elle faisait concrètement? D'après toi, quelle est la différence entre la première et la deuxième fonction?

Je vais t'expliquer un peu la troisième fonction.
Comme tu l'as compris, elle renvoit aussi un booléan, donc teste une condition, toujours sur le "chiffre" pris en entrée.

Sauf qu'à la différence de la première fonction, il n'y a qu'une boucle for, et non deux. Ce qui fait qu'au lieu de parcourir plusieurs lignes et plusieurs colonnes, ici on ne parcourt qu'une seule ligne et plusieurs colonnes !

illustration :
imaginons le tableau suivant :  

Posté par
Luna_
re : Expliqué Fonctions Algorithmes en Java (sudoku) 12-07-11 à 17:12

ligne 1:   a       b        c
ligne 2:   d       e        f
ligne 3:   g       h        i
         col 1    col 2    col 3

avec une double boucle (comme la 1ère fonction),
on sélectionne d'abord la ligne 1, puis on la parcourt en suivant les colonnes : colonne 1 (a) puis colonne 2 (b) puis colonne 3 (c)
ensuite, comme cest une double boucle, on ajoute 1 à "ligne", ce qui nous fait parcourir la ligne 2, en suivant de nouveau les colonnes : colonne 1 (d) colonne 2 (e) colonne 3 (f).
etc...

ici on n'a qu'une simple boucle : on parcourt seulement les colonnes, pour un numéro de ligne donné.
donc si ligne = 1, on ne va parcourir que : colonne 1 (a) colonne (b) colonne (c).

ce qui signifie que la fonction 3 vérifie si un chiffre donné est égal à un des chiffres d'UNE ligne du tableau ou non.

C'était l'explication globale de la boucle for. Maintenant intéressons-nous aux boucles if contenues dedans :

if((colonne+index)<n)
  {
       if (tab[ligne][colonne+index]==chiffre)
            {
               test=false;
               break;
            }
   }

n est la taille d'une ligne du tableau (ça devrait d'ailleurs être précisé dans le programme, or elle n'est initialisée nulle part, ce qui doit être un oubli).

la condition "colonne + index < n" sert marquer la fin de la ligne.
   par exemple, si colonne = 2, et qu'il n'y a que 5 colonnes dans le tableau, il ne faut pas que "index" soit supérieur à 3, sinon on continue le programme dans le vide, et il ne s'arrêtera jamais !
voilà à quoi sert ce premier if : si on n'a pas atteint la dernière colonne, on rentre dans la boucle if.

une fois dans la boucle, on tombe sur un autre if ! il s'agit d'un if similaire à celui vu dans la première fonction : il compare chiffre et un élément du tableau. si c'est le même, on retourne faux, sinon on continue le programme.

Ensuite dans le programme, on tombe sur un autre double if :
ça fait exactement la même chose, sauf que cette fois, on parcourt les colonnes à gauche de "colonne". le premier if sert à dire qu'on s'arrête à la première colonne (car les colonnes -1, -2, -3 ... ça n'existe pas) et le deuxième compare chiffre et un élément du tableau.



Voilà, en conclusion, la troisième fonction compare aussi chiffre à des éléments du tableau, mais en les comparants avec une seule ligne.

Si tu n'as pas compris quelque chose n'hésite pas

Posté par
janou789
Expliqué Fonctions Algorithmes en Java (sudoku) 12-07-11 à 19:01

Merci beaucoup des informations c'est beaucoup plus clair

Et Pour la deuxième fonction je crois ce quelle fait c'est qu'elle appelle la fonction 1

Merci



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !