Programing advice please (50g) - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html) +--- Forum: General Forum (/forum-4.html) +--- Thread: Programing advice please (50g) (/thread-20129.html) |
Programing advice please (50g) - mchris - 06-30-2023 03:51 PM 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. RE: Programing advice please (50g) - Nigel (UK) - 06-30-2023 04:11 PM 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) RE: Programing advice please (50g) - FLISZT - 06-30-2023 04:25 PM Hi, You can try one of these solutions too: << DUP2 > {SWAP} IFT >> << DUP2 > :: SWAP IFT >> RE: Programing advice please (50g) - mchris - 06-30-2023 04:39 PM Thank you all, it worked but I struggle to understand it RE: Programing advice please (50g) - DavidM - 06-30-2023 04:46 PM To save a few bytes you could avoid the use of IFT altogether: Code: \<< RE: Programing advice please (50g) - FLISZT - 06-30-2023 07:24 PM (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 RE: Programing advice please (50g) - Joe Horn - 06-30-2023 08:41 PM A 3-step solution: << MAX LASTARG MIN >>. This assumes the default setting for flag -55 (Save Last Args) which almost everybody leaves that way. RE: Programing advice please (50g) - rprosperi - 06-30-2023 09:38 PM (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.... RE: Programing advice please (50g) - Gil - 07-01-2023 12:48 AM 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 >> |