The Museum of HP Calculators

HP Forum Archive 06

 Programming ChallengeMessage #1 Posted by Luca de Alfaro on 7 Nov 2001, 9:51 p.m. Here is a programming challenge for the RPN addicts. Write a program that takes as input in the stack: z: a y: b x: c and outputs y: (-b - sqrt(b^2 - 4ac))/(2a) x: (-b + sqrt(b^2 - 4ac))/(2a) (the solutions to the 2nd degree equation, assuming that they are real). The program should use only the stack and the Last_x register, but no other registers. The solution should be developed for the 11C or 15C or 32SII architecture (i.e., no HP48 extensions allowed, and in particular, no PICK instructions). I have a 35-ish step solution that uses Last_x. The solution is not particularily optimized, and I am not sure that Last_x is really needed. The contest is open for the shortest solution, and for a solution without Last_x! Luca

 Re: Programming ChallengeMessage #2 Posted by Vieira, Luiz C. (Brazil) on 8 Nov 2001, 12:09 a.m.,in response to message #1 by Luca de Alfaro Hello; I wrote this based in an example given at the HP42S Programming Examples and Technics (p.75), which is based in the original for the HP41, published in one HP Key Notes V6 N2, p. 14. The small routine was created by Paul Baker (Stillwaker, Oklahoma) and I include it's original in here, too. This program changed my way of searching for a solution. Both roots are found AND complex solution was available (flag 0 set). This is the original listing: ```LBL SOL X<> Z ST/ Z / -2 / ENTER^ ENTER^ X^2 R^ CF 00 X>Y? SF 00 - ABS SQRT ST- Z X<>Y FC? 00 + .END. ``` Just enter a, b and c and run it. If flag 0 is set, complex results. This is my (morphed) listing for the HP11C. Enter a, b and c and run it. ```ENTER R^ ÷ R^ LASTx ÷ 2 CHS ÷ ENTER ENTER x^2 R^ - SF 0 X<0 CF 0 ABS sqrt ENTER R^ x<>y - LASTx R^ F? 0 + ``` If there is nothing wrong, it should work, even for complex results (real in X, imaginary in Y. Or the opposite...). In this program, flag 0 is clear for complex results. It is 27 steps long (29 if LBL and RTN or R/S are added), but I believe wizards in here will make it look too long... My R\$0.25

 Re: Programming Challenge - One step shorterMessage #3 Posted by Vieira, Luiz C. (Brazil) on 8 Nov 2001, 9:21 p.m.,in response to message #2 by Vieira, Luiz C. (Brazil) Hello; The program works fine without one step. ```ENTER R^ ÷ R^ LASTx ÷ 2 CHS ÷ ENTER ENTER x^2 R^ - SF 0 X<0 CF 0 ABS sqrt ENTER <- this ENTER can be removed R^ x<>y - LASTx R^ F? 0 + ``` Anything else is kept. Now it is 26 step long plus LBL and RTN or R/S.

 Re: Programming ChallengeMessage #4 Posted by Luca de Alfaro on 9 Nov 2001, 2:38 a.m.,in response to message #2 by Vieira, Luiz C. (Brazil) Very nice solutions! Luca

 Re: Programming ChallengeMessage #5 Posted by Fred Lusk (CA) on 8 Nov 2001, 9:40 p.m.,in response to message #1 by Luca de Alfaro Greetings... I whipped this out in about 10 minutes. It is part elegent and part brute force (i.e. I'm sure it can be improved), and is for the HP-42S. I don't have the other models. Sorry. 01 LBL "QE" 02 RCLx ST Z 03 4 04 x 05 X<>Y 06 ENTER 07 X^2 08 RCL- ST Z 09 SQRT 10 R^ [ROLL UP] 11 -2 12 x 13 X<>Y 14 STO- ST Z 15 STO+ ST T 16 R\ [ROLL DOWN] 17 STO/ ST Z 18 / 19 END Fred

 Re: Programming ChallengeMessage #6 Posted by Fred Lusk on 8 Nov 2001, 9:48 p.m.,in response to message #5 by Fred Lusk (CA) Well, it was in columns when I typed it. Let's try it again. BTW...how did you get two fonts in your messages? Are there some codes I need to know? 01 LBL "QE" 02 RCLx ST Z 03 4 04 x 05 X<>Y 06 ENTER 07 X^2 08 RCL- ST Z 09 SQRT 10 R^ [ROLL UP] 11 -2 12 x 13 X<>Y 14 STO- ST Z 15 STO+ ST T 16 R\ [ROLL DOWN] 17 STO/ ST Z 18 / 19 END Fred

 Re: Programming ChallengeMessage #7 Posted by Vieira, Luiz C (Brazil) on 9 Nov 2001, 3:49 a.m.,in response to message #6 by Fred Lusk Hello; try Advanced Format Technics http://www.hpmuseum.org/artfmt.htm. Your listing would be like this: ```01 LBL "QE" 02 RCLx ST Z 03 4 04 x 05 X<>Y 06 ENTER 07 X^2 08 RCL- ST Z 09 SQRT 10 R^ [ROLL UP] 11 -2 12 x 13 X<>Y 14 STO- ST Z 15 STO+ ST T 16 R\ [ROLL DOWN] 17 STO/ ST Z 18 / 19 END ``` Just place a [pre] in the start of it and a [/pre] at its end. Cheers.

 Re: Programming ChallengeMessage #8 Posted by Fred Lusk (CA) on 11 Nov 2001, 12:55 a.m.,in response to message #7 by Vieira, Luiz C (Brazil) Luiz.... Thanks. Now I remember having seen that before. Must have been a "senior moment" (and I'm only 43). Fred

 Re: Programming ChallengeMessage #9 Posted by Vieira, Luiz C. (Brazil) on 11 Nov 2001, 2:24 p.m.,in response to message #8 by Fred Lusk (CA) Hello; I'm about to believe that, with some exceptions, we're most at the average of 35-40. I'm 40. So, please, having a "senior moment" is almost like "carpe diem". At least for us, 40's. (as long as it doesn't take all day long...) Cheers.

 Re: Programming ChallengeMessage #10 Posted by Rupert (Northern Italy, EU) on 10 Nov 2001, 2:04 p.m.,in response to message #1 by Luca de Alfaro Some better solutions have already been posted, anyway here is my version for the HP32SII and the HP15C (for real solutions only): ```ENTER R^ / CHS R^ LASTx / 2 / CHS X^2 LASTx ENTER Rv Rv + SQRT - x<>y LASTx + ``` Cannot resist to write it for the HP41, too: ```ENTER R^ ST/ T / CHS R^ 2 / CHS STO Z STO T X^2 + SQRT - X<>Y LASTX + ```

 Re: Programming ChallengeMessage #11 Posted by doug on 10 Nov 2001, 11:06 p.m.,in response to message #1 by Luca de Alfaro I am not really formally trained in math, and haven't sat in a algebra or math classroom since high school, but, are you trying to solve a quadratic equation by setting it (=0) and then entering the numerical coefficient's without having to write a parse scan routine? Just wanted to make sure I understand.

 Re: Programming ChallengeMessage #12 Posted by Vieira, Luiz C (Brazil) on 11 Nov 2001, 8:07 a.m.,in response to message #11 by doug Hello; the basic challenge is: having a, b and c from ```ax^2+bx+c=0 (y=0) ``` what is the shortest routine that gives us x1 and x2 that solve the equation. The programs herein should get a, b and c from the stack and return x1 and x2: ``` --- T --- c Z --- b Y -> x2 a X -> x1 --- L -> (if not used, better) ``` That`s what Luca proposed. Cheers.

Go back to the main exhibit hall