Saturday, August 3, 2024

HP 71B: Basic Expanded RPN Program (RPNT)

 HP 71B: Basic Expanded RPN Program (RPNT)


Introduction


This program is an expansion of RPNBASIC that was posted on May 12, 2024. See the original program here (which is itself re-posted from 2016):


https://edspi31415.blogspot.com/2016/08/hp-71b-basic-rpn.html


Changes:

* All registers are now represented with single letter variables.


* Added functions: trigonometric and inverse trigonometric functions, random numbers, factorial of positive integers, degree/radian conversion, polar/rectangular conversion, memory-plus function (M+)


* Code fixed to take the lesser memory bytes possible.


Memory Used:


U = temporary register

X = x stack

Y = y stack

Z = z stack

T = t stack

L = last x register

M = memory register



Keys


Stack Operation


[ END LINE ]: Enters a number. The number is placed on the X stack while everything else is pushed up one level. Note: The key string code for END LINE is #38.


[ ↑ ]: Swap: swaps the contents of X and Y stacks. The key string code for ↑ is #50.


[ ↓ ]: Roll Down: brings the stack contents down one level (T to Z, Z to Y, Y to X, X wraps around to T). The key string code for ↓ is #51.


[ f ] [ ↓ ] (-LINE): Drop: Drops the stack down, Y replaces X, Z goes to Y, and T is copied to Z. This is effectively erasing the contents of stack X, and is similar to the HP 48’s DROP command. The key string code for -LINE is #107.


[ f] [ ) ] (COPY): Duplicate: Duplicates the contents of the X stack to the Y stack, after Y transfer to Z and Z transfers to T. This command is similar to the HP 48’s DUP command. The key string code for COPY is f) (small F, right parenthesis).


[ P ]: Pi (π): Enters the numeric constant π to the X stack and pushes everything else up. The contents of the T stack are lost.


[ M ]: Stores the contents of X into the memory register.


[ S ]: Adds the contents of X to the memory register (M+).


[ g ] [ M ] (m): Recalls the contents of the memory register to the X stack and pushes everything else up. The contents of the T stack are lost.


[ f ] [ END LINE ] (RES): Recalls the contents of the last X register to the X stack and pushes everything else up. The contents of the T stack are lost. The key string code for RES is #94.


[ N ]: Negate: changes the sign of the X stack. This is the change sign key.



Arithmetic and Two-Argument Operations


All these operations update the Last X register. The contents of the Z register get copied to the Y register, then the contents of T gets copied to Z.


[ + ]: Addition: Y + X.


[ - ]: Subtraction. Y – X.


[ * ]: Multiplication. Y * X


[ / ]: Division: Y / X


[ g ] [ / ] (^) : Power: Y^X


[ g ] [ 5 ] (%): Modulus. mod(Y,X)



One-Argument Operations


All these operations update the Last X register. No other stack levels are affected.


[ f ] [ / ] (SQR): Principal (positive) Square Root of X. The key string code for SQR is f/ (small f, division).


[ U ]: Square of X. (X^2 = X * X).


[ I ]: Reciprocal of X. (1/X)


[ F ]: Fractional part of X.


[ g ] [ F ] (f): Integer part of X.


[ f ] [ - ] (LOG): Natural logarithm of X. ln(X) The key string code for LOG is f- (small f, subtraction).


[ f ] [ * ] (EXP): Exponential of X. e^X (e is about 2.71828...) The key string code for EXP is f* (small f, multiplication).


[ f ] [ 4 ] (SIN): Sine of X.


[ f ] [ 5 ] (COS): Cosine of X


[ f ] [ 6 ] (TAN): Tangent of X


[ f ] [ 1 ] (ASIN): Arc-sine of X


[ f ] [ 2 ] (ACOS): Arc-cosine of X


[ f ] [ 3 ] (ATAN): Arc-tangent of X


[ D ]: Change to Degrees mode


[ g ] [ D ] (d): Convert X from radians to degrees


[ R ]: Change to Radians mode


[ g ] [ R ] (r): Convert X from degrees to radians


[ g ] [ 3 ] (#): Generate a random number between 0 and 1.


[ f ] [ = ] (FACT): Factorial of X. X must be a positive integer.


[ f ] [ , ] ( > ): Convert rectangular to polar. X: x-coordinate to radius, Y: y-coordinate to angle


[ f ] [ . ] ( < ): Convert polar to rectangular. X: radius to x-coordinate, Y: angle to y-coordinate



HP 71B Basic Program Code: RPNT

Memory: 1253 bytes 


10 DESTROY U,X,Y,Z,T,M,L,K$

15 DIM U,X,Y,Z,T,M,L,K$

20 DISP “RPN BASIC” @ WAIT 1

22 DISP “EXIT = E” @ WAIT 1

25 DELAY 0,0

30 DISP “X: “; X

35 K$ = KEY$

40 IF K$=”E” THEN DISP “THANK YOU.” @ STOP


60 IF K$=”#38” THEN 300

62 IF K$=”#50” THEN U=X @ X=Y @ Y=U

64 IF K$=”#51” THEN U=X @ X=Y @ Y=Z @ Z=T @ T=U

66 IF K$=”#107” THEN X=Y @ Y=Z @ Z=T

68 IF K$=”f)” THEN T=Z @ Z=Y @ Y=X

70 IF K$=”P” THEN U=PI @ GOTO 304

72 IF K$=”M” THEN M=X

73 IF K$=”S” THEN M=X+M

74 IF K$=”m” THEN U=M @ GOTO 304

76 IF K$=”#94” THEN U=L @ GOTO 304

78 IF K$=”N” THEN X=-X


