(10C or 25C) Distance Speed Time - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Software Libraries (/forum-10.html) +--- Forum: General Software Library (/forum-13.html) +--- Thread: (10C or 25C) Distance Speed Time (/thread-21735.html) |
(10C or 25C) Distance Speed Time - Gamo - 05-13-2024 10:43 AM Program to find Distance, Speed or Time When too lazy to remember all there formular this little program will do. Use Store Register 1, 2 and 3 R1 Distance R2 Speed R3 Time Input 0 for one of the three unknow [R/S] Answer from your selected unknown Usage Example at this link: https://www.hpmuseum.org/forum/thread-21720.html Program: Quote:01 RCL 1 // Unknown Distance? Gamo 5/2024 RE: (10C or 25C) Distance Speed Time - C.Ret - 05-13-2024 10:20 PM (05-13-2024 10:43 AM)Gamo Wrote: Input 0 for one of the three unknowns Dear GAMO, Thank you for this code for the fabulous HP-25 as well as for the brilliant idea of indicating unknown values to be determined by a zero value. If I understand correctly, one must enter the three parameters distance, speed, and time in their respective registers using STO 1, STO 2, and STO 3, indicating by a zero value the unknown value one wishes to see displayed. Thus, one and only one of the three registers must be zero. Consequently, there aren't as many tests to perform as one might think; with a bit more logic, the code can be significantly shortened. For example, if we perform the product of speed by time and the result is non-zero, then we know that it is the distance that is zero or unknown. Yet we have precisely just calculated it by performing the previous product! If, on the other hand, the product of speed by time is null, then we know that the distance is a known value and thus it must be divided either by speed (to get time) or by time (to get speed). Since either speed or time is zero, dividing the distance by their sum will give the result expected by the operator. There are therefore only two operations to perform to calculate the unknown data: either the multiplication of speed by time or the division of distance by the sum of speed and time. Well, I must admit that one small detail considerably complicated the implementation of my idea; it is the conversion of time into decimal hour and a hexadecimal time as in your initial code. But the HP-25/25C calculators are full of resources. So, I managed to create a code that functions exactly like yours and produces the same results in just 14 steps: 01 RCL 2 02 RCL 3 03 →H 04 STO - 2 05 × 06 x≠0 ? 07 GTO 00 08 RCL 1 09 RCL 2 10 ÷ 11 x>0 ? 12 →H.MS 14 ABS On step 06, the product of speed × time is tested. If it is non-zero, we simply compute the unknown distance and GTO 00 to display it. At step 10, the known distance is divided by the speed or the negated time, computing respectively a positive time or a negative speed. I used a negated time as a flag to avoid the conversion to H.mmss in the case of speed computation. The final ABS instruction is needed to remove the negative sign in case of speed computation. Thank you for sharing your code and thoughts; your code and nice idea really inspire me. RE: (10C or 25C) Distance Speed Time - Thomas Klemm - 05-14-2024 01:25 AM Brilliant! We can even do without registers: Code: 01: 15 00 : g ->H Examples 12 ENTER 5 ENTER 0 R/S 2.2400 12 ENTER 0 ENTER 2.24 R/S 5.0000 0 ENTER 5 ENTER 2.24 R/S 12.0000 RE: (10C or 25C) Distance Speed Time - Gamo - 05-14-2024 04:03 AM C.Ret Thanks for the interest of this program and the more refine routine. I have try your program and some procedure not work as expected. I will use the example from the HP-12C edition to show you. Example Problem: Cycling distance is 35.08 km and took 2 hour 2 minute and 15 second ►What is the Average Speed? ►If to take 1 hour 30 minute What is the Average Speed? ►If the speed is 25 km/h How long it take to cover 35.08 km? 35.08 [STO] 1 // Input Distance 0 [STO] 2 // Unknown Speed 2.0215 [STO] 3 // Input Time ⁕[R/S] 17.2172 ≈ 17.2 km/h // Average Speed Result 1.3 [STO] 3 // Change Time Input ⁕[R/S] 23.3867 ≈ 23.4 km/h // Update the Average Speed 25 [STO] 2 // Input new data for Speed 0 [STO] 3 // Unknow Time ⁕[R/S] 1.24 ≈ 1 hour 24 minute // Update Time Result ------------------------------------------------------------ Your routine some data is not intact when input the two variables and zero on the unknown. When making data change the answer is wrong. The first example is to find Speed and when user change the Time to solve for the new Speed its doesn't work. ------------------------------------------------------------- Thank You Gamo RE: (10C or 25C) Distance Speed Time - Gamo - 05-14-2024 04:14 AM Thomas Klemm Thanks for the interest of this program and your Stack Only program is fantastic !! But when user need to update data it always have to put all "complete data on the stack" every time. Otherwise it is still a good program in it own way. Like mine program version its just the simple straightforward approach. Thank You Gamo RE: (10C or 25C) Distance Speed Time - Thomas Klemm - 05-14-2024 05:12 AM (05-14-2024 04:14 AM)Gamo Wrote: But when user need to update data it always have to put all "complete data on the stack" every time. Here's the mix of C.Ret's and my program: Code: 01: 24 02 : RCL 2 It doesn't modify the registers anymore. RE: (10C or 25C) Distance Speed Time - C.Ret - 05-18-2024 09:21 AM (05-14-2024 04:03 AM)Gamo Wrote: Your routine some data is not intact when input the two This remark is entirely relevant. I am a very lazy programmer and to save a ridiculous byte, I used the R2 register to store the converted time xor the speed by performing a subtraction in order to use the sign as the signal for the final conversion. This explains why my code gives erroneous results if the user does not restore the value in register R2. I could have used another register, but that would have made the code a little longer. Unlike Thomas, I didn't have the brilliant idea of using the LASTx register to memorize one of the non-zero parameters. I must admit that Thomas's latest version is the best compromise using the four registers without modifying the three data input ones. 01: 24 02 : RCL 2 // Speed 02: 24 03 : RCL 3 // Time (h.mms) 03: 15 00 : g →H // convert Time to h.hhh 04: 61 : × // compute distance and store decimal Time in the LASTx register 05: 15 61 : g x≠0 06: 13 00 : GTO 00 // Display computed Distance 07: 24 01 : RCL 1 // Distance 08: 24 02 : RCL 2 // Speed (or zero) 09: 14 73 : f LASTx // Time (h.hhh) (or zero) 10: 41 : - 11: 71 : ÷ // Compute Time XOR negated Speed 12: 15 51 : g x≥0 13: 14 00 : f →H.MS // back-convert Time 14: 15 03 : g ABS // make Speed positive RE: (10C or 25C) Distance Speed Time - Johnh - 05-18-2024 11:53 PM Very useful ideas, for finding a third unknown when any two out of three variables are known. Lots of other such simple cases come up in daily engineering. eg, electrical design, with capacitors, variables being frequency, impedance and capacitance. Similar for inductance Structures, stiffness properties of a rectangular beam: variables depth, width and Moment of inertia (I) Mechanics: Acceleration, time, change in velocity. Convective cooling: temperature difference, convection coefficient, rate of heat loss RE: (10C or 25C) Distance Speed Time - Gamo - 05-20-2024 09:23 AM Program update from post #1 A little shorter version. Quote:01 RCL 3 Gamo RE: (10C or 25C) Distance Speed Time - Thomas Klemm - 05-20-2024 11:41 AM (05-20-2024 09:23 AM)Gamo Wrote: A little shorter version. Code: 01: 24 01 : RCL 1 |