Forum Casio - Autres questions


Index du Forum » Autres questions » Agrandir (ou réduire) une matrice en conservant les valeurs.
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Agrandir (ou réduire) une matrice en conservant les valeurs.

Posté le 11/04/2019 13:45

Bonjour à tous !
J'aurais besoin, pour un jeu (chuuut c'est secret ), d'agrandir une matrice au fur et à mesure des besoins du joueur. Il est impossible de connaitre le nombre de ligne que la matrice aura en fin de jeu…

Du coup je cherche comment rajouter une ligne à ma matrice tout en gardant toutes les valeurs déjà stockées dedans.
Par exemple, j'ai une première matrice A :
[[1, 5, 8, 9, 2]
[10, 3, 0, 2, 6]]

Et j'aimerais rajouter une ligne :
[0, 0, 0, 0, 0]
J'ai essayé la fonction Augment( mais je ne suis pas arrivé à ajouter une ligne… D'après ce que j'ai compris, les deux matrices doivent impérativement avoir exactement la même taille et elles s'ajoutent en formant de nouvelles colonnes… Autrement dit rien de ce dont j'ai besoin.

Merci d'avance


MilangEn ligneMembrePoints: 188 Défis: 0 Message

Citer : Posté le 11/04/2019 13:50 | #


Il existe une technique de remplacement avec les listes :
Il est possible d'accéder à une liste x avec x contenant une valeur appropriée
Et donc comme on peut changer la taille d'une liste, on peut augmenter la taille de la matrice !
Mais par contre, même si tu fais ça dans un fichier de listes à part, tu seras limité à 26 colonnes...

Une alternative intéressante à toutes les boucles que vous avez vu jusque là :
For 1→X To 2:X-1→X:Next :E

Projet de jeu multijoueur : 1V1 3D
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 11/04/2019 13:53 | #


Non, il m faut impérativement une matrice J'ai besoin de l'organisation en tableau : elle me sert à lister des caractéristiques sur des lignes
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
MilangEn ligneMembrePoints: 188 Défis: 0 Message

Citer : Posté le 11/04/2019 13:58 | #


Ah oui d'accord...
Mais il n'y a pas moyen de faire la même chose sur une liste (alors 1 ligne=1 liste) ?
Une alternative intéressante à toutes les boucles que vous avez vu jusque là :
For 1→X To 2:X-1→X:Next :E

Projet de jeu multijoueur : 1V1 3D
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 11/04/2019 14:00 | #


Ça prendrait beaucoup plus de place et pis, à la limite pour balayer ça passe (genre une map) mais là c'est vraiment pas possible avec des listes…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
KikoodxHors ligneMembrePoints: 1262 Défis: 7 Message

Citer : Posté le 11/04/2019 14:31 | #


Est-ce qu'inverser les deux axes ne fonctionnerait pas dans ton cas ?
Sinon les listes me semblent une bonne idée, j'ai déjà codé un jeu stockant la map dans une seule liste.
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 11/04/2019 14:32 | #


Mais il ne s'agit pas d'une map mais d'un tableau de donnée

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
KikoodxHors ligneMembrePoints: 1262 Défis: 7 Message

Citer : Posté le 11/04/2019 14:35 | #


Justement, si c'est juste rajouter un nombre de valeurs définies, pourquoi ne pas rajouter des colonnes avec Augment et mettre tes têtes de colonnes en début des lignes ? (Je sais pas si c'est clair )
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 11/04/2019 14:37 | #


En gros j'ai une matrice de taille [x ; y] et j'aimerais ajouter une ligne en bas de la matrice
Je voulais savoir si c'est possible de faire ça en gardant les valeurs ?
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
KikoodxHors ligneMembrePoints: 1262 Défis: 7 Message

Citer : Posté le 11/04/2019 14:41 | #


J'ai l'impression que j'ai mal expliqué...
Si ton nombre de colonnes reste le même tout le temps, inverse x et y, puis utilise Augment( pour ajouter des colonnes, l'équivalent de tes lignes.
Faut juste que tu penses à l'envers.
LephenixnoirEn ligneAdministrateurPoints: 15046 Défis: 136 Message

Citer : Posté le 11/04/2019 14:44 | #


Transpose, puis Augment(), puis transpose.

(avec Trn)
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 11/04/2019 14:45 | #


Ah ok... Merci à vous tous !!
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
MactulHors ligneMembrePoints: 615 Défis: 0 Message

Citer : Posté le 11/04/2019 14:49 | #


Pourquoi casio n'as pas simplement fait un augmente () pour les x ?
Mes programmes
Cliquer pour enrouler

Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ
LephenixnoirEn ligneAdministrateurPoints: 15046 Défis: 136 Message

Citer : Posté le 11/04/2019 14:51 | #


Certainement plus casse-pieds en mémoire
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 15/04/2019 13:47 | #


J'ai une autre question… Voila, maintenant je voudrait réduire la taille d'une matrice en enlevant une ligne ou une colone (avec Trn c'est pareil)

Pour être précis, je voudrait enlever une ligne ou une colonne tout en gardant les autres valeurs mais en supprimant cette ligne/colonne Vous me suivez ?

Merci d'avance
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
LephenixnoirEn ligneAdministrateurPoints: 15046 Défis: 136 Message

Citer : Posté le 15/04/2019 20:50 | #


On ne peut pas ; en tous cas j'ai cherché un assez grand nombre d'astuces quand j'ai implémenté Formel pour supprimer des lignes de la matrice (ie. des noeuds dans l'arbre de mes termes), sans succès.

La seule méthode que je me souviens avoir trouvée consiste à régénérer la matrice avec une sorte de Seq ; mais c'est lent.

Finalement, j'avais opté pour déplacer les lignes que je voulais supprimer à la fin, tout en gardant le nombre de lignes "supprimées" en mémoire pour ne pas risquer de les lire par erreur. Ensuite quand je régénérais la matrice à diverses occasions où c'était indispensable, je les éliminais au passage.
NinestarsHors ligneMembrePoints: 2223 Défis: 22 Message

Citer : Posté le 15/04/2019 23:02 | #


Sinon tu travailles avec une matrice de la taille maximale et tu n'utilises que la partie qui t'intéresse. Au moins tu as l'erreur mémoire dès le début si il en manque plutôt qu'en cours de jeu (si c'est un jeu...)

Bien vu le turn / augment / turn
Shadow15510Hors ligneAdministrateurPoints: 3593 Défis: 15 Message

Citer : Posté le 16/04/2019 13:13 | #


Finalement j'ai copié la matrice dans une autre ligne par ligne grâce à un balayage. La ligne à répété n'est pas copiée Puis je supprime la matrice d'origine et je transfère la copie dans la matrice vierge et je vire la copie
Un peu brutal je l'accorde mais stable et fonctionnel…
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   98%
TotoyoHors ligneMembre d'honneurPoints: 15909 Défis: 101 Message

Citer : Posté le 20/04/2019 14:58 | #


Attention, avec deux grandes matrices, Augment peut provoquer des erreurs de mémoire. Pendant l'opération, une matrice temporaire est créée (je ne crois pas que ce soit la matrice Ans). Pendant le calcul, elle est stockée dans la mémoire principale et est supprimée après la fusion.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 28 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