Page 1 of 2

Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:10
by motojeremy
Bonjour j'ai un problème sur un programme que je fait actuellement, afin de stopper mon programme tant qu'aucune touche n'est activée j'utilise ceci :
Code: Select all
Lbl K
GetKey->K
If k≠0
then
goto S (la suite du programme)
else
goto K
End

Mais du coup la calculatrice effectue cette boucle sans s'arrêter tant qu'une touche n'est pas pressée et le programme ralentit de plus en plus jusqu'à crash (erreur mémoire)
J'aimerai donc savoir comment résoudre ma situation. Merci d'avance !

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:12
by Hamza.S
ça ne fonctionnera pas, Getkey n'attends pas que tu saisis une touche

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:15
by edgar13
remplace par

While 1:
getkey -> K
if K≠0:goto s
end

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:23
by critor
Il faut éviter de mettre un Goto dans un bloc, que ce soit un If ou un While.
Cela explique l'erreur de mémoire, sur la première version du code, le contexte du bloc courant n'étant pas nettoyé dans le cadre d'une sortie par Goto, et en prime on rentre alors dans un nouveau bloc.

Une version propre sans Goto :
Code: Select all
0->K
While non(K
getkey->K
End

C'est également plus court, et donc plus rapide à évaluer dans le cadre d'un langage interprété.

Ce qui est à faire à l'appui sur une touche est à saisir directement à la suite.

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:27
by motojeremy
D'accord merci beaucoup une dernière chose cependant ou je trouve le non (ou no ?) sur la calculatrice ?

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:28
by Hamza.S
dans test puis logic

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:31
by motojeremy
D'accord merci !

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 03 Jun 2019, 19:34
by edgar13
De rien :D

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 04 Jun 2019, 20:50
by UnCurieux
critor wrote:Il faut éviter de mettre un Goto dans un bloc, que ce soit un If ou un While.
Cela explique l'erreur de mémoire, sur la première version du code, le contexte du bloc courant n'étant pas nettoyé dans le cadre d'une sortie par Goto, et en prime on rentre alors dans un nouveau bloc.

Une version propre sans Goto :
Code: Select all
0->K
While non(K
getkey->K
End

C'est également plus court, et donc plus rapide à évaluer dans le cadre d'un langage interprété.

Ce qui est à faire à l'appui sur une touche est à saisir directement à la suite.


Dans ce genre de situation j'utilise
Code: Select all
0->K
Repeat K≠0
getkey->K
End


A quoi sert/comment fonctionne "non(K" ?

Re: Stopper un programme tant qu'aucune touche n'est activée

Unread postPosted: 04 Jun 2019, 22:27
by critor
On peut alors simplifier en :
Code: Select all
0->K
Repeat K
getkey->K
End


En fait, une valeur non nulle est considérée comme vraie, et une valeur nulle comme fausse.
Donc K et K≠0, c'est pareil.