Page 1 of 3

Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 15:44
by gam
Bonjour, je m'adresse ici au programmeurs, ou en fait à n'importe qui maitrise un peu le TI-Basic. Le problème, c'est que tout est juste sauf ... que ça marche pas.
Si quelqu'un peut voir le programme et voir ce qui marche pas....
merci

Le programme est ici: archives_voir.php?id=1504958
et le code est ci-dessous :
Code: Select all
ClrHome
getTime→L₁
(L₁(1)*3600)+(L₁(2)*60)+L₁(3)→A

"DEBUT BOUCLE CHRONOMETRE"
While getKey=0
   getTime→L₂
   (L₂(1)*3600)+(L₂(2)*60)+L₂(3)→B
   
   "HEURES"
   If (B-A)≥3600
   Then
      int((B-A)⁄3600)→H
      Output(3,4,H
   End
   Output(3,6,":"
   
   "MINUTES"
   remainder((B-A),3600)→X
   If X≥60
   Then
      int(remainder((B-A)⁄3600),60)→M
      Output(3,7,M
   End
   Output(3,9,":"
   
   remainder(int(remainder((B-A),3600)⁄60),60)→S
   Output(3,10,S
End

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 15:57
by Bisam
getTime renvoie directement l'heure sous la forme {heures, minutes, secondes}.

Tu as un peu oublié de multiplier par 60 et par 3600, aux lignes 3 et 8...

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 16:23
by gam
Tas raison. Purée, en plus je m'étais dit qu'il fallait pas que j'oublie... :troll:
Merci, je corrige et je voir si ça marche!
||
\/
(erreur de débutant)

EDIT: voilà, j'ai modifier mais ça change pas, le temps ne défile pas.

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 17:47
by loupiot
premièrement, les
Code: Select all
If (B-A)≥3600
   Then

sont inutiles, tu peux tout simplement les supprimer.
Code: Select all
int((B-A)/3600)→H
affiche bien les heures.
Code: Select all
int(remainder((B-A)/3600),60)→M
crée une erreur. remainder est inclus dans le int, ça devrait être l'inverse. M n'est pas des minutes, juste des heures modulo 60. Multiplie (B-A)/3600 par 60 pour obtenir des minutes modulo 60.
Tu as alors
Code: Select all
int(remainder((B-A)/60),60)→M

Code: Select all
remainder(int(remainder((B-A),3600)/60),60)→S
les heures modulo 60 modulo 60. Pour avoir les secondes, tu as juste à prendre le résultat de (B-A) modulo 60.
Code: Select all
remainder(B-A,60→S

Tada, un chronomètre qui marche :D
Image
Il y a cependant un problème, c'est le passage à la minute 'le screenshot a été prit à la première seconde de la première minute)
Le "9" du "59" n'est pas effacé (c'est pareil pour le passage à l'heure).
Image
Ca pourrait se corriger avec des chaînes, mais ça serait pénible et un peu moche dans le code ... Si quelqu'un a une idée ? :p

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 18:00
by Bisam
Par exemple :
Code: Select all
If M<10
Then
  Output(3,4,0
  Output(3,5,M
Else
  Output(3,4,M
EndIf

et la même chose pour les secondes.

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 18:08
by loupiot
du coup, voilà le code en basic
Code: Select all
EffÉcran
affHeure→L₁
L₁(1)3600+L₁(2)60+L₁(3)→A
While getKey=0
affHeure→L₂
L₂(1)3600+L₂(2)60+L₂(3→B
partEnt((B-A)3600→H
Output(3,4,H
Output(3,6,":
reste(partEnt((B-A)/60),60→M
Output(3,7,M
If M<10
Output(3,8,"
Output(3,9,":
reste(B-A,60→S
Output(3,10,S
If S<10
Output(3,11,"
End

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 19:12
by gam
Merci beaucoup, j'essaie ça tout de suite!
EDIT: j'ai fait un petit mix entre Bisam et loupiot, le temps défile et y'a plus de bug des secondes avec le 9, mais les minutes s'affichent pas et je vois pas....

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 19:48
by loupiot
post ton code :)

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 20:14
by gam
Nan en fait c'est bon, tout marche c'est génial merci! Je reposterai le bon code dans l'archive plus tard (sans vous oublier, bien sur!). Voilà le code actuel (en français, sorry)

Code: Select all
EffÉcran
affHeure→L₁
L₁(1)3600+L₁(2)60+L₁(3→A
While getKey!=105
affHeure→L₂
L₂(1)3600+L₂(2)60+L₂(3→B
partEnt((B-A)/3600→H
Output(3,4,H
Output(3,6,":
reste(partEnt((B-A)/60),60→M
If M<10
Then
Output(3,8,0
Output(3,9,M
Else
Output(3,8,M
End
Output(3,10,":
reste((B-A),60→S
If S<10
Then
Output(3,11,0
Output(3,12,S
Else
Output(3,11,S
End
End

C'est possible qu'une erreur se soit glissée ici, si je la remarque ou si on me la fait remarqué, j'éditerai.
Maintenant, je vais bosser sur le minuteur!
PS: le "!=" signifie "différent de"

Re: Probleme chronometre TI-Basic

PostPosted: 16 May 2018, 20:17
by loupiot
ok, c'est donc la méthode de Bisam qui donne un chrono un peu plus propre. quelques conseils : tu n'as pas besoin de fermer les parenthèses ni les crochets à la fin des lignes et des affectations. Tu peux aussi remplacer
Code: Select all
Output(3,11,"0"
par
Code: Select all
Output(3,11,0
, ça change rien au code ça te fera juste économiser quelques octets