11-17-2020, 03:40 PM

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 HP-41C/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 2-7). 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 2-25)

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 10-1)

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 HP-41C/41CV" Corvallis Software, Inc. Corvallis, OR. 1981

Link on ***** (account needed):

http://www.*****/LibView.cfm?Command=View&ItemID=320

The programs are inspired from a great calculator resource, "Calculator Tips & Routines Especially For The HP-41C/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 2-7). 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 2-25)

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 10-1)

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 HP-41C/41CV" Corvallis Software, Inc. Corvallis, OR. 1981

Link on ***** (account needed):

http://www.*****/LibView.cfm?Command=View&ItemID=320