Posté le 01/08/2019 19:32
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 64 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 01/08/2019 19:39 | #
Oui, pourquoi pas ... en écrivant un peu de code. ça pourrais être un sujet pour voir comment chacun l'implémente...
Genre comme ça =>
{0,1,2,3,4,.......}
{5, 5} -> Dim Mat A
For 1 -> A To 5
For 1 -> B To 5
List Ans[5(A-1)+B] -> Mat A[A, B]
Next
Next
PS: C'est ce que je fais dans Labybug, dans le sous-programme LX où je part d'une liste de 8 éléments pour finir avec une matrice de 16 x 8.
Citer : Posté le 01/08/2019 20:45 | #
On peut aussi faire quelque chose comme ça :
{0,1,2,3,4,.......}
{5, 5} -> Dim Mat A
For 1 -> A To 25
List Ans[A] -> Mat A[MOD(A-1, 5)+1, Int((A-1)/5)+1]
Next
Citer : Posté le 01/08/2019 21:05 | #
Tout à fait. Une seule boucle et du modulo, j'allais le proposer...
Citer : Posté le 02/08/2019 10:15 | #
Merci beaucoup pour ces réponses
Citer : Posté le 02/08/2019 10:39 | #
Vous pensez quoi de cela ?
A -> Dim List 1
Seq(X, X, 1, Dim List 1, 1 -> List 1
Int (√(Dim List 1)) + 1(Int √(Dim List 1) != √(Dim List 1) -> B
{B, B - 1(B * (B - 1) = A) -> Dim Mat A
For 1 -> A To Dim List 1
List 1[A] -> Mat A[A - B(Int ((A - 1) / B)), (Int ((A - 1) / B)) + 1
Next
Il permet de créer n'importe quel matrice à partir de n'importe quel dimension de listes, et s'adapte automatiquement si il y a un colonne vide !
Citer : Posté le 02/08/2019 11:30 | #
@Filoji: Un peu complexe à mon goût. Et ça veux aussi dire que tu cherche à faire des matrices "carrés" ou en tous cas deviner la taille de la matrice finale. Ensuite tu utilise Seq(...) mais en fait on veux convertir n'importe quel liste en matrice.... on ne veut pas juste générer une matrice avec 1,2,3,....,N. La liste à mettre en matrice pourrais être {3,12,26,53,5,4,89,6} ou n'importe quoi. Si j'analyse bien ton programme, c'est en réalité une sorte de Seq() pour les matrices que tu as écris là, et non un convertisseur liste existante -> matrice.
@Axolot: je me suis aperçu que tu remplissais la matrice en remplissant la 1ere colonne ligne par ligne, puis la 2e colonne, etc .... alors que dans ma double boucle je faisais l'inverse....
En fait j'ai utilisé le nombre "5" a plusieurs endroits pour 2 significations différentes : le nombre de lignes et le nombre de colonnes.... alors qu'il serait bien plus propre et plus compréhensible de faire une variable L nb de lignes et C pour le nb de colonnes. D'ailleurs, je regrette un peu mon code initial, mais je l'avais voulu très simple et très court.
De manière générique, si on a une liste de m x n éléments, on peut faire une matrice de m lignes et n colonnes OU une matrice de n lignes et m colonnes (c'est un peu pareil me dirait vous).
Ainsi pour être tout à fait générique pour convertir une liste de m x n éléments (ou moins) en matrice, on peut faire :
' nombre de lignes
m -> L
' nombre de colonnes
n -> C
' Liste d'au plus m x n éléments
{n1, n2, n3, ...}
{L, C} -> Dim Mat A
For 1 -> A To Dim List Ans
List Ans[A] -> Mat A[Int((A-1)/C)+1, MOD((A-1),C)+1]
Next
sauf éventuelle erreur de ma part, ça doit marcher (ATTENTION pas testé sur calculatrice .... normalement c'est "(A-1)" ... au début j'avais mis "A" dans les formules avec Int et MOD...)
OU en version "double boucle" (boucle extérieure pour les lignes, boucle intérieure pour les colonnes) :
' nombre de lignes
m -> L
' nombre de colonnes
n -> C
' Liste d'au plus m x n éléments
{n1, n2, n3, ...}
{L, C} -> Dim Mat A
For 1 -> A To L
For 1 -> B To C
List Ans[C(A-1)+B] -> Mat A[A, B]
Next
Next
Voilà...
Avec une liste {1,2,3,4,5,6,7,8,9,10,11,12} et nb ligne L = 4 et nb colonnes C = 3, ça fait :
1 2 3
4 5 6
7 8 9
10 11 12
avec la même liste mais nb ligne L = 3 et nb colonnes C = 4, ça fait :
1 2 3 4
5 6 7 8
9 10 11 12
Enfin, si vous vouliez genre :
1 4 7 10
2 5 8 11
3 6 9 12
Il faudra faire inverser les index donnant ligne / colonne de la matrice et diviser par L plutôt :
...
List Ans[A] -> Mat A[MOD((A-1),L)+1, Int((A-1)/L)+1]
...
... ou alors il suffit de transposer par la fonction Trn !
Citer : Posté le 02/08/2019 16:10 | #
@Krevo_ bien vu en effet je ne m'étais pas préoccupé de l'ordre de remplissage ligne par ligne ou colonne par colonne, et je n'avais pas pensé à mettre A-1 au lieu de A dans les formules avec MOD et Int.
Citer : Posté le 02/08/2019 16:48 | #
Je passe en coup de vent mais il y a pas une fonction comme Seq() pour les matrices ? La double boucle paraît lourde ultimement.
Citer : Posté le 02/08/2019 17:02 | #
Je l'ai dit tout au début :
ça pourrais être un sujet pour voir comment chacun l'implémente...
... donc n'hésite pas à poster ta propre version. Je ne connais pas assez bien les fonctions dispo. sur les matrices pour savoir s'il y a quelque-chose d'intéressant pour se faciliter la tâche.
Tu parle d'un éventuel équivalent de Seq(..) pour les matrices, mais en fait ici on veut convertir n'importe quelle liste en matrice... donc c'est pas forcément {1,2,3, ....} . Si j'ai mis une liste {1,2,3,4,5,6,7,8,9,10,11,12}, c'est juste que c'est plus facile après pour voir comment sont rangés les éléments dans la matrice après que le programme à tourné. Mais le programme converti une liste quelconque en matrice.
J'en profite également pour dire que j'ai laissé un commentaire sur la commande List->Mat
J'ai fait pas mal d' edit pour clarifier le code et/ou les propos.