[Casio fx-850p] Comment coder la saisie d'une fonction ?

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 de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par Xerxes » 27 févr. 2016 17:31

What an optimization compared to the 321 byte code. Well done Piotr!

Another solution is a self modifying code using the keyboard buffer, if available.

Avatar de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par Xerxes » 28 févr. 2016 23:25

A demo for self modifying code on the PB-2000C:

Code : Tout sélectionner

10 INPUT"F(X)=";F$
20 PRINT"50 Y=";F$
30 SYSTEM SET 1E,1E,0D,52,55,4E,20,20,0D
40 END
50 Y=X
60 RETURN
The key sequence modifies line 50 and starts the program again.
The code is only executable in the editor oder BASIC mode.

piotr433
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 7
Inscription : 13 nov. 2009 12:02
Localisation : Szczecin, Pologne
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par piotr433 » 29 févr. 2016 15:02

Clever trick! The PB-1000 doesn't support the command SYSTEM SET, but key codes can be POKEd into the keyboard buffer. The PB-1000 version of your program could look so:

Code : Tout sélectionner

10 INPUT"F(X)=";F$
20 PRINT"50 Y=";F$
30 K=&H1E:GOSUB100
31 K=&H1E:GOSUB100
32 K=&H0D:GOSUB100
33 K=&H52:GOSUB100
34 K=&H55:GOSUB100
35 K=&H4E:GOSUB100
36 K=&H20:GOSUB100
37 K=&H20:GOSUB100
38 K=&H0D:GOSUB100
40 END
50 Y=X
60 RETURN
100 REM put K into the keyboard buffer
110 POKE &H68DB,(PEEK(&H68DB)+1) MOD 16
120 POKE &H68DF+PEEK(&H68DB),K
130 POKE &H68D9,PEEK(&H68D9)+1
140 RETURN

Avatar de l’utilisateur
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 21 mars 2016 22:56

Hello,

Bon, eh bien je galère à porter le code sur la Casio en utilisant VALF.

Voici le code en QB64 que j'aimerais avoir sur la calculatrice :

Code : Tout sélectionner

'Bisection solver
1
CLS
CLEAR
SCREEN 12
COLOR 11

DEFDBL A-Z

PRINT
PRINT TAB(20); "Résolution d'équations - Bisection"
PRINT
INPUT " x min. "; x0
x1 = -x0 + .1
5
FOR i = 1 TO 100
    x2 = (x0 + x1) / 2
    IF f(x2) = 0 THEN EXIT FOR
    IF (f(x2) * f(x1)) > 0 THEN x1 = x2
    IF (f(x2) * f(x1)) < 0 THEN x0 = x2
NEXT i

LOCATE 11
PRINT " x ="; x2

4
LOCATE 28, 1
INPUT " Encore (o/n) "; z$
IF z$ = "o" THEN 1 ELSE END
END

FUNCTION f (x)
f = (x * x) - 3
END FUNCTION
Une idée ? Le code du début est si touffu que je m'y perds dans les variables. J'ai bien compris que VALF comportait ma fonction en tant que chaîne de caractères et qu'on pouvait faire varier sa valeur en changeant la valeur de x, mais j'arrive pas à faire quelque chose qui tienne la route... :(

Pour ce qui est de la partie "Saisie de la fonction", j'ai fait :

Code : Tout sélectionner

INPUT "Saisir la fonction :";F$:Z=VALF(F$)
Mais ensuite, dans le programme, comment je fais pour faire que j'aie le résultat avec une valeur particulière de x ? Si je teste avec la fonction f(x)=x²-3 et que je demande l'affichage de F, il me donne -3, ce qui correspond à la valeur de f(x) quand x=0, donc a priori, rien d'anormal, mais je dois jongler avec plusieurs valeurs de x (qui sont nommées x0, x1 et x2) et c'est là que rien ne va plus...

Merci ! :)

W.

EDIT : J'ai testé ça, et ça ne marche pas... :(

Code : Tout sélectionner

10CLS:CLEAR:INPUT "Fonction f(x) ";F$:Z=VALF(F$)
20FOR X=-2 TO 2 STEP .1
30PRINT "f (";X;") =";Z
40NEXT X
J'ai rentré X*X-3 comme fonction... Quelque soit la valeur de x (cette valeur s'affiche correctement, -2, -1.9, -1.8... > 1.8, 1.9, 2), j'ai toujours Z=-3...
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

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

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par tyann » 22 mars 2016 00:56

Bonsoir
EDIT : J'ai testé ça, et ça ne marche pas... :(
Code:
10CLS:CLEAR:INPUT "Fonction f(x) ";F$:Z=VALF(F$)
20FOR X=-2 TO 2 STEP .1
30PRINT "f (";X;") =";Z
40NEXT X


