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 » savoir si toute les "case" d'une matrice sont identique.
Manolo Hors ligne Membre Points: 910 Défis: 13 Message

savoir si toute les "case" d'une matrice sont identique.

Posté le 25/08/2018 20:35

bonjours, je voudrais savoir quel est la methode pour savoir si toute les "case" d'une matrice sont identique.
merci.


1, 2 Suivante
Massena Hors ligne Ancien rédacteur Points: 2219 Défis: 11 Message

Citer : Posté le 25/08/2018 20:36 | #


Je crois bien qu'il y avait un article paru il y a quelques semaines sur le sujet...
Je fais des recherches.
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 25/08/2018 20:39 | #


Pourquoi une boucle ne te suffirait-elle pas ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 25/08/2018 20:41 | #


En effet la même question à été demandé il y a peu.
Je ne sais plus qui avait trouvé l'astuce, il suffit de vérifier la condition
Min(List 1) = Max(List 1)
Breizh_craft En ligne Modérateur Points: 1157 Défis: 7 Message

Citer : Posté le 25/08/2018 20:42 | #


Pour une liste, oui, mais pour une matrice ?
Breizh.pm – Un adminsys qui aime les galettes.
Massena Hors ligne Ancien rédacteur Points: 2219 Défis: 11 Message

Citer : Posté le 25/08/2018 20:43 | #


Ah zut je pensais plutôt au tuto de Drak sur les fonctions utiles et méconnues.
Oui mais non.
Pour les matrices, je pense à un truc genre : Max(Mat 1=Min(Mat1
Ninestars Hors ligne Membre Points: 2461 Défis: 24 Message

Citer : Posté le 25/08/2018 20:49 | #


Ah oui, j'avais pas vu.
Une boucle semble pertinent, sinon une boucle avec l'astuce Min Max et Mat->List
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 25/08/2018 20:50 | #


Pour autant que je sache Min() et Max() ne marchent pas sur les matrices, en tous cas un test rapide semble prouver le contraire.

Tu peux toujours extraire vers des listes avec List»Mat et Mat»List mais ce n'est pas très pratique.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Redeyes Hors ligne Membre Points: 630 Défis: 7 Message

Citer : Posté le 25/08/2018 21:13 | #


J'ai trouvé quelque chose, mais c'est lorsqu'on déclare les dimensions d'une matrice, donc forcement tout est pareil, après je sais pas si ça peut aider:

{A,B}→Dim Mat A
For 1→N To A-1
For 1→M To B-1
If Mat A[N,M]=Mat A[N+1,M+1]
Then "Ok"
Else "No"
IfEnd
Next
Next
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 25/08/2018 21:23 | #


C'est pas mal, toutefois ça prouve juste que les diagonales sont homogènes. Une matrice comme ceci va afficher "Ok" :

4 5 6 7
3 4 5 6
2 3 4 5
1 2 3 4

Sinon l'idée est bonne, et une fois la matrice créée tu peux toujours écrire :

Dim Mat A
List Ans[1]→A
List Ans[2]→B
For 1→N To A-1
...

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 25/08/2018 21:32 | #


En reprenant ton idée de départ, j'ai tapé ce code. Il n'est pas testé et des optimisations sont certainement possibles.
{A,B→Dim Mat A
Mat A[1,1→C
1
For 1→N To A
For 1→M To B
If C≠Mat A[N,M
Then 0:Break
IfEnd
Next
Next
If Ans
Then "OK"
Else "Non"
IfEnd

Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 25/08/2018 21:34 | #


Tu es sûr que tu as envie de réinitialiser la matrice avant de tester ? Là le programme répond trivialement "OK" à tous les coups si A et B sont des entiers fréquentables.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 25/08/2018 21:38 | #


Qui a bien dit que son code ne marchait qu'à la création de la matrice (parce qu'il avait besoin des dimensions). Toi tu sais comment les récupérer plus tard x)
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Redeyes Hors ligne Membre Points: 630 Défis: 7 Message

Citer : Posté le 25/08/2018 23:19 | #


Lephenixnoir a écrit :

Dim Mat A
List Ans[1]→A
List Ans[2]→B
For 1→N To A-1
...


Oui! Du coup avec ça on peut avoir:
Dim Mat A
List Ans[1]→A // Nombre de lignes
List Ans[2]→B //Nombre de colonnes
For 1→N To A
For 1→M To B-1
If Mat A[N,M]=Mat A[N,M+1] //Le programme analyse les cases horizontalement avant de passer à la ligne suivante
Then "OK"
Else "NO"
IfEnd
Next
Next


Et si il n'y a ne serait-ce qu'un "NO", alors toutes les cases de la matrices ne sont pas identiques. Après il doit y avoir un moyen pour afficher ok ou non en une fois
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 26/08/2018 09:14 | #


Cette fois-ci tu ne compares jamais la ligne N avec des autres lignes, du coup cette matrice non uniforme va passer le test...

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

La méthode de Totoyo est plus sûre : elle vérifie que toutes les cases sont égales à la première (Mat A[1,1]), ce qui garantit l'uniformité !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Manolo Hors ligne Membre Points: 910 Défis: 13 Message

Citer : Posté le 26/08/2018 09:38 | #


J'ai trouvé plus simple, regardez c'est juste deux boucles "for" et une variable.
{7,21}→Dim Mat Z
0→A
For 1→U To 21
For 1→V To 7
Mat Z[V,U]=0⇒A+1→A
Next
Next
A=147⇒"OK"
A≠147⇒"NO"
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 26/08/2018 09:46 | #


C'est pas mal ! Toutefois ça ne marche que si toutes cases valent 0, n'est-ce-pas ?

Si tu ne connais pas la valeur à l'avance tu peux la déduire de Mat A[1,1] et tu te rapproches de la méthode de Totoyo.

L'autre avantage d'utiliser Break c'est que ça va plus vite si la matrice n'est pas uniforme (ça arrête de chercher dès qu'une cellule différente est trouvée).
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 26/08/2018 11:56 | #


Une version sans boucle for (peut être plus rapide, mais consomme plus de place car elle génère une matrice temporaire) :

Dim Mat Z -> Dim Mat A
Mat Z - Mat Z[1,1] -> Mat Z
If Mat Z = Mat A
Then "OK"
Else "NO"
IfEnd
ClrMat A


- On génère une matrice A de même taille que la Z, avec que des 0
- On soustrait la 1ère case de la matrice Z à elle même, ce qui fait que la 1ère case est à 0
- Si toutes les cases de la matrice sont égales à la 1ère case, elle sont toutes à 0, et donc Mat Z = Mat A.

Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 26/08/2018 12:04 | #


Par contre tu as détruit la matrice, là.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

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 107 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