John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009
-
12 mars 2007 à 18:52
cs_Lassal
Messages postés27Date d'inscriptionjeudi 7 novembre 2002StatutMembreDernière intervention21 mai 2008
-
14 mars 2007 à 09:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Lassal
Messages postés27Date d'inscriptionjeudi 7 novembre 2002StatutMembreDernière intervention21 mai 2008 14 mars 2007 à 09:58
Que de variable... Pas super optimisé tout celà.
Et l'indentation, au secours.
Faudrait voir à faire un effort quand même par respect pour ceux qui regardent les sources.
Un minimum de commentaires, une indentation lisible.
Après en ce qui concerne le code, il y a pas mal de chose à faire pour faire un truc plus propre, mais justement ce site est aussi là pour ça, donc pas de souci de ce côté là.
Mais s'il te plait, fais un effort pour diffuser des sources plus lisible car c'est nawak là.
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 12 mars 2007 à 23:37
hé bien voila le voila notre sudoku , merci Foxi ;)
hé mihoubi ctrl+c, ctrl+v :)
Ciao
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 12 mars 2007 à 21:34
tu devrait commencer ici :
borland delphi style guide, ou tu vas apprendre a ecrire ton code correctement :
pour le reste, je ne saurai que trop te conseiller d'etudier d'autres sources, de lire des exemples, de faire des recherches sur le net pour apprendre les mecanismes et algorithmes.
deja, on peu voir que tu t'as totalement mis a coté de la plaque, puisqu'a aucun moment
on ne vois ceci :
TSudoku = array[0..8,0..8] of ...
qui est la base meme d'un jeu de sudoku (une grille 9,9)
ensuite, il est interdit de placer un goto dans une boucle qui renvois a l'exterieur de cette boucle. c'est inconcevable de voir cela.
de plus, 51 variables c'est trop! tableau tableau tableau et tableau!
plus simple a manipuler, plus propre.
logiquement un sudoku se presente donc comme cela :
{ la grille de sudoku }
type
TSudoku = array[0..8,0..8] of byte;
{ notre grille de jeu }
var
Sdk : TSudoku;
{ des grilles pour verifier le bon fonctionnement de nos fonctions de test }
const
{ Convertion du boolean }
BTC : array[boolean] of string = ('La grille est fausse','La grille est bonne');
{ Grille de test bonne }
SdkCheckTestTrue : TSudoku = ((1,2,3,4,5,6,7,8,9),
(7,8,9,1,2,3,4,5,6),
(4,5,6,7,8,9,1,2,3),
(9,1,2,3,4,5,6,7,8),
(6,7,8,9,1,2,3,4,5),
(3,4,5,6,7,8,9,1,2),
(8,9,1,2,3,4,5,6,7),
(5,6,7,8,9,1,2,3,4),
(2,3,4,5,6,7,8,9,1));
{ Grille de test fausse }
SdkCheckTestFalse : TSudoku = ((1,2,3,4,5,6,7,8,9),
(9,1,2,3,4,5,6,7,8),
(8,9,1,2,3,4,5,6,7),
(7,8,9,1,2,3,4,5,6),
(6,7,8,9,1,2,3,4,5),
(5,6,7,8,9,1,2,3,4),
(4,5,6,7,8,9,1,2,3),
(3,4,5,6,7,8,9,1,2),
(2,3,4,5,6,7,8,9,1));
{ verifie que la ligne a l'index donné comporte bien 1 a 9 sans doublons }
function CheckRow(const Sudoku : TSudoku; const index : integer) : boolean;
var N : integer;
S : set of byte;
begin
S := [];
result := true;
for N := 0 to 8 do
begin
result := result and (not (Sudoku[index,N] in S));
if result then
S := S + [Sudoku[index,N]]
else
exit;
end;
end;
{ verifie que la colone a l'index donné comporte bien 1 a 9 sans doublons }
function CheckCol(const Sudoku : TSudoku; const index : integer) : boolean;
var N : integer;
S : set of byte;
begin
S := [];
result := true;
for N := 0 to 8 do
begin
result := result and (not (Sudoku[N,Index] in S));
if result then
S := S + [Sudoku[N,Index]]
else
exit;
end;
end;
{ verifie que le bloc 3,3 a l'index donné comporte bien 1 a 9 sans doublons }
function CheckCub(const Sudoku : TSudoku; const index : integer) : boolean;
var X,Y : integer;
S : set of byte;
const
ITX : array[0..8] of byte = (0,3,6,0,3,6,0,3,6);
ITY : array[0..8] of byte = (0,0,0,3,3,3,6,6,6);
begin
S := [];
result := true;
for Y := ITY[Index] to ITY[Index]+2 do
for X := ITX[Index] to ITX[Index]+2 do
begin
result := result and (not (Sudoku[Y,X] in S));
if result then
S := S + [Sudoku[Y,X]]
else
exit;
end;
end;
{ Test des fonction avec la grille bonne }
procedure TForm1.Button1Click(Sender: TObject);
var N : integer;
B : boolean;
begin
B := true;
for N := 0 to 8 do
begin
B := B and CheckCol(SdkCheckTestTrue,N)
and CheckRow(SdkCheckTestTrue,N)
and CheckCub(SdkCheckTestTrue,N);
if not B then
break;
end;
Button1.Caption := BTC[B];
end;
{ test des fonction avec la grille fausse }
procedure TForm1.Button2Click(Sender: TObject);
var N : integer;
B : boolean;
begin
B := true;
for N := 0 to 8 do
begin
B := B and CheckCol(SdkCheckTestFalse,N)
and CheckRow(SdkCheckTestFalse,N)
and CheckCub(SdkCheckTestFalse,N);
if not B then
break;
end;
Button2.Caption := BTC[B];
end;
voila comment doit fonctionner un sudoku ...
John Dogget
Messages postés384Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention 7 mai 2009 12 mars 2007 à 18:52
Le sukudo, ça existe pas, le sudoku par contre ...
Ensuite, à 2/3 bidouilles près, c'est exactement la même source que celle qui a été retiré du site.
Donc c'est toujours aussi maladroit :
- boucle à n'en plus finir
- structure de données pas adaptés
- l'ecriture du code n'est pas regulière
Il faudrait (simple conseil) :
- étudier mieux tes algos pour eviter d'utiliser des "goto" ou des boucles sur 20 lignes
- choisir des structures de données adaptés à ce que tu fais, dans ce cas l'utilisation de tableaux serait judicieuse (ça evite d'avoir des tonnes de variables, ça simplifie l'écriture du code etc)
- tu dois absolument te trouver une manière d'ecrire ton code proprement et regulièrement, si tu décides par exemple de l'indenter, tu devra le faire sur toute ta source et pas sur deux lignes
14 mars 2007 à 09:58
Et l'indentation, au secours.
Faudrait voir à faire un effort quand même par respect pour ceux qui regardent les sources.
Un minimum de commentaires, une indentation lisible.
Après en ce qui concerne le code, il y a pas mal de chose à faire pour faire un truc plus propre, mais justement ce site est aussi là pour ça, donc pas de souci de ce côté là.
Mais s'il te plait, fais un effort pour diffuser des sources plus lisible car c'est nawak là.
12 mars 2007 à 23:37
hé mihoubi ctrl+c, ctrl+v :)
Ciao
12 mars 2007 à 21:34
borland delphi style guide, ou tu vas apprendre a ecrire ton code correctement :
http://dn.codegear.com/article/10280
pour le reste, je ne saurai que trop te conseiller d'etudier d'autres sources, de lire des exemples, de faire des recherches sur le net pour apprendre les mecanismes et algorithmes.
deja, on peu voir que tu t'as totalement mis a coté de la plaque, puisqu'a aucun moment
on ne vois ceci :
TSudoku = array[0..8,0..8] of ...
qui est la base meme d'un jeu de sudoku (une grille 9,9)
ensuite, il est interdit de placer un goto dans une boucle qui renvois a l'exterieur de cette boucle. c'est inconcevable de voir cela.
de plus, 51 variables c'est trop! tableau tableau tableau et tableau!
plus simple a manipuler, plus propre.
logiquement un sudoku se presente donc comme cela :
{ la grille de sudoku }
type
TSudoku = array[0..8,0..8] of byte;
{ notre grille de jeu }
var
Sdk : TSudoku;
{ des grilles pour verifier le bon fonctionnement de nos fonctions de test }
const
{ Convertion du boolean }
BTC : array[boolean] of string = ('La grille est fausse','La grille est bonne');
{ Grille de test bonne }
SdkCheckTestTrue : TSudoku = ((1,2,3,4,5,6,7,8,9),
(7,8,9,1,2,3,4,5,6),
(4,5,6,7,8,9,1,2,3),
(9,1,2,3,4,5,6,7,8),
(6,7,8,9,1,2,3,4,5),
(3,4,5,6,7,8,9,1,2),
(8,9,1,2,3,4,5,6,7),
(5,6,7,8,9,1,2,3,4),
(2,3,4,5,6,7,8,9,1));
{ Grille de test fausse }
SdkCheckTestFalse : TSudoku = ((1,2,3,4,5,6,7,8,9),
(9,1,2,3,4,5,6,7,8),
(8,9,1,2,3,4,5,6,7),
(7,8,9,1,2,3,4,5,6),
(6,7,8,9,1,2,3,4,5),
(5,6,7,8,9,1,2,3,4),
(4,5,6,7,8,9,1,2,3),
(3,4,5,6,7,8,9,1,2),
(2,3,4,5,6,7,8,9,1));
{ verifie que la ligne a l'index donné comporte bien 1 a 9 sans doublons }
function CheckRow(const Sudoku : TSudoku; const index : integer) : boolean;
var N : integer;
S : set of byte;
begin
S := [];
result := true;
for N := 0 to 8 do
begin
result := result and (not (Sudoku[index,N] in S));
if result then
S := S + [Sudoku[index,N]]
else
exit;
end;
end;
{ verifie que la colone a l'index donné comporte bien 1 a 9 sans doublons }
function CheckCol(const Sudoku : TSudoku; const index : integer) : boolean;
var N : integer;
S : set of byte;
begin
S := [];
result := true;
for N := 0 to 8 do
begin
result := result and (not (Sudoku[N,Index] in S));
if result then
S := S + [Sudoku[N,Index]]
else
exit;
end;
end;
{ verifie que le bloc 3,3 a l'index donné comporte bien 1 a 9 sans doublons }
function CheckCub(const Sudoku : TSudoku; const index : integer) : boolean;
var X,Y : integer;
S : set of byte;
const
ITX : array[0..8] of byte = (0,3,6,0,3,6,0,3,6);
ITY : array[0..8] of byte = (0,0,0,3,3,3,6,6,6);
begin
S := [];
result := true;
for Y := ITY[Index] to ITY[Index]+2 do
for X := ITX[Index] to ITX[Index]+2 do
begin
result := result and (not (Sudoku[Y,X] in S));
if result then
S := S + [Sudoku[Y,X]]
else
exit;
end;
end;
{ Test des fonction avec la grille bonne }
procedure TForm1.Button1Click(Sender: TObject);
var N : integer;
B : boolean;
begin
B := true;
for N := 0 to 8 do
begin
B := B and CheckCol(SdkCheckTestTrue,N)
and CheckRow(SdkCheckTestTrue,N)
and CheckCub(SdkCheckTestTrue,N);
if not B then
break;
end;
Button1.Caption := BTC[B];
end;
{ test des fonction avec la grille fausse }
procedure TForm1.Button2Click(Sender: TObject);
var N : integer;
B : boolean;
begin
B := true;
for N := 0 to 8 do
begin
B := B and CheckCol(SdkCheckTestFalse,N)
and CheckRow(SdkCheckTestFalse,N)
and CheckCub(SdkCheckTestFalse,N);
if not B then
break;
end;
Button2.Caption := BTC[B];
end;
voila comment doit fonctionner un sudoku ...
12 mars 2007 à 18:52
Ensuite, à 2/3 bidouilles près, c'est exactement la même source que celle qui a été retiré du site.
Donc c'est toujours aussi maladroit :
- boucle à n'en plus finir
- structure de données pas adaptés
- l'ecriture du code n'est pas regulière
Il faudrait (simple conseil) :
- étudier mieux tes algos pour eviter d'utiliser des "goto" ou des boucles sur 20 lignes
- choisir des structures de données adaptés à ce que tu fais, dans ce cas l'utilisation de tableaux serait judicieuse (ça evite d'avoir des tonnes de variables, ça simplifie l'écriture du code etc)
- tu dois absolument te trouver une manière d'ecrire ton code proprement et regulièrement, si tu décides par exemple de l'indenter, tu devra le faire sur toute ta source et pas sur deux lignes