Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 15 Jan 2011, 0:18
Je ne trouve pas (ou peu) d'erreur, mais des simplifications.
------
Un simple If Then Else suffit pour le stockage de la chaîne. Et on peut encore faire mieux avec un autre point.
Code
If L1(1)+L1(2)+L1(3)+L1(4)+L1(5)+L1(6)+L1(7)+L1(8)+L1(9)
+L2(1)+L2(2)+L2(3)+L2(4)+L2(5)+L2(6)+L2(7)+L2(8)+L2(9) = 9
If somme(L1)+somme(L2)=9
Je ne suis pas fan de l'utilisation de la chaîne, mais après tout cela évite des If.
3-L->L inverse tout seul la valeur de L entre 1 et 2.
--
Je te proposes de remplir une seule liste avec des valeurs différentes selon le joueur, et d'adapter les tests en conséquence.
Code
If L=2:1->L1(8)
If L=1:2->L1(8)
// devient
L->L1(8
Code
If L1(1)+L1(2)+L1(3)=3 ou L1(1)+L1(4)+L1(7)=3 ... L2(1)+... // avec L1 et L2
// devient
If L1(1)L1(2)L1(3)=L^3 ou L1(1)L1(4)L1(7)=L^3 ... // avec L1 seulement
Code
If somme(L1)+somme(L2)=9
// devient
If prod(L1
--
Remplacer les variables qui verrifient les remplissages par des tests sur les listes. (mon exemple tient compte des améliorations ci-dessus).
Code
If I=0
// devient
If L1(x)
Ce point est moins important que le reste. J'ai peut-être mal choisi.
--
C'est ici qu'une simplification élimine peut-être un bug : Si la case est remplie, le programme prend en compte la prochaine case vide (du moins je l'analyse mais ce n'est pas véridique).
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 31
Inscrit le : Ven 14 Jan 2011, 18:59
Posté le : Sam 15 Jan 2011, 14:21
1°) citation:
Code
If somme(L1)+somme(L2)=9
Là, ok, je comprends (en fait, je ne connaissais pas la fonction somme)
______________________________________________________________________________
2°)
citation:
"3-L->L inverse tout seul la valeur de L entre 1 et 2."
Là, je comprends aussi (c'est logique en même temps)
______________________________________________________________________________
3°)
citation:
Code
If L=2:1->L1(8)
If L=1:2->L1(8)
devient :
L->L1(x
Je ne comprends pas: quand tu dis "devient", ça sous-entends que je l'ai mis dans mon programme, mais je ne le vois nul part, j'ai peu être mal lu où mal compris mais je crois que ça correspond à la phrase que tu as dit juste avant
Et enfin, je ne comprends pas le "L->L1(x"
Selon moi, tu mets le numéro du joueur dans la case correpondante pour savoir, quel joueur a jouer sur cette case , c'est bien ça ? Et si je ne me suis pas trompé sur ton raisonnement, j'ai juste à laisser 0 si la case n'est pas cochée, non ?
____________________________________________________________________________
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 16 Jan 2011, 0:36
Les citations peuvent être faites avec la balise quote (à coté de code). Mais une citation de balise de code est indigeste. ^^
--
Au point 3 tu as compris. Le x était en fait à décliner selon la case.
J'utilise bien la valeur 0 pour tester si la case est jouée. Cela économise les variables mais pas le code
Le "devient" montrait que les lignes au dessus sont remplacées par celles en dessous.
point 4 : la somme était juste quand on avait deux liste remplies de 1. Maintenant que j'utilise une seule liste remplie de valeurs différentes, je pratique le produit pour savoir si toutes les cases sont remplies : Le produit est non-nul si toutes les cases sont remplies.
===
J'ai trouvé un possible bug. Que le joueur ai joué ou non, le prog passe au deuxième joueur et vice-versa. On ajoûte un if-then-end :
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 16 Jan 2011, 20:03
J'ai peut-être bafouillé avec des copier/coller.
Sache aussi que les numéros cases ne correspondent pas aux chiffres dessinés sur les touches.
Si tu baptises case 1 celle de la touche [1], alors l'erreur se trouve probablement parmi ce que tu as posté.
Si tu baptises case 1 celle de L1(1) alors alors l'erreur se trouve probablement parmi le If-Then-End de L1(1).
J'ai oublié des Then pour des If de case. J'édite mon post.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 16 Jan 2011, 22:34
Moi aussi mais je ne veux pas griller les étapes.
Edit : Ca y est !
Code
EffEcr
Output(1,2,"MORPION TI")
Output(3,8,"V1.01")
Output(6,3,"PERIMGUI")
Pause
EffEcr
Menu("MENU","JEU",3,"QUITTER",4)
Lbl 3
0->J
0->W
1->L
0->K
ClrList L1
9->dim(L1
Input "J1 NOM=",Chaine1
Input "J2 NOM=",Chaine2
EffEcr
For(T,2,15)
Output(3,T,"-")
Output(6,T,"-")
End
For(T,1,8)
Output(T,6,"I")
Output(T,11,"I")
End
Output(3,6,"+")
Output(3,11,"+")
Output(6,6,"+")
Output(6,11,"+")
Repeat J+W
If K
3-L->L
If L=2
"X"->Chaine3
If L=1
"O"->Chaine3
codetouche->K
10partDéc(K/10)-1->X
ent(K/10)-6->Y
If abs(Y-2)>1 or abs(X-2)>1
End
3Y-3+X->A
5X-2->X
3Y-1->Y
If L1(A)=0
Then
L->L1(A)
Output(Y,X,Chaine3
End
If prod(L1)
1->J
If L1(1)L1(2)L1(3)=L^3 ou L1(1)L1(4)L1(7)=L^3 ou L1(1)L1(5)L1(9)=L^3 ou L1(2)L1(5)L1(8)=L^3 ou L1(3)L1(6)L1(9)=L^3 ou L1(3)L1(5)L1(7)=L^3 ou L1(4)L1(5)L1(6)=L^3 ou L1(7)L1(8)L1(9)=L^3
1->W
End
Lbl 8
EffEcr
If W
Then
Output(2,2,"FELICITATIONS")
If L=1
Output(4,2,Chaine1)
If L=2
Output(4,2,Chaine2)
End
If J
Output(4,2,"MATCH NUL")
Pause
EffEcr
Menu("REJOUER ?","OUI",3,"NON",4)
Lbl 4
J'ai trafiqué une formule remplaçant les If et bidouillé quelques détails.
J'ai renoncé aux matrices quand elles ont compliqué les tests de victoire.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 108
Inscrit le : Lun 28 Jui 2010, 11:14
Posté le : Mar 18 Jan 2011, 17:57
Ce code peut beaucoup s'optimiser en taille:
Code
EffEcr
Output(1,2,"MORPION TI
Output(3,8,"V1.01
Output(6,3,"PERIMGUI
Pause
EffEcr
Menu("MENU","JEU",3,"QUITTER",4
Lbl 3
EffVar JEffVar WEffVar K
1->L
ClrList L1
9->dim(L1
Input "J1 NOM=",Chaine1
Input "J2 NOM=",Chaine2
EffEcr
For(T,2,15
Output(3,T,"-
Output(6,T,"-
End
For(T,1,8
Output(T,6,"I
Output(T,11,"I
End
Output(3,6,"+
Output(3,11,"+
Output(6,6,"+
Output(6,11,"+
Repeat J+W
If K
3-L->L
If L=2
"X"->Chaine3
If L=1
"O"->Chaine3
codetouche->K
10partDéc(K/10)-1->X
ent(K/10)-6->Y
If abs(Y-2)>1 or abs(X-2)>1
End
3Y-3+X->A
5X-2->X
3Y-1->Y
If non(L1(A
Then
L->L1(A
Output(Y,X,Chaine3
End
If prod(L1
1->J
If L1(1)L1(2)L1(3)=L^3 ou L1(1)L1(4)L1(7)=L^3 ou L1(1)L1(5)L1(9)=L^3 ou L1(2)L1(5)L1(8)=L^3 ou L1(3)L1(6)L1(9)=L^3 ou L1(3)L1(5)L1(7)=L^3 ou L1(4)L1(5)L1(6)=L^3 ou L1(7)L1(8)L1(9)=L^3
1->W
End
Lbl 8
EffEcr
If W
Then
Output(2,2,"FELICITATIONS
If L=1
Output(4,2,Chaine1
If L=2
Output(4,2,Chaine2
End
If J
Output(4,2,"MATCH NUL
Pause
EffEcr
Menu("REJOUER ?","OUI",3,"NON",4
Lbl 4
Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Mar 01 Mar 2011, 16:30
Qui sait comment on renomme une liste via un prgm ? SVP.
Autre question: Une fonction permet de rechercher un caractère dans une chaine...
(Elle donne sa position à partir d'un nombre donner.); Qu'elle est sont nom en fr ?
Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Mar 01 Mar 2011, 16:38
On ne peut pas renommé une liste grâce à un programme. Tout au plus, on peut changer les nombres de liste mais ça nécessite de créer une liste et de copier chaque valeur ce qui prend de la mémoire.
Pour rechercher un caractère dans une chaîne, je pense qu'il faut utiliser la fonction sous-chaine:
Code
If "A"=sous-chaine(chaine3,2)
...
Par contre, comme je ne connais pas bien les chaines, demande confirmation.