Poster un nouveau sujet Poster une réponse
souci sur un compteur à programmer
Auteur Message
Bubullejujulle
Invité
Posté le : Lun 06 Mar 2017, 16:55   Citer 

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 winkle.gif
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!

merci d'avance pour votre aide !

  Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Lun 06 Mar 2017, 17:52   Citer 

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.

Ex:

Code
//Tes initialisations
:0->N:0->E:0->B:0->L:0->M:0->Z:0->T
:EffEcr

//Une boucle while
:Repeat K=45 or T=100 //ie jusqu'à ce qu'on appuye sur 45 ou que le compteur ai passé 100

//Ici tu mets ton code (moins les initialisations déjà effectuées à ne pas refaire à chaque fois)

...

:End //La fin de la boucle



Concernant d'éventuelles optimisations, il n'y a pas vraiment de trucs majeurs à faire.

On pourrait mettre la partie d'affichage qui ne bouge pas au debut, au niveau de l'initialisation (avant la boucle repeat)

Code
Output(2,1,"PN
:Output(3,1,"PE
:Output(4,1,"PB
:Output(5,1,"L
:Output(6,1,"M
:Output(7,1,"EB



Tu n'as pas besoin de Then/End s'il n'y a qu'une instruction dans le bloc après un If:

Code
:If K=94
:Then:Z+1->Z:End


devient:

Code
:If K=94
:Z+1->Z



----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Homer_Dalor
Invité
Posté le : Sam 22 Avr 2017, 14:50   Citer 


Code

{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

  Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Lun 24 Avr 2017, 16:43   Citer 

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 crazy.gif

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2025 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink