Suite à un post (
http://www.javascriptfr.com/infomsg_TABLEAU-SPIRALE_1039112.aspx ), je me suis penché sur la question du remplissage d'un tableau en spirale :
Imaginons donc un carré de 5*5, cela devrait donner ceci en résultat finale
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
Source / Exemple :
<script language="javascript">
<!--
tableauspirale(5);
function tableauspirale(vartaille){
if (vartaille>1){
var taille=parseInt(vartaille);
var nbr=0;
var damier=new Array(taille);
var nbrcarre = parseInt(taille / 2);
//initialisation du damier
for (var j=0;j<damier.length;j++){damier[j]= new Array(damier.length);}
for (var j=0;j<damier.length;j++)
{
for (var x=0;x<damier[j].length;x++){damier[j][x]=0;}
}
//initialisation des limites
var premiereligne=0;
var dernierecolonne=taille -1 ;
var derniereligne=taille - 1;
var premierecolonne=0;
for(var startcarre=1;startcarre<nbrcarre+1;startcarre++){
//construction de la première ligne
for(var j=premiereligne;j<dernierecolonne;j++)
{
damier[premiereligne][j]=nbr;
nbr++;
}
//affichage
affichagetableau(damier);
//construction de la dernière colonne
for(var j=premiereligne;j<derniereligne;j++)
{
damier[j][dernierecolonne]=nbr;
nbr++;
}
//affichage
affichagetableau(damier);
//construction de la dernière ligne
for(var j=dernierecolonne;j>premierecolonne;j--)
{
damier[derniereligne][j]=nbr;
nbr++;
}
//affichage
affichagetableau(damier);
//construction de la première colonne
for(var j=derniereligne;j>premiereligne;j--)
{
damier[j][premierecolonne]=nbr;
nbr++;
}
//affichage
affichagetableau(damier);
//incrementation pour donner les limites du carre suivant
premiereligne += 1;
dernierecolonne -= 1;
derniereligne -= 1;
premierecolonne += 1;
}
//si la taille du carré est un nombre impaire alors on remplit le centre du tableau avec la dernière valeur de nbr
if (taille%2){
damier[premiereligne][premiereligne]=nbr;
//affichage
affichagetableau(damier);
}
}
}
function affichagetableau(damier){
//affichage
document.write("<table>");
for (var j=0;j<damier.length;j++){
document.write("<tr>");
for (var x=0;x<damier[j].length;x++){
document.write("<td>");
document.write(damier[j][x]);
document.write("</td>");
}
document.write("</tr>");
}
document.write("</table>");
document.write("<br>");
}
//-->
</script>
Conclusion :
Code à placer dans le body.
J'ai placé la fonction d'affichage du tableau tout au long du procédé pour que vous puissiez voir les différentes étapes de construction !
Attention évitez les grandes tailles de carré si vous laissez l'affichage actif.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.