80 IF K$=”+” THEN U=Y+X @ GOTO 310

82 IF K$=”-” THEN U=Y-X @ GOTO 310

84 IF K$=”*” THEN U=Y*X @ GOTO 310

86 IF K$=”/” THEN U=Y/X @ GOTO 310

88 IF K$=”^” THEN U=Y^X @ GOTO 310

90 IF K$=”%” THEN U=MOD(Y,X) @ GOTO 310


100 IF K$=”f/” THEN L=X @ X=SQR(X)

102 IF K$=”U” THEN L=X @ X=X^2

104 IF K$=”A” THEN L=X @ X=ABS(X)

106 IF K$=”I” THEN L=X @ X=1/X

108 IF K$=”F” THEN L=X @ X=FP(X)

110 IF K$=”f” THEN L=X @ X=IP(X)

112 IF K$=”f-” THEN L=X @ X=LOG(X)

114 IF K$=”f*” THEN L=X @ X=EXP(X)

116 IF K$=”f4” THEN L=X @ X=SIN(X)

118 IF K$=”f5” THEN L=X @ X=COS(X)

120 IF K$=”f6” THEN L=X @ X=TAN(X)

122 IF K$=”f1” THEN L=X @ X=ASIN(X)

124 IF K$=”f2” THEN L=X @ X=ACOS(X)

126 IF K$=”f3” THEN L=X @ X=ATAN(X)

128 IF K$=”D” THEN DEGREES

130 IF K$=”R” THEN RADIANS

132 IF K$=”d” THEN L=X @ X=DEG(X)

134 IF K$=”r” THEN L=X @ X=RAD(X)

136 IF K$=”#” THEN L=X @ U=RND @ GOTO 304

138 IF K$=”f=” THEN L=X @ X=FACT(X)

140 IF K$=”>” THEN L=X @ X=SQR(L^2+Y^2) @ Y=ANGLE(L,Y)

142 IF K$=”<” THEN L=X @ X=L*COS(Y) @ Y=L*SIN(Y)

199 GOTO 30


300 INPUT “NUMBER? “; U

302 ! STACK

304 T=Z @ Z=Y @ Y=X @ X=U

306 GOTO 30


310 ! 2 ARG

312 L=X @ X=U @ Y=Z @ Z=T

314 GOTO 30



Example Calculations


1. Find the percent change from 8000 to 12000. Formula: (12000 – 8000) / 8000 * 100


Keystrokes:

[END LINE] 12000 [END LINE]

[END LINE] 8000 [END LINE]

[ - ]

[ f ] [END LINE] (RES) <LASTx>

[ / ]

[END LINE] 100 [END LINE]

[ * ]


Result: 50 (50%)



2. e^(2*π – 1)


Keystrokes:

[END LINE] 2 [END LINE]

[ P ] <enter π to the stack>

[ * ]

[END LINE] 1 [END LINE]

[ - ]

[ f ] [ * ] (EXP) <exp(x) =e^x>


Result: 196.996371


3. 1/(1/9 + ln 11 + 8^2)


Keystrokes:

[END LINE] 9 [END LINE]

[ I ] <1/x>

[END LINE] 11 [END LINE]

[ f ] [ - ] (LOG) <ln(x)>

[ + ]

[END LINE] 8 [END LINE]

[ U ] <x^2>

[ + ]

[ I ]


Result: 1.50355576541E-2


4. Use the memory register to calculate: 3 * 18 + 8 * 17


Keystrokes:

[END LINE] 3 [END LINE]

[END LINE] 18 [END LINE]

[ * ]

[ M ] <store into memory>

[END LINE] 8 [END LINE]

[END LINE] 17 [END LINE]

[ * ]

[ S ] <add to memory>

[ g ] [ M ] (m) <recall memory>


Result: 190


5. Find the arc-sin of 0.5 in degrees and radians


Keystrokes:

[ D ] <set degrees mode>

[END LINE] 0.5 [END LINE]

[ f ] [ ) ] (COPY) < copies 0.5 to Y >

[ f ] [ 1 ] (ASIN) < Result: 30 degrees >

[ ↑ ] < swap >

[ R ] < set radians mode, RAD indicator is on >

[ f ] [ 1 ] (ASIN) < Result: 0.523598775598 radians >



6. Calculate | 99 – 164 * 1.03^3 |


Keystrokes:

[END LINE] 99 [END LINE]

[END LINE] 164 [END LINE]

[END LINE] 1.03 [END LINE]

[END LINE] 3 [END LINE]

[ g ] [ / ] (^)

[ * ]

[ - ]

[ A ] < absolute value >


Result: 80.207228


7. Convert Rectangular to Polar with X = 4, Y = 5. Calculate the angle in degrees mode.


Keystrokes:

[ D ] <set degrees mode>

[END LINE] 5 [END LINE] <enter y first>

[END LINE] 4 [END LINE] <enter x next>

[ g ] [ , ] ( > ) < rectangular to polar>


Display: 6.40312423743 (radius)

[ ↑ ] <swap>

Display: 51.3401917459 (angle)


8. Convert Polar to Rectangular with R = 11, θ = 60°.


Keystrokes:

[ D ] <set degrees mode>

[END LINE] 60 [END LINE] <enter θ first>

[END LINE] 11 [END LINE] <enter r next>

[ g ] [ . ] ( < ) <polar to rectangular>


Display: 5.5 (x)

[ ↑ ]

Display: 9.52627944162



Eddie


All original content copyright, © 2011-2024. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.


Numworks: Allowing Repeated Calculations in Python

Numworks: Allowing Repeated Calculations in Python Introduction Say we want the user to repeat a calculation or a routine for as lo...