Bonjour à tous!
J'aimerais me faciliter la vie en cours en programmant un compteur sur ma calto. En gros il s'agirait de faire +1 à chaque appui sur la touche correspondante à la cellule (avec un total de 6 catégories de cellules). Là je résume mais si vous voulez plus de détails n'hésitez pas à demander
Voici mon souci : quand je lance le programme il se termine tout seul sans avoir le temps d'appuyer sur mes touches... je vous donne mon programme, (sachant que je suis quand même sacrément novice). J'ai une TI82 stats.fr. n'hésitez pas à me dire ce qui ne va pas et comment m'améliorer :
Code
:0->N:0->E:0->B:0->L:0->M:0->Z:0->T /// avec N, E, B, L et M mes cellules, Z une cellule particulière
:EffEcr ///(détail plus bas) et T le total de cellules
:codeTouche->K
:If K=82
:Then:N+1->N:T+1->T:End
:If K=83
:Then:E+1->E:T+1->T:End
:If K=84
:Then:B+1->B:T+1->T:End
:If K=92
:Then:L+1->L:T+1->T:End
:If K=93
:Then:M+1->M:T+1->T:End
:If K=94
:Then:Z+1->Z:End /// cette cellule doit rester à part et ne pas être comprise dans le total
:Output(1,1,T
:Output(2,1,"PN
:Output(3,1,"PE
:Output(4,1,"PB
:Output(5,1,"L
:Output(6,1,"M
:Output(7,1,"EB
:Output(2,5,N
:Output(3,5,E
:Output(4,5,B
:Output(5,5,L
:Output(6,5,M
:Output(7,5,Z
Voila, si mon code pouvait marcher ce serait bien, mais si en plus on pouvait faire en sorte qu'il s'arrête à 100 cellules ce serait super ! Et bien sûr je suis ouverte à toute suggestion pour l'optimiser!
Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Lun 06 Mar 2017, 17:52
Salut!
En gros ce que fais ton prgm là c'est regarder quelle touche est pressée, incrémenter les compteurs, afficher les valeurs puis bah il s'arrête puisque tu ne lui demande rien de plus...
Pour relancer les différentes opérations, une boucle while est adaptée.
{0,0,0,0,0,0,0 -> L1 //Mettre dans une liste pour faciliter l'incrémentation (voir suite)
:EffEcr
:Disp"","PN","PE","PB","L","M","EB //Prend moins de place que tous les outputs
:Repeat K=45 ou 100=L1(7 //L1(7) est le nombre total d'incrémentation (Sauf si c'est la touche 94 ;)
:codeTouche->K
:If max(K={82,83,84,92,93,94 //Si K=83 par exemple, l'égalité renvoie la liste {0,1,0,0,0,0} et max renvoie la valeur maximum de la liste, ici 1, on en conclue donc qu'une des 6 touches est pressée.
:Then
:10partDec(K/10)-1+3(9-ent(K/10->A //Ce calcul donnera 1 si on appuie sur le 1, 2 si on appuie sur le 2, etc.
:1+L1(A->L1(A
:If K [Pas égal à] 94 : 1+L1(7->L1(7
:End
:Output(1,1,L1(7
:Output(2,5,L1(4
:Output(3,5,L1(5
:Output(4,5,L1(6
:Output(5,5,L1(1
:Output(6,5,L1(2
:Output(7,5,L1(3
:End
Et voilà, optimisation totale et surpuissante ! B|
Sur ce, salut <3
Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Lun 24 Avr 2017, 16:43
Un peu brutal comme transition.
L'idée d'utiliser une liste est bien, mais on peut toujours mieux faire:
Code
:10partDec(K/10)-1+3(9-ent(K/10->A //Ce calcul donnera 1 si on appuie sur le 1, 2 si on appuie sur le 2, etc.
:1+L1(A->L1(A
devient:
Code
:10partDec(K/10)-1+3(9-ent(K/10
:1+L1(Rép->L1(Rép
et même:
Code
:10partDec(.1K)-1+3(9-ent(.1K
:1+L1(Rép->L1(Rép
et mieux:
Code
:10partDec(.1K)+26-3ent(.1K
:1+L1(Rép->L1(Rép
########################
D'autre part,
Code
{0,0,0,0,0,0,0 -> L1 //Mettre dans une liste pour faciliter l'incrémentation (voir suite)
:EffEcr
devient:
Code
EffVar L17->dim(L1
#########################
Une petite boucle pour l'affichage:
Code
For(I,1,6
Output(1+I,5,L1(3+I-6(I>3 //Rq : on pourrait peut être mettre simplement Output(I+1,5,L1(I ça inverserait juste les 2 lignes du clavier (ou, si c'est important, modifier le calcul de feu A pour les placer dans l'ordre d'affichage dans la liste, et non l'ordre de numéro (flemme de le faire))
End
#########################
Et pour les amateurs de bourrins:
Code
0->C //Ne pas remplacer par EffVar C à cause de IS>(C
EffVar L16->dim(L1
EffEcr
Disp "","PN","PE","PB","L","M","EB
Repeat K=45
codeTouche->K
If max(K={82,83,84,92,93,94
Then
10partDec(.1K)+26-3ent(.1K
1+L1(Rép->L1(Rép
If K!=94
IS>(C,99
End
Output(1,1,C
For(I,1,6
Output(1+I,5,L1(I
End
End
[/code]
Explication:
Si K=94, la commande IS> n'est pas lue, on sort du If normalement.
Sinon, on incrémente C (le compteur), et :
_si la valeur est tjr inférieure à 99, alors on lit le End, et on sort du If normalement.
_si la valeur est supérieure strictement (100 à fortiori), alors on ne lit pas le End... on n'est toujours pas sorti du If! Ainsi le If final sera interprété comme une sortie du If et non du Repeat, et le prgm terminera.
#####################
Une dernière remarque pour la route:
Modifier le calcul de feu A pour envoyer la touche 92 sur 5, 93 sur 6, 94 sur 7, 82 sur 2, 83 sur 3 et 84 sur 4, et mettre à 7 la dimension de L1 permettrait d'écrire, dans la boucle d'affichage, Output(I,5,L1(I
#####################
On peut certainement faire encore plus compact, mais je ne vois pas là directement