J'ai rentré X*X-3 comme fonction... Quelque soit la valeur de x (cette valeur s'affiche correctement, -2, -1.9, -1.8... > 1.8, 1.9, 2), j'ai toujours Z=-3...
Cela me semble normal, puisque tu evalue F$ une seule fois.
Il faudrait écrire :

Code : Tout sélectionner

10CLS:CLEAR:INPUT "Fonction f(x) ";F$
20FOR X=-2 TO 2 STEP .1
25 Z=VALF(F$)
30PRINT "f (";X;") =";Z
40NEXT X
Sauf erreur de ma part.
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
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 22 mars 2016 09:04

Salut Tyann,

Merci, cela fonctionne déjà mieux ! :)

Sachant que j'utilise la lettre "X" lorsque je code la fonction, et si je veux que X garde la même valeur, il faut que j'attribue cette dernière à une autre variable pour certains calculs, non ? Dans le listing que j'ai mis précédemment (Résolution d'équations par bissection), on utilise X0, X1 et X2, mais au final, c'est toujours la même valeur de X, qui évolue. Si je veux avoir la valeur de f(x) à un moment donné, et que cette valeur se trouve dans une autre variable, il faut que je fasse en sorte que cette variable prenne la valeur de X. Sur le papier c'est ce qu'il me semble être juste, mais au final, ça peut faire un sacré paquet de variables non ? Et du fait, je me demande si c'est bien ça...

Merci :)

W.
Dernière édition par wilou le 02 avr. 2016 06:29, édité 1 fois.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

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

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par tyann » 22 mars 2016 14:05

Bonjour
Effectivement, si tu veux utiliser ta fonction avec plusieurs valeurs,
il te faut mettre ces valeurs dans X avant chaque calcul.
Le plus simple dans ce cas me semble d'utiliser un tableau X(n valeurs),
et éventuellement un tableau Z de même taille pour stocker les résultats si besoin.
Tu pourra alors faire tes calculs dans une boucle avec quelque chose du genre :

Code : Tout sélectionner

For I=0 TO N
X=X(I)
Z(I)=VALF(F$)
NEXT I
Le code que tu veux transcrire:

Code : Tout sélectionner

 IF f(x2) = 0 THEN EXIT FOR
    IF (f(x2) * f(x1)) > 0 THEN x1 = x2
    IF (f(x2) * f(x1)) < 0 THEN x0 = x2

FUNCTION f (x)
f = (x * x) - 3
END FUNCTION
utilise une procédure avec transmission de paramètre
et variable locale.
La variable x de la fonction prends la valeur qui est transmise
lors de l'appel ici x2 et x1.
Ceci est impossible sur les basics anciens à n° de ligne, pour pouvoir faire
cela il faut une machine plus récente comme la Ti 89 ou la Hp Prime.
Je ne sais même pas si il existe une casio même moderne qui sait faire cela ? :cry:
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
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 22 mars 2016 19:24

Merci Tyann pour tes précieuses informations. :) C'est balot que je ne puisse pas transcrire le programme sur la Casio.
En tous cas, j'ai bien avancé grâce à tes indications, et je comprends mieux comment cela marche.

En attendant, j'ai remis la main sur un programme de stats (1 et 2 variables - ça me donne des sommes, des effectifs, les moyennes, les variances, les écarts-types, le coefficient de correlation, ainsi que les équations des droites de régression), que j'ai pu adapter et là, ça marche du tonnerre ! Et quel confort l'affichage des résultats sur les deux lignes. :)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

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

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par tyann » 22 mars 2016 19:49

Bonsoir
C'est balot que je ne puisse pas transcrire le programme sur la Casio.
Tu ne peux pas tel quel, mais tu peux l'adapter.
Ici il faut que tu mémorise f(x2) et f(x1) dans 2 variables séparées.
Ca pourrai donner quelque chose du genre :

Code : Tout sélectionner

FOR i=1 TO 100
 x2=(x0-x1)/2
 x=x1:z1=valf(f$) REM ici tu calcule f(x1) et tu stocke dans z1
 x=x2:z2=valf(f$) REM ici f(x2) -> z2
IF z2=0 THEN  REM là je ne sais pas si on peut sortir d'une boucle sur le casio
IF z2*z1>0 THEN 
etc......
Voilà c'est un peu plus lourdingue, mais c'est faisable.
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
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 23 mars 2016 09:23

Salut Tyann,

J'avais commencé à coder un truc qui ressemblait à ce que tu as écrit, mais effectivement, je pense pas qu'il soit possible de sortir d'une boucle comme ça en cours de route.

Qu'à cela ne tienne, j'ai un autre programme que je peux tester : Calcul d'aires, selon la méthode des trapèzes.
En regardant le code, pas de sortie de boucle ! :o

Du fait, j'ai tenté de le transcrire sur la Casio, et ça marche ! :)

Le voici (dans sa version QB64) :

Code : Tout sélectionner

1
CLS
CLEAR
SCREEN 12
COLOR 11

DEFDBL A-Z

