Seuls les membres ayant 30 points peuvent parler sur le chat.

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 Rédacteur Points: 1304 Défis: 6 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.
Peace was never an option. - Untitled goose game, 2019
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 Message

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


Pourquoi une boucle ne te suffirait-elle pas ?
Ninestars Hors ligne Membre Points: 2257 Défis: 22 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: 1053 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 Rédacteur Points: 1304 Défis: 6 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
Peace was never an option. - Untitled goose game, 2019
Ninestars Hors ligne Membre Points: 2257 Défis: 22 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: 18201 Défis: 142 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.
Redeyes Hors ligne Membre Points: 561 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

~Raisonnance...
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 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
...
Totoyo Hors ligne Membre d'honneur Points: 15989 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: 18201 Défis: 142 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.
Totoyo Hors ligne Membre d'honneur Points: 15989 Défis: 102 Message
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 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)
Totoyo Hors ligne Membre d'honneur Points: 15989 Défis: 102 Message
Redeyes Hors ligne Membre Points: 561 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
~Raisonnance...
Lephenixnoir Hors ligne Administrateur Points: 18201 Défis: 142 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é !
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: 18201 Défis: 142 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).
Zezombye Hors ligne Rédacteur Points: 1715 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: 18201 Défis: 142 Message

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


Par contre tu as détruit la matrice, là.
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
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
: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 v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 36 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