Téma zabývající se Výpočtem dne v týdnu a počtu dní mezi dvěma daty je nejprve zpracováno pro ryzí RPN kalkulátory. Navazujícím tématem je varianta výpočtu pro HP-50g, tedy kalkulátor RPL. Stejnou situaci přináší i toto téma. Výpočet data velikonoční neděle pro RPN kalkulátor HP-35s je zde řešen pro kalkulátor RPL, kterým je opět HP-50g (nebo jiný z řady HP-48/49).
Zdrojový text | ↑ ↓ |
Textový výpis programu (jeho výkonná část bez úvodních kontrol) nemá obvyklou strukturovanou podobu, jak ji nabízí kalkulátor. Dalo by se říci, že níže vyobrazený text je krokem zpět, neboť se podobá spíše RPN programu. Důvod je ale zřejmý - komentáře tvoří sloupce obsahů jednotlivých úrovní stacku. Názvy proměnných g, c, x, z, d, e, n, m, f, h a jediného argumentu y funkce easter() v původním řešení pro HP-35s jsou použity i zde. Lze tedy snadno konfrontovat obě verze programu: HP-35s vs. HP-50g.
« IF DEPTH 0. ≤ THEN DATE 100. * FP 10000. * END 1. → y g « CASE y TYPE 0. == THEN END y TYPE 28. == THEN END y # 202h DOERR END IF y 1582. < THEN y # 203h DOERR END y IP 'y' STO y @ y 19. @ 19 y MOD @ y % 19 'g' @ 'g' y % 19 STO+ y @ y 100. @ 100 y / @ y/100 IP @ intg(y/100) 1. @ 1 intg(y/100) + @ c=intg(y/100)+1; DUP @ c c 0.75 @ 0.75 c c * @ 0.75c c IP @ intg(0.75c) c 2. @ 2 intg(0.75 c) c - @ x=intg(0.75c)-2; c SWAP @ c x 0.32 @ 0.32 c x * @ 0.32c x 0.2 @ 0.2 0.32 c x + @ 0.32c+0.2 x IP @ z=intg(0.32c+0.2); x SWAP @ x z DUP @ x x z y @ y x x z 1.25 @ 1.25 y x x z * @ 1.25y x x z IP @ intg(1.25y) x x z SWAP @ x intg(1.25y) x z - @ d=intg(1.25y)-x; x z UNROT @ x z d 11. @ 11 x z d g @ g 11 x z d * @ 11g x z d 25. @ 25 11g x z d + @ 11g+25 x z d SWAP @ x 11g+25 z d - @ 11g+25-x z d + @ 11g+25+z-x d 30. @ 30 11g+25+z-x d MOD @ e=(11g+25+z-x)%30; d 24. @ 24. e d - @ f=e-24 d IF DUP @ f f d THEN 11. @ 11 f d g @ g 11 f d - @ 11-g f d SIGN @ sign(11-g) f d 2. @ 2 sign(11-g) f d / @ sign(11-g)/2 f d IP @ intg(sign(11-g)/2) f d NEG @ h=-intg(sign(11-g)/2) f d OVER @ f h f d == @ 1nebo0 f d ELSE 1. @ 1 f d END + @ f=f+1nebo0; d NEG @ n=-f; d DUP @ n n d IF 0 @ 0 n n d ≤ @ 1nebo0 n d THEN 30. @ 30 n d + @ n=n+30; d END 20. @ 20 n d + @ n=n+20; d DUP @ n n d 7. @ 7 n n d + @ n+7 n d UNROT @ n d n+7 + @ d+n n+7 7. @ 7 d+n n+7 MOD @ (d+n)%7 n+7 - @ m=n+7-(d+n)%7; DUP @ m m y @ y m m UNROT @ m m y IF 31. @ 31 m m y > @ 1nebo0 m y THEN 31. @ 31 m y - @ m=m-31; y 4. @ 4=duben m y ELSE 3. @ 3=brezen m y END SWAP @ m 3nebo4 y IFERR { HOME PRGM ML20 ML20REQ } @ path m 3nebo4 y RCL @ << >> m 3nebo4 y THEN DROP @ m 3nebo4 y ELSE EVAL @ "YYYY-MM-DD" END » »
Použití programu | ↑ ↓ |
Tady je jakékoliv povídání ztrátou času. Použití je nehorázně snadné. Stačí:
Celý postup s možnými tvary výsledků ukazují následující obrázky.
Program využívá pro zobrazení výsledku v notaci "YYYY-MM-DD" podprogram ML20REQ (kompletní cesta je { HOME PRGM ML20 ML20REQ }). Pokud podprogram z nějakých důvodů není k mání, výstupem jsou tři hodnoty v pořadí ROK, MĚSÍC, DEN uložené na stack.
Kde to vzít? | ↑ ↓ |
Textový tvar | Binární forma |
---|---|
EASTR | EASTR.hp |