Tableau spirale

Utilisateur anonyme - 23 nov. 2007 à 19:27
 Utilisateur anonyme - 25 nov. 2007 à 13:11
Es ce que quelqu'un aurait une idée pour réaliser ce genre de tableau en javascript??? je débute et je n'y arrive pas dutout...

Remplir simplement un tableau au dimension que vous souhaiter en spirale
ex :
5x5 :

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

Rafou.

21 réponses

Utilisateur anonyme
23 nov. 2007 à 19:48
Je vous remercie d'avance pour l'aide que vous me porterez, car en plus je dois le faire pour lundi prochain et sa fait déja 3jours que j'essaie mais je n'y arrive pas.

Rafou.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
23 nov. 2007 à 20:50
Bonjour,

si c'est un devoir, je pense pas que ce soit à nous de t'apporter la solution .
Ton problème c'est quoi, trouver l'algorithme ou créer le tableau ?
De plus 5 x 5 ça fait 25 et pas 24 !
1   2   3   4   5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
23 nov. 2007 à 21:00
Oups, sorry j'avais pas vu que tu avais commencé à 0, autant pour moi !
Sinon une petite recherche sur http://search.codes-sources.com et tu devrais au moins trouver l'algo nécessaire.

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
23 nov. 2007 à 21:23
le probleme que j'ai c'est de faire l'algorithme, le tableau c'est bon :)

je ne vois pas comment faire pour mettre en place la spirale

Rafou.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
24 nov. 2007 à 00:10
commence par le début de la spirale, analyse le mouvement, place des repères, la logique viendra d'elle même.
Tu as une base, tu sais que c'est un carré et tu en connais la taille !

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
24 nov. 2007 à 12:42
je suis d'accord avec toi, j'ai fais sa sur papier mais le problème c'est que sa doit etre trop simple et je ne trouve pas la logique pour en faire un bon algorithme.....

Rafou.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
24 nov. 2007 à 12:47
commence par essayer de le faire comme tu penses, l'optimisation ça vient après.
Ce que je peux te dire c'est qu'il y a plusieurs possibilités . 

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
24 nov. 2007 à 13:06
Oui je suis d'accord avec toi, je me doute bien qu'il y a plusierus possibilités, mais la a chaque fois que je fais mon tableau sa me fait un tableau dans l'ordre et pas commme il le faudrait. je ne vois pas comment lui faire changer le sens de remplissage...

Rafou.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
24 nov. 2007 à 13:44
En fait je crois que tu te focalises trop sur le contenu et pas sur la méthode de remplissage  !
Observe bien ton carré :
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

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

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

La seule chose que fait l'algo c'est parcourir le pérmètre d'un carré dont tu connais la taille et qui contient lui même un autre carré, etc...
1 . remplir la première ligne
2. remplir la dernière colonne
3. remplir la dernière ligne
4. remplir la première colonne
5. Passez au carré suivant.

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
24 nov. 2007 à 14:47
Alors la je suis tout a fait d'accord avec toi!!!J'ai tout d'abord résonné de la même façon et j'ai réussi a remplir la première ligne (facile à mettre en place) mais le soucis que j'ai, c'est que je ne sais pas comment faire en javascript pour dire que je me place dans la dernière colone du tableau.

Pour le moment j'arrive à un tableau comme celui-ci:

1   2   3   4
5   6   7   8
9   10 11 12
13 14 15 16

voici mon code javascript:

Tableau en spyrale:

