begin process at 2010 09 04 19:31:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Math & Algorithmes

 > ALGO SIMPLE : REMPLISSAGE D'UN TABLEAU EN SPIRALE

ALGO SIMPLE : REMPLISSAGE D'UN TABLEAU EN SPIRALE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :4 300

Auteur : Bl0tCh

Ecrire un message privé
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/Programmatio n/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

 Sources du même auteur

Source avec Zip Source avec une capture STEGANOGRAPHIE SUR BITMAP 24 BITS
Source avec Zip COMPRESSION PAR LA METHODE DE HUFFMAN
Source avec Zip PARSEUR/LECTEUR DE FICHIER BITMAP
BINDSHELL BASIQUE
Source avec Zip Source avec une capture GENERATEUR/RESOLVEUR DE LABYRINTHE

 Sources de la même categorie

PRONOSTIQUES DE POKER PRÉ-FLOP par kawamythe
CALCUL LIST DE NOMBRES PREMIERS par White541
TROUVER TOUT LES QUADRILATÉRES POSSIBLES AVEC N POINTS ALEAT... par Buenol
Source avec Zip GÉNÉRATION D'UN LABYRINTHE AVEC RECHERCHE DU CHEMIN LE PLUS ... par mehdicherti
Source avec Zip Source avec une capture DIVISIONS AVEC PRÉCISION RÉGLABLE par Clempython

 Sources en rapport avec celle ci

TROUVER TOUT LES QUADRILATÉRES POSSIBLES AVEC N POINTS ALEAT... par Buenol
Source avec Zip Source avec une capture DIVISIONS AVEC PRÉCISION RÉGLABLE par Clempython
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI MULTITHREAD par amaury74
Source avec Zip Source avec une capture BENCHMARK PAR LE CALCUL DE PI par amaury74
Source avec Zip RACINE N-IÈME D'UN RÉEL A, PAR LA METHODE DE NEWTON-RAPHSON par gastein

Commentaires et avis

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é !

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. intégrale [ par phymed ] Bonjours a tous, je débute en python, et j'ai un petit problème: j'ai une fonction P(x)et je dois calculer et enregistrer dans un tableau chaque vale numpy tableau [ par phymed ] Bonjours je débute en python et je n'arrive pas a trouver la fonction qui me permet d'ajouter des tableaux entre eux. En gros j'ai : a=([1,2,3]) b=([4 Algorithme Python parité [HELP] [ par Lyd3n ] Bonjour, j'ai besoin d'aide pour un programme que je dois rendre a un professeur qui m'a poser des contraintes : je ne dois utiliser que "[i]input[/i


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales