hp prime et les chaînes

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

Répondre
Céline
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 183
Inscription : 23 mars 2014 14:11

hp prime et les chaînes

Message par Céline » 14 août 2015 10:54

Bonjour,

profitant de mes vacances j'essaie de me familiariser avec la hp prime avec laquelle j'ai beaucoup de mal.

Je tente donc consciencieusement les algorithmes proposés dans ce très bon document.

Lorsque je rentre les instructions suivantes dans le CAS, ça fonctionne :

Code : Tout sélectionner

ch:="123456"
2*expr(ch(3))
ça me renvoie bien 6.

Donc je ne comprends pas pourquoi le programme suivant ne fonctionne pas et me renvoie "type d'argument incorrect".

Code : Tout sélectionner

EXPORT SIRET(n)
BEGIN
LOCAL ch,a,i,s=0;
ch:=STRING(n);
FOR i FROM 1 TO dim(ch) DO
  s:=EXPR(ch(i))+s;
END;
RETURN s;
END
Une explication ?
Merci
TI-30 Galaxy
fx-180P, fx-4000P
HP 11c, 12c, 12c le, 15c, 15c le
HP 32s, 32s ii, 42s, 17b ii, 30b, 35s
HP 28s, 48s, 48sx, 48g, 50g, prime

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6918
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: hp prime et les chaînes

Message par gege » 14 août 2015 11:39

Bonjour,
expr n'est peut-être pas identique à EXPR ?
C'est un problème endémique sur la Prime, ils ont fait deux modes Home et CAS, avec des ensembles de fonctions différents et le tout est incompréhensible.
C'est vraiment idiot...
G.E.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: hp prime et les chaînes

Message par charognard » 14 août 2015 11:42

Salut

Connais pas la prime donc je charge l'émulateur .....

Code : Tout sélectionner

ch:="123456"
2*expr(ch(3))
renvoi une erreur "type d'argument incorrect" et pas 6 comme tu le dis


ch(3) renvoi 51 et pas une chaine !

51 code ASCII de .... 3

CHAR(ch(3)) renvoi "3"
EXPR(CHAR(ch(3))) renvoi 3

Bref il faut mettre un CHAR

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: hp prime et les chaînes

Message par charognard » 14 août 2015 11:44

gege a écrit :Bonjour,
expr n'est peut-être pas identique à EXPR ?
C'est un problème endémique sur la Prime, ils ont fait deux modes Home et CAS, avec des ensembles de fonctions différents et le tout est incompréhensible.
C'est vraiment idiot...
G.E.
Incompréhensible ..... comme ton explication en fait ;)
Salut GÉGÉ
:arrow: déjà parti

Bref ton programme doit être ça :

Code : Tout sélectionner

EXPORT SIRET(n)
BEGIN
LOCAL ch,i,s=0;
ch:=STRING(n);
FOR i FROM 1 TO dim(ch) DO
  s:=EXPR(CHAR(ch(i)))+s;
END;
RETURN s;
END
Dernière édition par charognard le 14 août 2015 11:58, édité 1 fois.

Céline
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 183
Inscription : 23 mars 2014 14:11

Re: hp prime et les chaînes

Message par Céline » 14 août 2015 11:58

Incompréhensible !

Ta solution Charognard fonctionne dans le programme (merci :) ) mais me renvoie "bad argument value" dans le CAS et pour moi EXPR(ch(3)) fonctionne dans le CAS.
TI-30 Galaxy
fx-180P, fx-4000P
HP 11c, 12c, 12c le, 15c, 15c le
HP 32s, 32s ii, 42s, 17b ii, 30b, 35s
HP 28s, 48s, 48sx, 48g, 50g, prime

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: hp prime et les chaînes

Message par charognard » 14 août 2015 12:05

je commence à comprendre GÉGÉ ;)
En fait le résultat de ch(3) diffère ça donne soit 51 soit "3" étonnant !
et bien sur suivant le retour l'erreur ce déclenche.

tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 737
Inscription : 06 oct. 2012 14:37

Re: hp prime et les chaînes

Message par tyann » 14 août 2015 12:46

Bonjour
Si on écrit un code plus standard:

Code : Tout sélectionner

EXPORT SIRET(n)
LOCAL ch,a,i,s;
ch:=STRING(n);
FOR i FROM 1 TO DIM(ch) DO
 s:=EXPR(MID(ch,i,1))+s;
