π
<-
Chat plein-écran
[^]

Opti-Défi n°4 : codeur MORSE lumineux

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude Adriweb » 08 Avr 2015, 19:51

Au fait, tu as eu ta 83 Premium CE comment ?
En tant que prof ? Eleve dans une classe pilote ? Autre ?
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.1%
 
Messages: 14606
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude grosged » 09 Avr 2015, 08:30

Une TI83PCE ?..Ahhhh, le veinard !!! :)

Bon!.. Je me suis de nouveau penché sur ma version:
EDIT: maintenant en version 5 ,ce qui fait maintenant 484 octets ;) (sur ma TI-84 Pocket.fr)
1 octet grapillé grâce à Mingerton ;)
(J'en ai profité pour l'agrémenter d'explications (désolé pour l'autre fois: j'avais la flemme :D )
Depuis la première version, rien n'a changé, si ce n'est qu'elle démarre en mode "chiffres".

Code: Tout sélectionner
{226,3752,14888,0,0,936,14,3722,3720,938,58,57890,3624,3746,904,232,14472.06004,14882.239752,57992.952456
,930,234,56.014506,906.003754,3626.015016,3618,14504,57896.926242,14984.231562,.057898,0,0,3704968→L1
ClrList L2           // morse codé en binaire (partie entière pour les lettres; fractionnée pour les chiffres sauf 0).
106→dim(L2                 // correspond à la val.max d'un getKey+1.
For(A,0,31                                 // de la touche [A] jusque [0].
L1(A+1→L2(A+42+5int(A/5  // afin que L2(getKey+1) nous donne le code morse adéquat.
End:ClrHome                          // efface l'écran de calcul.
Ans→ΔX:Ans→ΔY                 // grosse valeur dans ΔX,ΔY (en l'occurence L1(32)=3704968).
GridOn                                   // pour qu'un affichage de grille nous
StorePic Pic1                                // noircisse tout l'écran.Stocké dans Pic1                                   
GridOff                                // maintenant: écran  sans grille,
FnOff :AxesOff                 // ni fonction Y=, ni axes.
1→T:1→U                  // T=position de la TI, U=position de l'utilisateur (dans L1 qui contiendra le message).
Menu("DEBIT","LENT",0,"NORMAL",1,"RAPIDE",2
Lbl 0:Ans/2                       // lent? D=.25,
Lbl 1:Ans/2                        // normal? D=.5,
Lbl 2:Ans→D                     // rapide? D=1.
Delvar E0L2→L1                 // E=variable d'état; L1 va contenir le message.
While 1                                // boucle principale...et unique, d'ailleurs!
E+D→E                             // On se permet de déchiffrer seulement quand E est entier.
L1(T                                      // la TI transcrit le bout de code en position T.
If int(Ans:Then                            // Partie entière pas encore nulle?      
   Ans/(1+not(fPart(E→L1(T           // alors on continue son déchiffrage binaire (avec E entier):
       If .5≤fPart(Ans:Then            // on tombe sur un bit à 1 ?
      ClrDraw                                 // donc on efface l'écran...
      Else                                         // sinon,
      RecallPic Pic1                     // on le remplit.
   End
   Else                                     // le déchiffrage était fini ? (=partie entière nulle)
   T+(T≠U→T                        // alors on passe au suivant...s'il y en a un!
End
getKey→G                           // scrute le clavier.
A xor G=31→A                    //permutée grâce à [alpha], A=0 ou 1 (mode "lettres" ou "chiffres").
L2(G+1                                 // Ans=code morse correspondant à la touche pressée
IF A:E6fPart(Ans          // si A=1 (mode "chiffres"), on s'intérèsse à la partie fractionnée (le E est le double petit EE),
int(Ans→L1(U                    // sinon, c'est la partie entière.puis stocké dans L1, en position U
U+not(not(Ans→U            // on a bien eu une touché pressée, laquelle nous a donné un code non nul?..
End                                 // alors on incrémente la position U, et la boucle est bouclée!

Cette 5ème version est téléchargeable ici : http://ti-pla.net/a171073
Dernière édition par grosged le 09 Avr 2015, 20:39, édité 8 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude Mingerton » 09 Avr 2015, 16:41

Je dis peut être une option que tu as déjà pesée, mais je pense qu'il y a des gains de vitesse à faire ici :
Code: Tout sélectionner
Lbl 0:.5Ans
Lbl 1:.5Ans
//
T+(T-U→T
//
If A:fPart(Ans)e6
//
U+not(not(Ans→U          //not(not(Ans c'est Ans ou il y a une subtilité que je n'ai pas comprise ?


Edit : en fait j'ai compris, on récupère la valeur booléenne de Ans :P
Avatar de l’utilisateur
Mingerton
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 69.6%
 
Messages: 655
Images: 2
Inscription: 13 Mai 2014, 19:36
Localisation: À l'infini
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Américaine

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude grosged » 09 Avr 2015, 18:23

J'avais pensé à .5Ans, mais ça prends le même nombre d'octets que Ans/2
T+(T-U→T ne peut pas remplacer T+(T≠U→T parce que si, par rapport à la TI, on vient de taper plein de caractères d'un coup, l'écart entre T et U sera forcément >1
(en fait T doit petit-à-petit rattraper U par incrément de 1)

Pour ce qui est du fPart(Ans)E6 , bien vu! je n'y avais pas songé, mais ça prend encore le même nombre d'octets que fPart(Ans)10^(6
(d'ailleurs tu me fais remarquer que j'ai mal recopié mon programme: j'avais oublié la parenthèse dans fPart(Ans)10^(6
j'utilise bien la fonction 10x accessible par [2nde][log], et mon erreur de frappe prétait à confusion, merci ;))
On peut tout de même rogner 1 octet ,il nous suffit d'en changer l'ordre : E6fPart(Ans
Bien joué, Mingerton ;) Je vais modifier en conséquence ;)
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude Mingerton » 09 Avr 2015, 18:39

Je parle en vitesse pour ces optimisations ;)

En effet, une division est deux voire trois fois plus lente qu'une multiplication (en Asm ou en Axe, mais ça se répercute aussi un peu sur le Basic), et le token 10^( est plus long à appeler que E. Pour la première optimisation, c'est vrai qu'elle n'arrange pas, notre processeur est trop lent pour la gérer. Merci pour l'explication, je ne comprenais pas pourquoi dans mes programmes parfois ça fonctionnait et parfois non :P
Avatar de l’utilisateur
Mingerton
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 69.6%
 
Messages: 655
Images: 2
Inscription: 13 Mai 2014, 19:36
Localisation: À l'infini
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Américaine

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude grosged » 09 Avr 2015, 20:09

Je suis tout à fait d'accord avec toi : une multiplication sera toujours plus rapide qu'une division ;)
Mais dans le cas présent, on peut mettre indépendamment .5Ans ou Ans/2 dans le sens où ça se produit hors boucle.
Tiens! Je viens de grapiller à nouveau 1 octet:
en remplaçant la ligne
Code: Tout sélectionner
If round(fPart(Ans,0:Then

par
Code: Tout sélectionner
If .5≤fPart(Ans:Then
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°4 : codeur MORSE lumineux

Message non lude Wistaro » 15 Avr 2015, 11:52

Et bien, c'est joli tout ça :)
À côté, mon programme fait tâche 0_o

Pour le code morse, je n'ais pas fait la même chose que vous, mais ça marche. Même si c'est beaucoup moins optimisé.

Show/Hide spoilerAfficher/Masquer le spoiler
J'avais complètement oublié ce topic ! Désolé !
Avatar de l’utilisateur
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 87.5%
 
Messages: 3153
Images: 37
Inscription: 25 Fév 2013, 16:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingénieur en électronique
YouTube: Wistaro
Twitter/X: Wistaro
GitHub: Wistaro

Précédente

Retourner vers TI-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
974 utilisateurs:
>959 invités
>10 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)