[Challenge mono-ligne] Traitement chaine II

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3422
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: [Challenge mono-ligne] Traitement chaine II

Message par C.Ret »

charognard a écrit :Ce n'est pas tout, si tu reste en appuie sur la touche tu en a plusieurs qui arrivent.[...]
Très juste, c'est come le GET sur mon Commodore. A chaque passage, le canal clavier est lu et si une touche a était appuyée, le caractère correspondant est mis dasn A$.
Donc quand je n'appuye pas, la boucle tourne avec A$ vide et le ASC qui retourne 0 pour afficher un CHR$(0) - en fait un CHR$(14) sur Commodore VIC/C64 pour éviter le plantage -

Bon faut que je trouve un Pocket autre que mon SHARP PC-1211 afin de vérifier si ça fonctionne de même et que le ASC A$ renvoi bien 0 si A$ est vide.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5269
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: [Challenge mono-ligne] Traitement chaine II

Message par bernouilli92 »

Voici ma proposition qui tourne sur sharp pc1500:

Code : Tout sélectionner

1 B=A:A=ASC(INKEY$):PAUSE CHR$((A<>B)*(A>0)*(A+(A>32)-(A=90)*26));:IF A<>47 THEN 1
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par charognard »

bernouilli92 a écrit :Voici ma proposition qui tourne sur sharp pc1500:

Code : Tout sélectionner

1 B=A:A=ASC(INKEY$):PAUSE CHR$((A<>B)*(A>0)*(A+(A>32)-(A=90)*26));:IF A<>47 THEN 1
Ne fonctionne pas car
- Pas en traduction instantanée (PAUSE au lieu de PRINT en WAIT 0).
- On ne peut pas appuyer 2 fois sur la même touche.

Il FAUT QUE LA FRAPPE SOIT TRADUITE A LA VOLÉE, mais sans rémanence de touche
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5269
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: [Challenge mono-ligne] Traitement chaine II

Message par bernouilli92 »

charognard a écrit :
bernouilli92 a écrit :Voici ma proposition qui tourne sur sharp pc1500:

Code : Tout sélectionner

1 B=A:A=ASC(INKEY$):PAUSE CHR$((A<>B)*(A>0)*(A+(A>32)-(A=90)*26));:IF A<>47 THEN 1
Ne fonctionne pas car
- Pas en traduction instantanée (PAUSE au lieu de PRINT en WAIT 0).
- On ne peut pas appuyer 2 fois sur la même touche.

Il FAUT QUE LA FRAPPE SOIT TRADUITE A LA VOLÉE, mais sans rémanence de touche
On peut appuyer deux fois sur la même touche.
Par contre il y a effectivement une certaine lenteur due à l'utilisation de PAUSE.

Voici la version corrigée:

Code : Tout sélectionner

1 WAIT 0:B=A:A=ASC(INKEY$):PRINT CHR$((A<>B)*(A>0)*(A+(A>32)-(A=90)*26));:IF A<>47 THEN 1
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
Rom1500
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 701
Enregistré le : 29 nov. 2013 16:24
Localisation : Pas très loin de Lyon
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par Rom1500 »

Bien, ça l'fait ! :D
Toutes les infos : http://www.pc-1500.info
PC-1500+CE-150 : EU PC1500, PC1500A / JP PC1500, PC1500D, PC1501 / HU PTA4000, PTA4000+16 / US TRS80 PC2 / BR PC-1500RP, PC-1500RP2 / CN PC-1500, PC-1500A, Nanfeng PC-1500A
PC-1600 : PC-1600K V2, CE-1600M, CE-1604L, CE-515P, module 32Ko, module 512Ko
Extensions en boite : CE-150/151/152/153/154/155/156/157/158/159/160/161/162E/163 sans boite
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par charognard »

Nickel

j'avais une autre proposition disons .... moins conventionnelle Mais plus longue.

Code : Tout sélectionner