END;
END;
Cela fonctionne dans le CAS et dans Home.
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) 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, El 5120, 9200, 9600

Canon X-07

Avatar de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

Re: hp prime et les chaînes

Message par zpalm » 14 août 2015 13:00

En mode programme ch(3) renvoie le code ASCII 51, pas la chaine "3". Pour avoir une chaine en mode programme il faut faire ch(3,1). Je ne sais pas pourquoi c’est ainsi mais c’est décrit très brièvement dans le paragraphe “ Références de liste” page 493 du manuel.

Ton programme devrait donc être:

Code : Tout sélectionner

EXPORT SIRET(n)
BEGIN
LOCAL ch,i,s=0;
ch:=STRING(n);
FOR i FROM 1 TO dim(ch) DO
  s:=EXPR(ch(i,1))+s;
END;
RETURN s;
END; 
Une autre façon de faire:

Code : Tout sélectionner

EXPORT SIRET(n)
BEGIN
ΣLIST(ASC(STRING(n))-48);
END; 

Avatar de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

Re: hp prime et les chaînes

Message par zpalm » 14 août 2015 13:19

Et le programme complet SIRET du document cité (page 55) peut être MPOisé en:

Code : Tout sélectionner

EXPORT SIRET()
BEGIN
  LOCAL L1,S ;
  INPUT(M,"12 premiers chiffres du SIRET");
  INPUT(N,"2 derniers chiffres du SIRET");
  L1:= ASC(STRING(M)+STRING(N))-48;
  S:= ΣLIST(MAKELIST(ΣLIST(ASC(STRING(L1(I)*(I MOD 2+1)))-48),I,1,14));
  PRINT("Numéro de SIRET "+IFTE(S MOD 10,"in","")+"valide");
END;
Dernière édition par zpalm le 14 août 2015 13:20, édité 1 fois.

Céline
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 183
Inscription : 23 mars 2014 14:11

Re: hp prime et les chaînes

Message par Céline » 14 août 2015 13:19

Merci à tous :D
tyann a écrit :Bonjour
Si on écrit un code plus standard:

Code : Tout sélectionner

EXPORT SIRET(n)
LOCAL ch,a,i,s;
ch:=STRING(n);
FOR i FROM 1 TO DIM(ch) DO
 s:=EXPR(MID(ch,i,1))+s;
END;
END;
Cela fonctionne dans le CAS et dans Home.
En effet c'est beaucoup mieux, c'est le SUB des hp 28 et 48, j'aurais dû y penser. Mais je trouvais cette nouvelle écriture ch(3) intéressante, sans savoir qu'elle ne fonctionnait pas en mode programme comme l'a expliqué zpalm.
zpalm a écrit : Une autre façon de faire:

Code : Tout sélectionner

EXPORT SIRET(n)
BEGIN
ΣLIST(ASC(STRING(n))-48);
END; 
Oui c'est économique mais pas valable dans mon cas car en réalité je veux additionner un chiffre sur deux.
TI-30 Galaxy
fx-180P, fx-4000P
HP 11c, 12c, 12c le, 15c, 15c le
HP 32s, 32s ii, 42s, 17b ii, 30b, 35s
HP 28s, 48s, 48sx, 48g, 50g, prime

Céline
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 183
Inscription : 23 mars 2014 14:11

Re: hp prime et les chaînes

Message par Céline » 14 août 2015 13:21

zpalm a écrit :Et le programme complet SIRET du document cité (page 55) peut être MPOisé en:

Code : Tout sélectionner

EXPORT SIRET()
BEGIN
  LOCAL L1,S ;
  INPUT(M,"12 premiers chiffres du SIRET");
  INPUT(N,"2 derniers chiffres du SIRET");
  L1:= ASC(STRING(M)+STRING(N))-48;
  S:= ΣLIST(MAKELIST(ΣLIST(ASC(STRING(L1(I)*(I MOD 2+1)))-48),I,1,14));
  PRINT("Numéro de SIRET "+IFTE(S MOD 10,"in","")+"valide");
END;
Joli :D
TI-30 Galaxy
fx-180P, fx-4000P
HP 11c, 12c, 12c le, 15c, 15c le
HP 32s, 32s ii, 42s, 17b ii, 30b, 35s
HP 28s, 48s, 48sx, 48g, 50g, prime

Répondre

Revenir vers « Tous les Pockets »