Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Convertir une liste en matrice
Massena Hors ligne Ancien rédacteur Points: 2219 Défis: 11 Message

Convertir une liste en matrice

Posté le 01/08/2019 19:32

Bonjour à tous !
Alors je pense que le titre est assez explicite, mais je me demande :

Peut-on convertir une liste (de, par exemple, 25 items) en une matrice (par exemple en 5x5) ?

La fonction List->Mat ne rempli pas ces critères puisqu'elle assemble plusieurs listes de même longueur pour former une matrice.

En espérant pouvoir compter sur votre aide,
Masséna


Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

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.
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Alexot Hors ligne Membre Points: 539 Défis: 18 Message

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

Cliquez pour découvrir
Cliquez pour recouvrir
2b 5b 2d 2d 2d 2d 2d 3e 2b 2b 2b 3c 5d 3e 2b 2e 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2e 2e 2d 2d 2d 2d 2e 2b 2b 2b 2e 2b 5b 2d 2d 3e 2b 3c 5d 3e 2e 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2e 2e 2b 5b 2d 2d 3e 2b 2b 2b 2b 2b 3c 5d 3e 2b 2e 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2e 2b 2b 2b 2b 2b 2b 2e 2d 2e 2b 2e 2d 5b 2b 2b 3e 2d 2d 2d 3c 5d 3e 2e 2b 2b 2b 5b 2d 3e 2b 2b 3c 5d 3e 2e 2b 2b 2b 2e 5b 2d 3e 2b 2b 2b 3c 5d 3e 2e 5b 2d 2d 2d 3e 2b 3c 5d 3e 2d 2e 2d 5b 2d 3e 2b 2b 2b 2b 2b 2b 3c 5d 3e 2d 2e 2d 5b 2d 2d 3e 2b 2b 2b 3c 5d 3e 2d 2e 2b 5b 2b 2b 3e 2d 2d 2d 3c 5d 3e 2e 5b 2d 2d 2d 3e 2b 2b 3c 5d 3e 2d 2e 2d 5b 2d 2d 3e 2b 3c 5d 3e 2d 2d 2e 2b 5b 2d 2d 3e 2b 2b 2b 3c 5d 3e 2e 2b 2b 2b 5b 2d 3e 2b 2b 2b 2b 3c 5d 3e 2d 2e 3e 2b 5b 2d 2d 2d 3e 2b 2b 3c 5d 3e 2b 2b 2e 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2e 5b 2d 3e 2b 2b 2b 2b 2b 2b 3c 5d 3e 2d 2e
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 01/08/2019 21:05 | #


Tout à fait. Une seule boucle et du modulo, j'allais le proposer...
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Massena Hors ligne Ancien rédacteur Points: 2219 Défis: 11 Message

Citer : Posté le 02/08/2019 10:15 | #


Merci beaucoup pour ces réponses
Filoji Hors ligne Maître du Puzzle Points: 348 Défis: 16 Message

Citer : Posté le 02/08/2019 10:39 | #


Vous pensez quoi de cela ?
? -> A
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 !
Gloire au Flying Spaghetti Monster !!!
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

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 !
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Alexot Hors ligne Membre Points: 539 Défis: 18 Message

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.

Cliquez pour découvrir
Cliquez pour recouvrir
2b 5b 2d 2d 2d 2d 2d 3e 2b 2b 2b 3c 5d 3e 2b 2e 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2e 2e 2d 2d 2d 2d 2e 2b 2b 2b 2e 2b 5b 2d 2d 3e 2b 3c 5d 3e 2e 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2e 2e 2b 5b 2d 2d 3e 2b 2b 2b 2b 2b 3c 5d 3e 2b 2e 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2e 2b 2b 2b 2b 2b 2b 2e 2d 2e 2b 2e 2d 5b 2b 2b 3e 2d 2d 2d 3c 5d 3e 2e 2b 2b 2b 5b 2d 3e 2b 2b 3c 5d 3e 2e 2b 2b 2b 2e 5b 2d 3e 2b 2b 2b 3c 5d 3e 2e 5b 2d 2d 2d 3e 2b 3c 5d 3e 2d 2e 2d 5b 2d 3e 2b 2b 2b 2b 2b 2b 3c 5d 3e 2d 2e 2d 5b 2d 2d 3e 2b 2b 2b 3c 5d 3e 2d 2e 2b 5b 2b 2b 3e 2d 2d 2d 3c 5d 3e 2e 5b 2d 2d 2d 3e 2b 2b 3c 5d 3e 2d 2e 2d 5b 2d 2d 3e 2b 3c 5d 3e 2d 2d 2e 2b 5b 2d 2d 3e 2b 2b 2b 3c 5d 3e 2e 2b 2b 2b 5b 2d 3e 2b 2b 2b 2b 3c 5d 3e 2d 2e 3e 2b 5b 2d 2d 2d 3e 2b 2b 3c 5d 3e 2b 2b 2e 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2e 5b 2d 3e 2b 2b 2b 2b 2b 2b 3c 5d 3e 2d 2e
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 02/08/2019 17:02 | #


Je l'ai dit tout au début :
Krevo_ a écrit :
ç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.
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 102 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