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 : 169
Enregistré le : 23 mars 2014 13:11

hp prime et les chaînes

Message par Céline »

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 du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: hp prime et les chaînes

Message par gege »

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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: hp prime et les chaînes

Message par charognard »

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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: hp prime et les chaînes

Message par charognard »

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
Modifié en dernier par charognard le 14 août 2015 11:58, modifié 1 fois.
Céline
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 169
Enregistré le : 23 mars 2014 13:11

Re: hp prime et les chaînes

Message par Céline »

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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: hp prime et les chaînes

Message par charognard »

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.
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 846
Enregistré le : 06 oct. 2012 14:37

Re: hp prime et les chaînes

Message par tyann »

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) 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
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2929
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: hp prime et les chaînes

Message par zpalm »

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 du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2929
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: hp prime et les chaînes

Message par zpalm »

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;
Modifié en dernier par zpalm le 14 août 2015 13:20, modifié 1 fois.
Céline
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 169
Enregistré le : 23 mars 2014 13:11

Re: hp prime et les chaînes

Message par Céline »

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 : 169
Enregistré le : 23 mars 2014 13:11

Re: hp prime et les chaînes

Message par Céline »

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

Retourner vers « Tous les Pockets »