Vous êtes sur la page 1sur 5

Voici j'ai trois fonctions diffrentes en Java (sudoku) Je dois les expliquer et donner les algorithmes, j'ai essay

de trouver des rponses 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 chiff re) { 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; } re : Expliqu Fonctions Algorithmes en Java (sudoku)#msg3668443#msg3668443 Post le 12-07-11 01:24 Post par Profil Luna_ Bonjour ! Je vais t'aider pour la premire fonction. Tu remarques tout d'abord que la fonction te renvoit un boolean, c'est dire: vra i ou faux. Tu sais donc que cette fonction va tester une condition. Elle prend en entre un chiffre (celui qu'on va tester probablement), un vecteur ( quadran) et un tableau (tab). Premire ligne : on initialise les variables qui seront utilises dans la fonction. Premirement, c'est la variable test, qui renvoit un boolen. 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'entre 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 entre 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 infrieur 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 infrieur lignefin, et qu'on entre dans la boucle, on tombe alors sur une deuxime boucle for ! cette boucle fait exactement la mme chose que la premire, mais en testant l'ent ier colonne, qui est initialis colonnedebut. On parcourra alors chacun des entier s colonne jusqu' ce qu'il soit suprieur colonnefin, et cela avant de passer une de uxime fois dans la premire boucle for. petite illustration si tu as du mal voir tout a : imaginons que dbutligne = 1 et finligne = 3 dbutcolonne = 1 et fin colonne = 3 les entres dans les boucles se feront comme a: boucle for 1 : ligne = 1 boucle for 2 : colonne boucle for 3 : colonne boucle for 4 : colonne boucle for 2 : ligne = 2 boucle for 2 : colonne = 1 = 2 = 3 = 1

boucle for 3 : colonne boucle for 4 : colonne boucle for 3 : ligne = 3 boucle for 2 : colonne boucle for 3 : colonne boucle for 4 : colonne

= 2 = 3 = 1 = 2 = 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 prsent, tud ions 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 reu en entre, en le compar ant avec des lments du tableau reu en entre, qui est trs certainement la map du sudok u ! 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 modifis chaque passage dans la boucle. On veut donc savoir si le chiffre est gal certains lments spcifiques du tableau. On parcourt mme plusieurs lign es et plusieurs colonnes de ce tableau ! (peut-tre mme toutes, cela dpend des valeu rs donnes dans quadran, et ces valeurs sont peut-tre justifies dans les autres fonc tions, il faudra voir). ensuite, si on trouve qu'un lment test dans le tableau est gal chiffre, on modifie t est en lui attribuant la valeur false, puis on sort du programme (break). si aucune valeur teste n'est gale chiffre, alors on sort des boucles tranquillemen t 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 diffrentes lignes et colonnes de la map d u Sudoku. A quoi sert cette fonction dans le programme Sudoku ? Pour le savoir, il faut tudier prsent les deux fonctions suivantes ! Je te laisse donc le loisir d e continuer tudier mthodiquement chacune des deux autres fonctions. Une fois les t rois tudies, tu comprendras ce qui les lie, et donc la globalit du programme Sudoku . Certains points de cette fonction te paratront mme certainement plus clairs. Si tu bloques sur quelque chose, n'hsite pas Expliqu Fonctions Algorithmes en Java (sudoku)#msg3668548#msg3668548 Post le 12-07 -11 14:55 Post par Profil janou789 Bonjour, Merci pour tes informations , voici ce que j'ai essay de faire peux-tu continuer m'aider. Pour la deuxime fonction: Ici aussi la fonction renvoit un boolean. Cette fonction va tester une condit ion en priv. Elle prend en entre un chiffre un vecteur (quadran). Premire ligne : on initialise les variables qui seront utilises 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 en trer dans la boucle du if c'est vrifier 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 troisime fonction je ne comprend pas le d g, dans cherchedg Merci pour votre aide re : Expliqu Fonctions Algorithmes en Java (sudoku)#msg3668581#msg3668581 Post le 12-07-11 16:55 Post par Profil Luna_ Bonjour, Ce que tu as cris sur la deuxime fonction est juste. Je pense que tu devrais tout de mme prciser ce qu'elle fait. As-tu compris ce qu'elle faisait concrtement? D'aprs toi, quelle est la diffrence entre la premire et la deuxime fonction? Je vais t'expliquer un peu la troisime fonction. Comme tu l'as compris, elle renvoit aussi un boolan, donc teste une condition, to ujours sur le "chiffre" pris en entre. Sauf qu' la diffrence de la premire fonction, il n'y a qu'une boucle for, et non de ux. 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 : re : Expliqu Fonctions Algorithmes en Java (sudoku)#msg3668587#msg3668587 Post le 12-07-11 17:12 Post par Profil Luna_ ligne 1: ligne 2: ligne 3: a d g col 1 b e h col 2 c f i col 3

avec une double boucle (comme la 1re fonction), on slectionne d'abord la ligne 1, puis on la parcourt en suivant les colonnes : c olonne 1 (a) puis colonne 2 (b) puis colonne 3 (c) ensuite, comme cest une double boucle, on ajoute 1 "ligne", ce qui nous fait par courir 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 nu mro 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 vrifie 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 intressons-nous aux bouc les 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 prcis dans le progr amme, or elle n'est initialise 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, i l ne faut pas que "index" soit suprieur 3, sinon on continue le programme dans le vide, et il ne s'arrtera jamais ! voil quoi sert ce premier if : si on n'a pas atteint la dernire 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 premire fonction : il compare chiffre et un lment du tableau. si c 'est le mme, on retourne faux, sinon on continue le programme. Ensuite dans le programme, on tombe sur un autre double if : a fait exactement la mme chose, sauf que cette fois, on parcourt les colonnes gauc he de "colonne". le premier if sert dire qu'on s'arrte la premire colonne (car les colonnes -1, -2, -3 ... a n'existe pas) et le deuxime compare chiffre et un lment d u tableau.

Voil, en conclusion, la troisime fonction compare aussi chiffre des lments du tablea u, mais en les comparants avec une seule ligne. Si tu n'as pas compris quelque chose n'hsite pas Expliqu Fonctions Algorithmes en Java (sudoku)#msg3668611#msg3668611 Post le 12-07 -11 19:01 Post par Profil janou789 Merci beaucoup des informations c'est beaucoup plus clair Et Pour la deuxime fonction je crois ce quelle fait c'est qu'elle appelle la fonc tion 1 Merci