PRINT
PRINT TAB(20); "Intégrales - Trapèzes"
PRINT
INPUT " a "; a
INPUT " b "; b

n = 500

h = (b - a) / n
s = .5 * (f(a) + f(b))
x = a
FOR i = 1 TO n - 1
    x = x + h
    s = s + f(x)
NEXT i
s = s * h
PRINT
PRINT "f(x) dx ="; s
LOCATE 28, 1
INPUT " Encore (o/n) "; z$
IF z$ = "o" THEN 1 ELSE CHAIN "menu.bas"
END

FUNCTION f (x)
f = (x*x)-3
END FUNCTION
Et voilà dans la version 850p :

Code : Tout sélectionner

10 CLS:PRINT "Calcul d'aires - Méthode des trapèzes :"
20 INPUT "Fonction f(x) ";F$
30 INPUT "a ";A:INPUT "b ";B
40 N=500
50 H=(B-A)/N
60 X=A:Z1=VALF(F$):X=B:Z2=VALF(F$):S=.5*(Z1+Z2)
70 X=A
80 FOR I=1 TO N-1
90 X=X+H
100 Z=VALF(F$):S=S+Z
110 NEXT I
120 S=S*H
130 PRINT CHR$(129);"f(x) dx =";S
140 END
Merci ! :)

W.

EDIT : Ai remplacé N=500 par N=100 pour une exécution plus rapide, au prix d'un peu de perte dans la précision, mais cela reste acceptable.
EDIT ² : Finalement, j'ai même fait en sorte de pouvoir renseigner le nombre d'itérations lors de la saisie des paramètres (ça ne rigole plus ! :D) >>> 40 INPUT "Nombre d'itérations ";N 8)
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

Avatar de l’utilisateur
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 24 mars 2016 14:34

Salut,

Je viens d'avoir une idée qui m'a sauté aux yeux, comme un coup de pied dans le derrière ! :D

Puisqu'il a été possible de créer de toutes pièces l'instruction VALF$ sur d'autres Casio, ne serait-il pas possible de faire de même pour l'instrution EXIT FOR ?
Je ne sais pas du tout comment fonctionne le language machine. J'avais un bouquin sur l'assembleur, et j'ai été perdu après avoir lu ce qu'il y avait sur la couverture (pour donner une idée du niveau :p). Tout ça pour dire que je dis peut-être une énormité et que rien de tel n'est possible.

Une idée ?

Merci ! :)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

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

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par tyann » 24 mars 2016 18:50

Bonsoir
En assembleur je ne sais pas, en basic tu peux utiliser
le truc suivant.
Normalement une boucle FOR var=debut TO fin ..... NEXT se termine quand var dépasse
la valeur de fin.
Donc pour quitter une boucle prématurément, il faut mettre dans var une valeur > à fin.
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
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 25 mars 2016 11:09

Merci Tyann !

Je vais potasser tout cela dès que j'ai un peu de temps.

Bon week-end pascal. ;)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

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

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par gege » 25 mars 2016 13:14

tyann a écrit :Ceci est impossible sur les basics anciens à n° de ligne, pour pouvoir faire
cela il faut une machine plus récente comme la Ti 89 ou la Hp Prime.
Je ne sais même pas si il existe une casio même moderne qui sait faire cela ? :cry:
Probablement la ClassPad (toutes versions).
On doit pouvoir faire tracer une fonction saisie par l'utilisateur en mettant f(x) dans une des fonctions du grapheur...
Ah si elle était moins énervante cette machine, on pourrait faire tant de choses... elle est oubliée aujourd'hui.
G.E.

Avatar de l’utilisateur
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Inscription : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Casio fx-850p] Comment coder la saisie d'une fonction ?

Message par wilou » 25 mars 2016 16:07

Salut gégé,

La ClassPad fait partie d'une génération de calculatrices qui est sortie alors que j'avais fini mes études, je ne la connais pas plus que ça, mais à première vue, le fait qu'elle se pilote avec un stylet, ça me rebute, et esthétiquement, ce n'est pas ma tasse de thé (mais ça, c'est purement subjectif). Elle est toutefois séduisante, quand on voit les fonctionnalités qu'elle embarque. :)

Pour ce qui est de contourner l'absence de EXIT FOR, comme je l'évoquais, je potassais ce que Tyann a noté, et comme ça sans trop réfléchir, je me dis que si j'incrémente artificiellement le compteur, cela se fait à l'intérieur de la boucle, et de ce fait, il sera peut-être aussi délicat d'en sortir ?

On aurait un truc du genre (en condensé) ? :

Code : Tout sélectionner

10 FOR I = 1 to 100
20 IF F>0 THEN I = 100
30 IF I=100 THEN NEXT I
40 NEXT I
J'aimerais bien condenser les lignes 20 et 30 en une seule, mais je suis pas sûr de pouvoir. Je vais tester pour voir ce que ça donne. :)

Merci :)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••

Répondre

Revenir vers « Tous les Pockets »