begin process at 2008 08 29 04:13:22
1 233 496 membres
37 nouveaux aujourd'hui
14 291 membres club

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 : 2 882

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):"
02 juin 2005 11:20:54 :
fautes d'ortho :p
  • 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

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS