Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Simuler un tableau à 3 dimensions | |
|
+4Yannick Jean Claude Minibug papydall 8 participants | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 1:42 | |
| PANORAMIC ne supporte nativement que les tableaux à deux dimensions. Voici comment on peut simuler un tableau à trois dimensions. - Spoiler:
- Code:
-
rem ============================================================================ ' SIMULATION D'UN TABLEAU TRIDIMENSIONNEL ' PAR PAPYDALL rem ============================================================================ rem PANORAMIC ne supporte nativement que les tableaux à 2 dimensions. rem On va simuler un tableau à trois dimensions. rem Comme exemple, on va simuler un tableau de taille 10*10*10 rem Voici le principe: ' Comme on n'a pas le droit de déclarer un tel tableau par DIM TABLEAU(10,10,10), ' on va écraser en quelque sorte la 3ème dimension sur la deuxième. ' La 1ère dimension du tableau sera 10, la seconde sera 10*10 (pour la 2ème et ' la 3ème). On fusionne les 2 dernières dimensions et on obtient 10*100 rem ============================================================================
' On crée un tableau assez grand pour contenir 10x10x10 éléments ' Rappelez-vous que les indices commencent à zéro et non à un. dim Tableau$(9,99) : ' pour simuler Tableau$(9,9,9) dim Get_Tableau$ : ' Variable dans laquelle on récupère la valeur de Tableau$(x,y,z)
' On écrit "Je suis là en 5,3,1" dans la case 5,3,1 du tableau Set_Tableau(5,3,1,"Je suis là en 5,3,1 !!!")
' Maintenant, on récupère la valeur de la case 5,3,1 et on l'affiche Get_Tableau(5,3,1) : message Get_Tableau$
end
rem ============================================================================
' Sub permetant de mettre valeur$ dans Tableau en x,y,z sub Set_Tableau(x,y,z,valeur$) Tableau$(x, y + z * 10) = valeur$ end_sub rem ============================================================================
' Sub renvoyant la valeur de Tableau$ en x,y,z SUB Get_Tableau(x,y,z) Get_Tableau$ = Tableau$(x, y + z * 10) end_sub rem ===========================================================================
Mais est-ce bien utile cette astuce ? Probablement NON ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 7:24 | |
| Bonjour papydall, Bin oui, fallait juste y penser !!!! Bravo, excellente idée. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 9:40 | |
| Astucieux effectivement. L'utilité je ne la voit pas au premier abord mais je garde çà sous le coude, on ne sait jamais.
A+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 13 Oct 2013 - 12:55 | |
| Bravo Papydall ! Je ne sais pas encore à quoi cela pourra servir mais je suis sûr que nos esprits tordus vont y trouver une utilité... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 13:16 | |
| Tu devrais juste ajouter une astuce pour la declaration du tableau pour que les indices soient automatiques pour le tableau(x,y,z) => déclaration du tableau(x,((y+1)*(z+1))-1)
| |
| | | Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 14:03 | |
| L'idée est tout bonnement Géniale !!!
Edit: Et pourquoi ne pas envisager des tableaux à n dimensions... ? | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 19:17 | |
| Bonsoir Papydall C'est génial ton truc! | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 21:25 | |
| papydall est de retour je vois un usage pour l'imprimante 3D mais je ne suis pas sur de savoir l'utiliser | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 13 Oct 2013 - 22:39 | |
| Moi aussi je vois bien çà en 3D... ...Imaginons une scene 3D avec chaque pixel dans un tableau 3D... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simuler un tableau à 3 dimensions Dim 13 Oct 2013 - 23:31 | |
| Ça permet par exemple d'extrapoler pour des calculs matriciels. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 14 Oct 2013 - 3:12 | |
| Et la couleur qui a trois variables en RGB... Je dirai même que cela (le tableau 3D) mérite un petit article explicatif a publié sur le mag. C'est une chose qui n' existe pas en natif et que tu crées avec Panoramic, cela peut être utile de le mettre sur le mag pour le retrouver plus facilement. C' est même digne de la rubrique des tutoriels... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 7:23 | |
| Bonjour tout le monde et merci pour vos interventions. Vous avez tous des bonnes idées pour utiliser des tableaux à 3 dimensions. Comme je suis actuellement en panne (heu, en panne d’idées s’entend !), je vous propose un code pour mieux illustrer comment on peut utiliser ces tableaux tridimensionnels simulés. Le programme en lui-même n’a que peu d’intérêt, mais il montre comment déclarer ce type de tableaux, et la manière de l’utiliser. Vous trouverez certainement des bonnes applications utilisant des tableaux à 3 dimensions ! Alors ne vous en privez pas. - Code:
-
rem ============================================================================ ' Simulation et utilisation d'un tableau à 3 dimensions rem ============================================================================
dim n1, n2 ,n3, x, y, z : n1 = 10 : n2 = 20 : n3 = 5 dim tableau(n1,n2*n3) : ' simuler un tableau à 3 dimensions n1,n2,n3 dim get_tableau : ' variable dans laquelle on récupère la valeur du tableau(x,y,z) dim rand : ' variable qui contiendra un entier aléatoire entre mini et maxi color 0,0,0,0 : display : caption 0,"<CLICK> pour arrêter" ' Initialiser le tableau tridimensionnel par des entiers aléatoires for x = 1 to n1 for y = 1 to n2 for z = 1 to n3 rand(10,150) : ' entier aléatoire entre 10 et 150 set_tableau(x,y,z,rand) : ' affecter la valeur rand au tableau(x,y,z) next z next y next x rem =========================================================================== ' Recupérer le contenu du tableau tridimensionnel pour tracer des cercles dont ' les coordonnées de leur centre ainsi que leur rayon en dépendent. for x = 1 to n1 for y = 1 to n2 for z = 1 to n3 get_tableau(x,y,z) : 2d_pen_width 1 + get_tableau/100 2d_pen_color rnd(255),rnd(255),rnd(255) 2d_circle 300+get_tableau,200+get_tableau,get_tableau/4 2d_circle 300+get_tableau,200-get_tableau,get_tableau/4 2d_circle 300-get_tableau,200-get_tableau,get_tableau/4 2d_circle 300-get_tableau,200+get_tableau,get_tableau/4 2d_circle 300,200+get_tableau,get_tableau/4 2d_circle 300,200-get_tableau,get_tableau/4 2d_circle 300+get_tableau,200,get_tableau/4 2d_circle 300-get_tableau,200,get_tableau/4 if scancode <> 0 then terminate next z next y next x caption 0, " terminé" end rem ============================================================================ ' Affectation du tableau ' Sub permetant de mettre la valeur V dans Tableau(x,y,z) sub Set_Tableau(x,y,z,v) Tableau(x, y + z * (n3-1)) = v end_sub rem ============================================================================ ' Lecture du tableau ' Sub renvoyant la valeur de Tableau(x,y,z) dans la variable Get_Tableau SUB Get_Tableau(x,y,z) Get_Tableau = Tableau(x, y + z *(n3-1)) end_sub rem ===========================================================================
' Fournir un entier aléatoire entre mini et maxi bornes comprises SUB Rand(mini,maxi) rand = int(rnd(maxi-mini+1))+mini END_SUB rem ============================================================================
Dernière édition par papydall le Lun 14 Oct 2013 - 14:09, édité 1 fois (Raison : Correction de l'erreur signalée par Jicehel) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 8:23 | |
| Je pense qu'il y avait un petit problème dans les formules, je n'ai pas trop le temps de vérifier (je dois me préparer pour le boulot) mais j'ai modifié un peu le prog. - Code:
-
rem ============================================================================ ' Simulation et utilisation d'un tableau à 3 dimensions rem ============================================================================
dim n1, n2 ,n3, x, y, z : n1 = 10 : n2 = 20 : n3 = 5 dim tableau(n1,n2*n3) : ' simuler un tableau à 3 dimensions n1,n2,n3 dim get_tableau : ' variable dans laquelle on récupère la valeur du tableau(x,y,z) dim rand : ' variable qui contiendra un entier aléatoire entre mini et maxi color 0,0,0,0 : display : caption 0,"<CLICK> pour arrêter" ' Initialiser le tableau tridimensionnel par des entiers aléatoires for x = 1 to n1 for y = 1 to n2 for z = 1 to n3 rand(10,150) : ' entier aléatoire entre 10 et 150 set_tableau(x,y,z,rand) : ' affecter la valeur rand au tableau(x,y,z) next z next y next x rem =========================================================================== ' Recupérer le contenu du tableau tridimensionnel pour tracer des cercles dont ' les coordonnées de leur centre ainsi que leur rayon en dépendent. for x = 1 to n1 for y = 1 to n2 for z = 1 to n3 get_tableau(x,y,z) : 2d_pen_width 1 + get_tableau/100 2d_pen_color rnd(255),rnd(255),rnd(255) 2d_circle 300+get_tableau,200+get_tableau,get_tableau/4 2d_circle 300+get_tableau,200-get_tableau,get_tableau/4 2d_circle 300-get_tableau,200-get_tableau,get_tableau/4 2d_circle 300-get_tableau,200+get_tableau,get_tableau/4 2d_circle 300,200+get_tableau,get_tableau/4 2d_circle 300,200-get_tableau,get_tableau/4 2d_circle 300+get_tableau,200,get_tableau/4 2d_circle 300-get_tableau,200,get_tableau/4 wait 20 if scancode <> 0 then terminate next z next y next x caption 0, " terminé" end rem ============================================================================ ' Affectation du tableau ' Sub permetant de mettre la valeur V dans Tableau(x,y,z) sub Set_Tableau(x,y,z,v) Tableau(x, y + (z-1) * n2) = v end_sub rem ============================================================================ ' Lecture du tableau ' Sub renvoyant la valeur de Tableau(x,y,z) dans la variable Get_Tableau SUB Get_Tableau(x,y,z) Get_Tableau = Tableau(x, y + (z-1) * n2) end_sub rem ===========================================================================
' Fournir un entier aléatoire entre mini et maxi bornes comprises SUB Rand(mini,maxi) rand = int(rnd(maxi-mini+1))+mini END_SUB rem ============================================================================ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 11:57 | |
| Bonjour Jicehel A quel endroit, penses-tu voir quelque chose qui cloche dans les formules ? Personnellement, je n’en voie pas, mais qui sait ? NB : pour le WAIT 20, je l’avais dans mon code, mais je l’ai supprimé par inattention avant de poster ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 13:03 | |
| Sauf erreur de logique de ma part, car j'ai regardé très vite ce matin avant de partir, tu avais écrit:
' ========================================================= ' Affectation du tableau ' Sub permetant de mettre la valeur V dans Tableau(x,y,z)
sub Set_Tableau(x,y,z,v) Tableau(x, y + z * (n3-1)) = v end_sub
=> Tu écris la valeur en x, y+z*(n3-1) soit pour x = 1 , y=2, z=3 en (1,2+3*(5-1)) soit en (1,14)
'========================================================== ' Lecture du tableau ' Sub renvoyant la valeur de Tableau(x,y,z) dans la variable Get_Tableau SUB Get_Tableau(x,y,z) Get_Tableau = Tableau(x, y + z * 10) end_sub
=> Pour les mêmes valeurs, tu lis le tableau en (1,2+3*10) soit (1,32)
-----
De plus, je pense que c'est mieux d'utiliser la même formule pour la compréhension et la mise à jour (je trouve très bien l'usage de n3 à la place de la valeur fixe 10 qui dépend en réalité de la taille du tableau, comme dans ton cas où tu as réglé la valeur à 5)
Mais bon, c'est comme ça que je l'ai lu rapidement ce matin, peut-être que j'ai manqué quelque chose... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 14:22 | |
| Merci Jicehel d’avoir remarqué l’erreur due au copier/coller. Il fallait écrire, dans les 2 SUBs Set_tableau() et Get_Tableau() , les mêmes paramètres, à savoir (x, y + z *(n3 – 1)).
J’ai corrigé ci-haut. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 14:32 | |
| En plus du coup, tes proc. sont plus facilement adaptable, puisque tu utilise 3 variables pour déclarer ton tableau. On pourrait même avoir une procédure d'initialisation qui fixe les variables pour le programme à partir d'un appel. Le seul problème de cette méthode est que l'on doit adapter n3 à la valeur du tableau utilisé si on a plusieurs tableaux.
Sinon histoire de chipoter car je suis un chipoteur, la formule fonctionne tout à fait, mais personnellement, j'aurais trouvé plus logique (la logique étant quelque chose de propre à chacun ...) d'écrire: (x, y *(n2 – 1) + z )
Toutefois, on est d'accord que cela ne change rien au fonctionnement du programme... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Simuler un tableau à 3 dimensions Lun 14 Oct 2013 - 15:09 | |
| Eh bien, je suis ravi d’apprendre une autre qualité de toi : chipoteur ! Ta logique est … logique, | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| | | | Contenu sponsorisé
| Sujet: Re: Simuler un tableau à 3 dimensions | |
| |
| | | | Simuler un tableau à 3 dimensions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |