Programing advice please (50g)
|
06-30-2023, 03:51 PM
Post: #1
|
|||
|
|||
Programing advice please (50g)
I need a method in RPN mode to SWAP x and y registers if x>y. I prefer full RPN without IF THEN ELSE END structures. I try « DUP2 > SWAP IFT » but it always ended with one element on the stack. Any advice?
Thank you. |
|||
06-30-2023, 04:11 PM
Post: #2
|
|||
|
|||
RE: Programing advice please (50g)
The SWAP needs to be in program quotes << SWAP >> so it gets put on the stack for IFT to execute. Without them it gets executed before IFT is reached.
Nigel (UK) |
|||
06-30-2023, 04:25 PM
Post: #3
|
|||
|
|||
RE: Programing advice please (50g)
Hi,
You can try one of these solutions too: << DUP2 > {SWAP} IFT >> << DUP2 > :: SWAP IFT >> Bruno Sanyo CZ-0124 ⋅ TI-57 ⋅ HP-15C ⋅ Canon X-07 + XP-140 Monitor Card ⋅ HP-41CX ⋅ HP-28S ⋅ HP-50G ⋅ HP-50G |
|||
06-30-2023, 04:39 PM
Post: #4
|
|||
|
|||
RE: Programing advice please (50g)
Thank you all, it worked but I struggle to understand it
|
|||
06-30-2023, 04:46 PM
Post: #5
|
|||
|
|||
RE: Programing advice please (50g)
To save a few bytes you could avoid the use of IFT altogether:
Code: \<< |
|||
06-30-2023, 07:24 PM
(This post was last modified: 07-01-2023 06:45 PM by FLISZT.)
Post: #6
|
|||
|
|||
RE: Programing advice please (50g)
(06-30-2023 04:39 PM)mchris Wrote: Thank you all, it worked but I struggle to understand it The regular syntax - as mentioned by Nigel (UK) - is: Code: << TEST << … … >> IFT >> Code: << TEST << … >> << … >> IFTE >> But instead of instructions inside chevrons, you can use lists (at least with hp-48GX … 50G / not with hp-28): Code: << TEST { … … } { … … } IFTE >> It's also possible to use a TAG :: before ONE instruction. For example: << DUP2 > :: SWAP :: DROP2 IFTE >> Last but not least example: << 1 == << 9 'l' STO+ >> IFT >> … add 9 to the register l, if the value on the stack is equal to 1. But… writing 'l' is impossible inside a list. So, if you want use lists, the only solution I know of is that one (with a TAG): << 1 == { 0 ::l STO+ } IFT >> I hope I'm clear enough… Anyway, DavidM's solution to your question is the best. Edit: typo Bruno Sanyo CZ-0124 ⋅ TI-57 ⋅ HP-15C ⋅ Canon X-07 + XP-140 Monitor Card ⋅ HP-41CX ⋅ HP-28S ⋅ HP-50G ⋅ HP-50G |
|||
06-30-2023, 08:41 PM
(This post was last modified: 07-01-2023 04:25 AM by Joe Horn.)
Post: #7
|
|||
|
|||
RE: Programing advice please (50g)
A 3-step solution: << MAX LASTARG MIN >>. This assumes the default setting for flag -55 (Save Last Args) which almost everybody leaves that way.
<0|ɸ|0> -Joe- |
|||
06-30-2023, 09:38 PM
Post: #8
|
|||
|
|||
RE: Programing advice please (50g)
(06-30-2023 04:39 PM)mchris Wrote: ...it worked but I struggle to understand it This is the fundamental nature of RPL when learning it.... --Bob Prosperi |
|||
07-01-2023, 12:48 AM
Post: #9
|
|||
|
|||
RE: Programing advice please (50g)
To get the result,
in the following order minVal (first place) maxVal (second place , in Joe Horn program, invert the command MAX and MIN as follows: << MIN LASTARG MAX >> |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)