Tableau spirale

Signaler
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009
-
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009
-
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

Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

Je vois ce que tu veux dire mais je n'arrive pas à le faire....

Rafou.