Home |
Logithèque |
HP42S
Traceur de courbe avec stockage du graphe
Code
LBL "PLOT2" MVAR "XMIN" MVAR "XMAX" MVAR "YMIN" MVAR "YMAX" LCLBL CF 00 SF 27 SF 34 SF 35 RTN
"Remise a Zero" AVIEW LBL 18 8 STO 06 66 STO 07 2 22 NEWMAT STO "GRAPH" INDEX "GRAPH" "÷÷÷÷÷÷" ASTO ST X LBL 01 STOEL I+ FC? 77 GTO 01 CLST RTN
VARMENU "PLOT2" "PARAMETRES" AVIEW STOP "Fonction ?" AVIEW CLA SF 25 ARCL "FCN" CF 25 AON STOP AOFF ASTO "FCN" VARMENU IND "FCN" STOP ASTO 00 EXITALL
"Trace" AVIEW RCL "XMAX" RCL "XMIN" STO IND 00 - 131 ÷ STO 02 FS?C 01 |
XEQ15 15 RCL "YMIN" RCL - "YMAX" ÷ STO 03 1,131 STO 01 CLLCD XEQ 10 LBL 03 XEQ IND "FCN" RCL - "YMAX" RCL 03 x 1 + RCL 01 XEQ 05 RCL 02 STO + IND 00 ISG 01 GTO 03 SF 27 GTO 06 LBL 05 IP X<>Y IP X<=0? RTN 17 X<=Y? RTN RDN X<>Y PIXEL STO 04 5 + 6 ÷ IP X<>Y STO 05 8 ÷ IP 1 + X<>Y SF 25 STOIJ FC?C 25 RTN RCLEL CLA ARCL ST X RCL 04 1 - 6 MOD AROT ATOX |
RCL 05 8 MOD 2 X<>Y Y^X OR XTOA RDN 1 + +/- AROT ASTO ST X STOEL RTN LBL 10 RCL "YMAX" RCL 03 x 1 - X>0? -20 RCL "XMIN" RCL 02 ÷ 1 - X<0? GTO 11 RDN -200 LBL 11 PIXEL RTN LBL 17 CLLCD INDEX "GRAPH" RCLIJ LBL 07 RCLEL CLA ARCL ST X RDN AGRAPH 6 + J+ FC? 76 GTO 07 9 1 FC? 77 GTO 07 GTO 10
XEQ 17 LBL 06 "££4H" RCL 06 RCL 07 AGRAPH GETKEY RDN |
AGRAPH RUP CLA XTOA ASTO ST X "££££" 30 XTOA RDN POSA X<0? GTO 06 2 - X=0? GTO 09 ABS 2 X=Y? GTO 08 LAST X STO + 07 GTO 06 LBL 08 LAST X SIGN STO + 06 GTO 06 LBL 09 XEQ 12 VIEW ST X RTN GTO D LBL 12 RCL "YMAX" 1 RCL 06 - RCL 03 ÷ - RCL "XMIN" 1 RCL 07 - RCL 02 x - RTN
"Zoom" AVIEW STO 04 X<>Y STO 05 RCL "XMAX" RCL "YMAX" COMPLEX 2 ÷ RCL "XMIN" RCL "YMIN" COMPLEX 2 ÷ |
+ ENTER ENTER LAST X - LAST X - COMPLEX X<>Y RCL x 04 X<>Y RCL x 05 COMPLEX + ENTER ENTER LAST X - LAST X - COMPLEX STO "YMIN" RDN STO "XMIN" RDN COMPLEX STO "YMAX" RDN STO "XMAX" FC? 02 XEQ 18 GTO C
XEQ 13 "F(X)=" ARCL ST X AVIEW RTN
"ROOT" AVIEW XEQ 12 STO IND 00 PGMSLV IND "FCN" SOLVE IND 00 "Root=" ARCL ST X AVIEW RTN
"Slope" AVIEW XEQ 13 STO 01 1E-8 1 + STO x IND 00 XEQ IND "FCN" RCL 01 - 1E8 x RCL IND 00 |
÷ t"=" ARCL ST X AVIEW RTN
XEQ 12 STO IND 00 XEQ IND "FCN" RTN
XEQ 12 FS?C 00 GTO 14 SF 00 STO "LLIM" "MARK" AVIEW RTN LBL 14 "S" AVIEW STO "ULIM" 1E-3 STO "ACC" PGMINT IND "FCN" INTEG IND 00 "S=" ARCL ST X AVIEW RTN
t"-Autoscaling" AVIEW 1,13104 STO 01 1E499 STO 04 +/- STO 05 LBL 16 XEQ IND "FCN" ENTER RCL 04 X<>Y X<Y? STO 04 RCL 05 X<>Y X>Y? STO 05 RCL 02 STO + IND 00 ISG 01 GTO 16 RCL "XMIN" STO IND 00 RCL 04 STO "YMIN" RCL 05 STO "YMAX" FC? 02 GTO 18 END |
Taille : 894 octets.
Mode d'emploi
Il faut d'abord programmer la ou les fonctions à grapher sous la forme de programmes prenant une valeur sur la pile en X et renvoyant le résultat en X. La pile est librement utilisable dans le programme.
XEQ "PLOT2" initialise de façon non destructrice. Ensuite, les touches utilisateur A à I sont actives et offrent les fonctions suivantes :
A Remise à zéro. Efface le graphe B Entrée du domaine, de la fonction, puis tracé C Tracé de la courbe + passage en mode curseur D Réaffichage de la courbe + passage en mode curseur E Zoom. >1 => zoom out. En X : zoom en x, en Y : zoom en y (>0) F Calcule f(x) G Racine la plus proche du X courant H Pente en X I Intégrale. Premier appel=borne inférieure, 2ème=borne supérieure et calcul.
On notera que comme le graphe est sauvegardé, on peut à tout moment programmer une nouvelle fonction ou réaliser des calculs sans perdre ce dernier. L'effacement de l'écran doit toujours être demandé explicitement (par A), ce qui permet de superposer un nombre quelconque de graphes. La fonction C permet de faire ce que l'on veut sans craindre de perdre le graphe, il sera réaffiché à volonté.
Pour des raisons évidentes la fonctionnalité de trace n'est pas implémentée...
Les fonctions B, C et D aboutissent à l'affichage de la courbe et au passage en mode curseur, c'est à dire qu'on peut déplacer le curseur à l'écran avec les touches suivantes :
8 4
6 2
Si on lève (manuellement) le drapeau 01, il y a autoscaling à l'appel de B ou C.
Si on lève le drapeau 02, le zooming n'efface pas mais se superpose aux graphes précédents.
Fonctionnement du programme
Ce programme dérive de celui listé dans le manuel de la machine. Il a été étendu pour permettre de conserver le graphe entre deux appels successifs, ce qui permet des saisies de paramètres et de revoir le graphe, de superposer des courbes...
Le pilotage se fait avec les labels locaux, mode sélectionné par LCLBL au début.
Le principale caractéristique du programme est le stockage des pixels de l'écran, qui est fait dans une matrice alphabétique ! Cette possibilité n'est présente que sur la HP42S ou des machines haut de gammes bien ultérieures...
La matrice fait 2 lignes de 22 colonnes, ce qui correspond à la taille de l'affichage (lignes x colonnes). On l'initialise avec des chaînes de 6 caractères de code zéro, qui sont "÷" (voir LBL 18). Elle contient directement les chaînes de 6 caractères codant 6 colonnes de 8 points utilisable pour AGRAPH.
La création d'un curseur et son déplacement est facile en utilisant AGRAPH dans le mode graphique XOR.
La détection de la touche pressée en mode curseur se base sur une chaîne de caractères et la fonction POSA, qui combinées donnent l'équivalent d'un ON ... GOTO Basic (voir LBL 06). Les codes de la chaîne correspondante sont XX XX XX XX. La chaîne de caractères sur la ligne suivant le LBL 06 a elle les codes XX XX XX XX, c'est le curseur - vous pouvez le modifier à loisir. Enfin, le caractère S dans le LBL 14 est le caractère d'intégrale.
Les labels autres que les fonctions ou de simples boucles ont les rôles suivants (X et Y sont les registres de la pile) :
|
Affiche et mémorise le pixel de coordonnées (X, Y) | |
|
Affiche le curseur et gère les déplacements | |
|
Affiche ou efface le curseur | |
|
Renvoie les X et Y courants du curseur | |
|
Renvoie f(X) pour le X courant | |
|
2ème étape du calcul d'intégrale | |
|
Autoscaling | |
|
Affiche le buffer écran | |
|
Effacement du buffer écran |
Les variables nommées utilisées sont :
XMIN | Borne inférieure des X à grapher | |
XMAX | Borne supérieure des X à grapher | |
YMIN | Borne inférieure des Y à grapher | |
YMAX | Borne supérieure des Y à grapher | |
GRAPH | Buffer écran (matrice) | |
FCN | Nom du programme contenant la fonction | |
(Registre 00) | Nom de la variable indépendante | |
LLIM | Limite inférieure de l'intervalle d'intégration | |
ULIM | Limite supérieure de l'intervalle d'intégration | |
ACC | Précision de calcul de l'intégrale |
Il reste un label local non utilisé, J, mais je ne vois pas quoi y mettre.