20 WAIT 0 : FOR B=0 TO 32:B=ASC INKEY$: NEXT B: PRINT CHR$ (B-26*(B=91)-(B=33)+2* SGN COS 90);:FOR C=0 TO 1: C=INKEY$="": NEXT C: IF B<>48 THEN 1
L'idée était d'utiliser la boucle FOR..NEXT comme temporiseur
Pour Incrémentation ou la décrémentation je vérifie le mode RADIAN ou DEGREE que j'aurais précédement programmé sur 2 touches de mon PC1262
DEGREE@ et RADIAN@ (le @ est la validation [ENTER]
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par jvernet »

Rooh toucher au compteur de FOR ç.est mal!
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8410
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par badaze »

charognard a écrit :Nickel

j'avais une autre proposition disons .... moins conventionnelle Mais plus longue.

Code : Tout sélectionner

20 WAIT 0 : FOR B=0 TO 32:B=ASC INKEY$: NEXT B: PRINT CHR$ (B-26*(B=91)-(B=33)+2* SGN COS 90);:FOR C=0 TO 1: C=INKEY$="": NEXT C: IF B<>48 THEN 1
L'idée était d'utiliser la boucle FOR..NEXT comme temporiseur
Pour Incrémentation ou la décrémentation je vérifie le mode RADIAN ou DEGREE que j'aurais précédement programmé sur 2 touches de mon PC1262
DEGREE@ et RADIAN@ (le @ est la validation [ENTER]
Sauf que ta ligne est 20 et que tu fais un THEN 1.

En tous cas. Chapeau les gars.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5269
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: [Challenge mono-ligne] Traitement chaine II

Message par bernouilli92 »

@charognard: très intéressant cette utilisation des boucles FOR.
Par contre je ne comprends pas pourquoi tu n'utilises pas la première boucle FOR comme la seconde, du genre :

Code : Tout sélectionner

FOR C=0 TO 1:B=ASC INKEY$: C=B<>0: NEXT C
Modifié en dernier par bernouilli92 le 19 févr. 2015 08:41, modifié 1 fois.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7148
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par gege »

jvernet a écrit :Rooh toucher au compteur de FOR ç.est mal!
Si tu as peur quand on fait ça, surtout ne lis pas la Gazette n°5... on y fera un truc pas conventionnel avec For...
(teasing teasing...)
G.E.
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: [Challenge mono-ligne] Traitement chaine II

Message par tyann »

Bonjour
jvernet a écrit:
Rooh toucher au compteur de FOR ç.est mal!
N'étant pas informaticien de métier, je me demande pourquoi ?
Car il m'est arrivé souvent de faire ceci lorsque le langage ne comporte pas d'instruction
Break ou Exit.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par charognard »

bernouilli92 a écrit :@charognard: très interes cette utilisation des boucles FOR.
Par contre je ne comprends pas pourquoi tu n'utilises pas la première boucle FOR comme la seconde, du genre :

Code : Tout sélectionner

FOR C=0 TO 1:B=ASC INKEY$: C=B<>0: NEXT C
Parce que
FOR C=0 TO 1:C=INKEY$="":NEXT C
revient au même mais en plus court

comprendre C=(INKEY$="")
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par charognard »

tyann a écrit :Bonjour
jvernet a écrit:
Rooh toucher au compteur de FOR ç.est mal!
N'étant pas informaticien de métier, je me demande pourquoi ?
Car il m'est arrivé souvent de faire ceci lorsque le langage ne comporte pas d'instruction
Break ou Exit.
Un peu comme dans MATRIX en fait ;)
Il y en a qui jurent que par le respect stricte des règles et d'autre qui les transgresse.
Mais là je ne quitte pas le FOR brutalement mais je lui provoque sa terminaison

Essai ce code maintenant

Code : Tout sélectionner

10 B=0
20 FOR A=1 to 10 : B=B+1: PRINT B:GOTO 40
30 NEXT A
40 BEEP 1:GOTO 20
Il va conduire au plantage rapidement pour un problème de profondeur de pile ( 5 de mémoire sur le 125X/126X).
Et ça c'est PAS CONSEILLÉ DU TOUT

PAR CONTRE

Code : Tout sélectionner

10 B=0
20 FOR A=1 to 10 : B=B+1: PRINT B: A=11
30 NEXT A:BEEP 1 :GOTO20
Pas de problème pour être utilisé
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5269
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: [Challenge mono-ligne] Traitement chaine II

Message par bernouilli92 »

charognard a écrit :
bernouilli92 a écrit :@charognard: très interes cette utilisation des boucles FOR.
Par contre je ne comprends pas pourquoi tu n'utilises pas la première boucle FOR comme la seconde, du genre :

Code : Tout sélectionner

FOR C=0 TO 1:B=ASC INKEY$: C=B<>0: NEXT C
Parce que
FOR C=0 TO 1:C=INKEY$="":NEXT C
revient au même mais en plus court

comprendre C=(INKEY$="")
Je parlais de la première boucle FOR.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine II

Message par charognard »

Ok compris
parce que la premiere boucle FOR va jusqu'a 32
de cette façon elle embarque un test pour que le code ASCII soit celui d'un caractère (ascii>= 32) et non un code de controle. De plus elle affecte directement ascii+1 a B


bref mon code est équivalent à :

Code : Tout sélectionner

for b=0 to 1:a=asc inkey$:b=a > 31:next b:b=a+1
Répondre

Retourner vers « Tous les Pockets »