Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ALGO SIMPLE : REMPLISSAGE D'UN TABLEAU EN SPIRALE


Information sur la source

Catégorie :Math & Algorithmes Classé sous : algorithme, remplissage, tableau, spirale Niveau : Débutant Date de création : 02/06/2005 Date de mise à jour : 02/06/2005 11:20:54 Vu : 3 506

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Il rempli 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

ou encore en 10x10 :

0  1  2  3  4  5  6  7  8  9
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18

(erf là sa rend mal c'est pas bien presenter en colonnes, y prend pas en compte tt les espaces (que le prog met automatiquement pour faire une belle presentation en colonne :p)
 

Source

  • ##
  • #Remplissage d'un tableau en spirale
  • ##
  • size=(10,10)
  • #construction du tableau
  • tab=[]
  • for i in range(size[0]):
  • tab.append([])
  • for j in range(size[1]):
  • tab[-1].append(0)
  • x=0
  • y=0
  • lh=0 #ligne haut
  • lb=0 #ligne bas
  • hd=0 #hauteur droite
  • hl=0 #hauteau gauche
  • sens='d'
  • for k in range(size[0]*size[1]):
  • if(size[0]-x-hd>1 and sens=='d') :
  • tab[x][y]=k
  • x+=1
  • elif(sens=='b' and y<size[1]-lb) :
  • tab[x][y]=k
  • y+=1
  • elif(sens=='g' and x>=hl):
  • tab[x][y]=k
  • x-=1
  • elif(sens=='h' and y>=lh):
  • tab[x][y]=k
  • y-=1
  • else :
  • if(sens=='d'):
  • sens='b'
  • lh+=1
  • tab[x][y]=k
  • y+=1
  • elif(sens=='b') :
  • sens='g'
  • hd+=1
  • tab[x-1][y-1]=k
  • y=size[1]-lb-1
  • x=size[0]-hd-2
  • elif(sens=='g'):
  • sens='h'
  • lb+=1
  • y=size[1]-lb-1
  • x=hl
  • tab[x][y]=k
  • y-=1
  • elif(sens=='h'):
  • sens='d'
  • hl+=1
  • tab[x+1][lh]=k
  • x+=2
  • y=lh
  • tabpr=''
  • for i in range(size[1]):
  • for x in range(size[0]):
  • num=str(tab[x][i])
  • #juste pour que le tableau saffiche correctement :p
  • if(len(num)<len(str(size[0]*size[1]-1))):
  • num=((len(str(size[0]*size[1]-1))-len(num))*' ')+num
  • ###
  • tabpr+=num+' '
  • tabpr+='\n'
  • print tabpr
##
#Remplissage d'un tableau en spirale
##

size=(10,10)
#construction du tableau
tab=[]
for i in range(size[0]):
    tab.append([])
    for j in range(size[1]):
        tab[-1].append(0)

x=0
y=0
lh=0 #ligne haut
lb=0 #ligne bas
hd=0 #hauteur droite
hl=0 #hauteau gauche
sens='d'
for k in range(size[0]*size[1]):
    if(size[0]-x-hd>1 and sens=='d') :
        tab[x][y]=k
        x+=1
    elif(sens=='b' and y<size[1]-lb) :
        tab[x][y]=k
        y+=1
    elif(sens=='g' and x>=hl):
        tab[x][y]=k
        x-=1
    elif(sens=='h' and y>=lh):
        tab[x][y]=k
        y-=1
    else :
        if(sens=='d'):
            sens='b'
            lh+=1
            tab[x][y]=k
            y+=1
        elif(sens=='b') :
            sens='g'
            hd+=1
            tab[x-1][y-1]=k
            y=size[1]-lb-1
            x=size[0]-hd-2
        elif(sens=='g'):
            sens='h'
            lb+=1
            y=size[1]-lb-1
            x=hl
            tab[x][y]=k
            y-=1
        elif(sens=='h'):
            sens='d'
            hl+=1
            tab[x+1][lh]=k
            x+=2
            y=lh
    
tabpr=''
for i in range(size[1]):
    for x in range(size[0]):
        num=str(tab[x][i])
        #juste pour que le tableau saffiche correctement :p
        if(len(num)<len(str(size[0]*size[1]-1))):
            num=((len(str(size[0]*size[1]-1))-len(num))*' ')+num
        ###
        tabpr+=num+' '
    tabpr+='\n'
print tabpr

Conclusion

Voilà, je sais que c'est simple mais c'etait pour voir la diff de nbre de ligne avec un code en c que javais trouver :
http://forum.hardware.fr/hardwarefr/Programmation/Jte-defi-remplir-tableau-sujet-62471-1.htm

ps : si vous souhaiter avoir un zero au centre y faut juste jouer avec la boucle "for k in range(size[0]*size[1]):" :
genre pour commencer à un et avoir un zero au centre ça donne "for k in range(1, size[0]*size[1]):" et pour commencer à zero et avoir un zero au centre ça donne "for k in range(size[0]*size[1]-1):"
 

Historique

02 juin 2005 11:20:54 :
fautes d'ortho :p

Commentaires et avis

signaler à un administrateur
Commentaire de econs le 10/06/2005 10:12:15 administrateur CS

Effectivement, c'est bien plus court que l'exemple proposé en C.
Reste à voir si cet exemple était optimisé ...
En tous cas, ton code a l'air propre. Bien joué !

signaler à un administrateur
Commentaire de econs le 10/06/2005 10:17:23 administrateur CS

En fait, j'avais pas bien lu l'exemple en C++.
Comme il a fait un remplissage 'générique' de tableaux, c'est forcément plus long. Par contre, en un seul code, il implémente plusieurs solutions. Du coup, c'est un peu plus long.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

PETIT TABLEAU RECAPITULATIF DES ACTION PYTHON [ par raptux ] Je me suis lancer depuis peu dans le python.J'aurait voulu savoir si il existe un petit tableau recapitulatif ,de toute les action que l'on peut ecrir conversion tableau en liste [ par skpad ] bonjour,je dois concevoir un programme exploitant des listes en pyston, or pour cela je dois préalablement convertir des tableaux de 1et 2 dimensions Pour ne pas planter [ par franckysnow91 ] Bonjour à tous,Je programme un algorithme sous python et malheureusement, je fais souvent des boucles perverses et je ne réussi pas à m'en sortir. Je [WxPython] Tableau wxGrid [ par Jeannine123 ] Bonjour a tous ;)Alors voila je vous explique mon problème, j'ai créé un tableau avec la classe (wx.Grid) de WxPython.J'importe dans mon tableau des d Problème avec GTK [ par gaillus ] Bonjour,j'utilise python avec GTK.Voici mon pb:j'ai une fonction "init_tableau" dans laquelle j'instancie une classe "tablo" qui hérite de gtk.Dialog.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.