HP 41C and DM41: Operations by Test, Messages, Block Storage

11172020, 03:40 PM
Post: #1




HP 41C and DM41: Operations by Test, Messages, Block Storage
Blog Link: http://edspi31415.blogspot.com/2020/11/h...test.html
The programs are inspired from a great calculator resource, "Calculator Tips & Routines Especially For The HP41C/41CV", edited by John Dearing (see source below). Operations by Test One of the tips presented is the selection of one of two opposite arithmetic operations based on a comparison between X and Y values. This tip was provided by Bill Kolb (tip 27). They are: X?Y CHS (subtract if test is true) + (add if test is false) X?Y 1/X (divide if the test is true) * (multiply if the test is false) X?Y 1/X (take the root if the test is true) Y↑X (take the power if the test is false) The following programs uses the test X<Y: TESTAS: X<Y (subtract, y  x), X≥Y (adding, y + x) (^T represent the beginning of an alpha string) 01 LBL^T TESTAS 02 X<Y? 03 CHS 04 + 05 END Example: 45, 13, XEQ TESTAS returns 32 (45  13) 13, 45, XEQ TESTAS returns 58 (13 + 45) TESTMD: X<Y (divide, y/x), X≥Y (mulitply, y * x) 01 LBL^T TESTMD 02 X<Y? 03 1/X 04 * 05 END Example: 45, 13, XEQ TESTMD returns 3.4615 ( ≈ 45 / 13) 13, 45, XEQ TESTMD returns 585 (13 * 45) TESTPR: X<Y (root, y^1/x), X≥Y (power, y^x) 01 LBL^T TESTPR 02 X<Y? 03 1/X 04 Y↑X 05 END Example: 49, 3, XEQ TESTPR returns 3.6593 ( ≈ 49 ^ 1/3) 3, 49, XEQ TESTPR returns 2.3930E23 (≈ 3 ^ 49) Messages With the use of AVIEW during a loop, you can display a loop up to 12 characters while the loop is running. A CLD (clear display) is added after the loop's completion to clear the alpha display and show the stack. (tip 225) The program TESTSUM adds a message while the 41C is summing numbers from 1 to X. While this is not the most efficient way to tackle the problem, this illustrates the use of messages. 01 LBL^T TESTSUM 02 STO 01 03 0 04 STO 02 05 LBL 01 // loop begins 06 RCL 01 07 ST+ 02 08 ^T ADDING... // message 09 AVIEW // display the message 10 DSE 01 11 GTO 01 12 CLD // clear display 13 RCL 02 14 END Example: 50, XEQ TESTSUM Display: ADDING..., then 1275 Block Storage You can use indirect storage and the stack to store a constant in a block of consecutive storage registers. A sample loop: LBL %% STO IND Y ISG Y GTO %% Where %% is a label, and the loop variable is B.EEE (B: beginning register, E: ending register) stored in this case, Stack Y. (tip 101) The program LOADBLK, prompts the user enter the value, beginning register number, and ending register number. 01 LBL^LOADBLK 02 ^T VALUE 03 PROMPT 04 STO Z // keystrokes: [ STO ] [ . ] ( Y ) 05 ^T R%% BGN? 06 PROMPT 07 ^T R%% END? 08 PROMPT 09 1E3 10 / 11 + 12 STO Y 13 RDN // R↓ 14 X<>Y 15 LBL 01 16 STO IND Y // keystrokes: [ STO ] [ shift ] [ . ] ( Y ) 17 ^T STORING... // message 18 AVIEW 19 ISG Y // keystrokes: [ shift ] ( ISG ) [ . ] ( Y ) 20 GTO 01 21 ^T DONE 22 AVIEW 23 PSE 24 CLD 25 END Try this: Store π in R00 to R03 and e^1 in R04 to R07. Results: (Fix 4) R00: 3.1416 R01: 3.1416 R02: 3.1416 R03: 3.1416 R04: 2.7183 R05: 2.7183 R06: 2.7183 R07: 2.7183 Source: Dearing, John. "Calculator Tips & Routines Especially for the HP41C/41CV" Corvallis Software, Inc. Corvallis, OR. 1981 Link on ***** (account needed): http://www.*****/LibView.cfm?Command=View&ItemID=320 

« Next Oldest  Next Newest »

User(s) browsing this thread: 1 Guest(s)