<script language="javascript"> <!--
       
      var x=0;
      var y=0;
      var nbr=0;
      var damier;
      damier=new Array(16);
      
      for(var j=0;j<4;j++)
      {
       
       for(x=0;x<4;x++)
       {
        
        damier[x]=nbr;
        document.write(damier[x])
        nbr++;


       }
       document.write("
")
               
       
      }
       
      //-->
     </script>

ps: pour les choses qui peuvent paraitre simple je me complique trop la tete...


Rafou.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
24 nov. 2007 à 15:06
ben voilà tu commences à te rapprocher!
Ton problème vient du fait que tu imbriques les boucles for.
Donc si je reviens sur l'approche :
1. une boucle for qui parcours la ligne du haut.
2. une boucle for qui parcours la colonne de droite.
3. une boucle for qui parcours la ligne du bas.
4. une boucle for qui parcous la colonne de gauche.

Essaye déjà de remplir les bords du premier carré, après tu verras comment attaqué le carré suivant et ainsi de suite !

PS: attention ton tableau damier n'a qu'une seule dimension, hors il s'agit d'un tableau à 2 dimensions.

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
24 nov. 2007 à 15:14
Si je veux un tableau à 16 cases comme précédemment, es ce qu'il faut que je procède comme cela??

for( var i=0;i<16;i++)  damier[i]=new Array(16);

Cependant moi j'ai seulement besoin d'un tableau à 16 cases, je ne vois pas pourquoi il me faut 2 dimensions...

Et le problème que j'ai c'est que je ne comprend pas comment dire d'allé d'une ligne a une colonne.... ( c'est pas facile)

mais je suis d'accord avec ce que tu viens de me dire, sur le fait qu'il faut quatre boucle for pour les diverses actions

Rafou.
0
Utilisateur anonyme
24 nov. 2007 à 15:26
Je viens de remanier mon code:

Tableau en spyrale:

                 <script language="javascript"> <!--
       
      var x=0;
      var y=0;
      var nbr=0;
      var bcl=0;
      var damier;
      damier=new Array(16);
      
      for(var j=0;j<16;j++)
      {
       
       damier[j]=new Array(16);
       damier[j]=nbr;
       nbr++;
       
       if(bcl==4)
       {
        document.write("
");
        bcl=0;
       }
       document.write(damier[j]);
       bcl++;
      }
       
      //-->
     </script>

Jusque la sa va, j'ai mon tableau rempli de 0 à 15 avec 16 valeurs. maintenant faut que j'essai de comprendre, comment faire pour passer d'une ligne a une colonne


Rafou.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
24 nov. 2007 à 15:50
Actuellement tu as un tableau à une dimention, c-à-d une ligne et x colonne.
Hors un damier à x ligne et y colonne.

var damier=new Array(4);
//initialisation
for(var j=0;j<4;j++){damier[j]= new Array(4);}
for(var j=0;j<4;j++)
 {
 for(x=0;x<4;x++){damier[j][x]=0;}
 }
//affichage  
for(var j=0;j<4;j++)
 {
 for(x=0;x<4;x++){document.write(damier[j][x]);}
    document.write("
");
 }
 là maintenant j'ai un tableau à deux dimension !
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
24 nov. 2007 à 16:01
Pour être plus propre tu peux même écrire :

function tableauspirale(taille){
   var damier=new Array(taille);
   //initialisation
   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;}
    }
   ......
}

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
24 nov. 2007 à 23:45
Je suis désolé mais j'été parti cet après midi. Alors la je viens de faire des modifications et j'en suis la:

<script language="javascript"> <!--
    
       var nbr=0;
      var damier=new Array(4);
      
      //Initialisation
      for(var i=0;i<4;i++)
      {
       damier[i]=new Array(4);
      }
      
      for(var i=0;i<4;i++)
      {
       for(var x=0;x<4;x++)
       {
        damier[i][x]=nbr;
        nbr++;
       }
      }
      
      //Affichage
      for(i=0;i<4;i++)
      {
       for(x=0;x<4;x++)
       {
        document.write(damier[i][x]);
       }
       document.write("
");
      }
      
      //-->
     </script>

De même je suis toujours bloqué sur le fait de faire changer le sens de rempliassage du tableau... je ne vois pas comment procéder au test necessaire a l'elaboration de se remplissage...

Rafou.
0
Utilisateur anonyme
25 nov. 2007 à 00:33
Voila je viens de reussi a faire sa et sa fonctionne mais le probleme qui survient maintenant est que je n'arrive pas a optimiser ce code....:

<script language="javascript"> <!--
    
       var chiffd=3;
      var chiffg=9;
      var cold=3;
      var colg=0;
     
      var lh=0;
      var lb=3;
      var nbh=0;
      var nbb=6;
      var nbmh=12;
      var nbmb=14;
      var lmh=1;
      var lmb=2;
      var damier=new Array(4);
      
      //Initialisation
      for(var i=0;i<4;i++)
      {
       damier[i]=new Array(4);
      }
     /****************Algorithme de remplissage**********************/
      for(var j=0;j<3;j++)
      {
       damier[lh][j]=nbh;
       nbh++;
      }
     
      for(i=0;i<3;i++)
      {
       damier[i][cold]=chiffd;
       chiffd++;
      }
      
      for(j=3;j>0;j--)
      {
       damier[lb][j]=nbb;
       nbb++;
      }
      
      for(i=3;i>0;i--)
      {
       damier[i][colg]=chiffg;
       chiffg++;
      }
      
      for(j=1;j<3;j++)
      {
       damier[lmh][j]=nbmh;
       nbmh++;
      }
      for(i=2;i>0;i--)
      {
       damier[lmb][i]=nbmb;
       nbmb++;
      }
     
      
      //Affichage
      for(i=0;i<4;i++)
      {
       for(x=0;x<4;x++)
       {
        document.write(damier[i][x]);
       }
       document.write("
");
      }
      
      //-->
     </script>

Es ce que quelqu'un aurait une idée pour m'aider à l'optimisation de ce code javascript???

Merci d'avance pour l'aide que vous me porterez
Rafou.
0
Utilisateur anonyme
25 nov. 2007 à 00:36
J'aimerai faire en sorte qu'avec ce code je puisse traiter n'importe quelle dimension de tableau avec n cases tout en tenant compte des sens de rotation car la je n'y arrive pas

Rafou.
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
25 nov. 2007 à 11:34
Voilà tu y es presque, maintenant tu dois remplacer les valeurs constantes par des valeurs dynamique en fonction de la taille du carré, si tu observes bien les constantes tu verras qu'il y a une logique de changement à chaque tour de ton carré.
Tu dois également limité ton algo à un seul tour du carré et faire une boucle globale qui va faire le tour de ton carré autant de fois qu'il y a de carré.
Je ne comprend pas pourquoi tu utilises plusieurs compteurs, un seul suffit, il sera incrémenté au fur et à mesure de l'avancement.

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
Utilisateur anonyme
25 nov. 2007 à 12:09
Je vois ce que tu veux dire mais je n'arrive pas à le faire....

Rafou.
0
Rejoignez-nous