Předobrazem tohoto tématu úplně poprvé v dějinách stránek RPNmania není předchozí řešení pro nějaký RPN kalkulátor. Tentokrát se jedná o RPL program napsaný z voleje pro HP-50g.
Zdrojový text | ↑ ↓ |
Upřímně řečeno, tak úplně z voleje to není. Popis prvního zde zveřejněného RPL programu totiž naznačuje, že srozumitelnost RPL kódu není zrovna nejvyšší. Další v pořadí si vypomáhá zdrojovým kódem v "Céčku". A protože osvědčené postupy by se neměly měnit, i zde je na vysvětlenou krátký program v jazyku C. Celý je obsažen v jediném modulu roman.c. (Eventuálním čtenářům se prudce doporučuje zevrubná prohlídka tohoto souboru před započetím studia objektu ROMAN. V dalším povídání je se znalostí zmíněného programového modulu počítáno.)
Zde již výpis RPL kódu:
« DUP TYPE IF DUP 28. == THEN DROP I→R IF DUPDUP 1. < SWAP 3999. > OR THEN "Bad Range: " SWAP →STR + DOERR END 0. ELSE CASE DUP 2. == THEN END DUP 6. == THEN SWAP →STR DUP SIZE 1. - 2. SWAP SUB SWAP END DROP "Bad Argument: " SWAP + DOERR END END "IVXLCDM" → sromt « IF THEN { 1. 5. 10. 50. 100. 500. 1000. } { } → svalt result « DO DUP HEAD sromt SWAP POS DUP IF NOT THEN DROP "Unknown Digit: " SWAP + DOERR END svalt SWAP GET → cval « 'result' cval STO+ result 1. « ABS cval < » DOLIST 0. + ∑LIST DUP IF 2. ≥ THEN DROP "Unexpected Digit: " SWAP + DOERR END IF THEN 'result' result SIZE 1. - DUP2 GET NEG PUT END » UNTIL TAIL DUP SIZE NOT END DROP result 0. + ∑LIST R→I » ELSE 1000. sromt SIZE "" → divisor sidx result « DO DUP divisor / IP DUP UNROT divisor * - SWAP IF DUPDUP 4. == SWAP 9. == OR THEN 'result' sromt sidx DUP SUB STO+ 'result' sromt ROT 9. == 1. + sidx + DUP SUB STO+ ELSE WHILE DUP REPEAT sidx OVER IF 5. ≥ THEN 1. + SWAP 4. - SWAP END DUP sromt UNROT SUB 'result' SWAP STO+ 1. - END DROP END 'sidx' 2. STO- UNTIL divisor 10. / IP DUP 'divisor' STO NOT END DROP result » END » »
Zajímavosti v řešení | ↑ ↓ |
Podrobně rozebírat program zabírající několik řádků textu je určitě zbytečné. Přesto obsahuje dvě finesy (první je docela pěkná, ta druhá fakt hodně blbá; obě v části převodu římských čísel na arabská), na které stojí za to poukázat.
Použití programu | ↑ ↓ |
Stejně jako v minulém případě nemá smyslu ztrácet čas povídáním. Stačí zadat jednu ze dvou možných hodnot:
Pozn.: Vysvětlivky k barvám podkladu Soft KEYs jsou opět zde.
Pár hodnot na vyzkoušení | ↑ ↓ |
Nejprve důležité dějinné události...
Letopočet | Událost | |
---|---|---|
1492 | MCDXCII | Objevení Ameriky |
1789 | MDCCLXXXIX | Francouzská buržoazní revoluce |
1878 | MDCCCLXXVIII | Narození Jana Łukasiewicze |
1919 | MCMXIX | Založena Kominterna |
1939 | MCMXXXIX | Založení společnosti Hewlett-Packard |
1969 | MCMLXIX | Apollo 11 přistálo na měsíci |
1984 | MCMLXXXIV | "Narození" RPL |
...potom data vzniku některých kalkulátorů.
Letopočet | Model | |
---|---|---|
1968 | MCMLXVIII | HP-9100A |
1972 | MCMLXXII | HP-35 |
1976 | MCMLXXVI | HP-9825A |
1979 | MCMLXXIX | HP-41C |
1982 | MCMLXXXII | HP-15C |
1987 | MCMLXXXVII | HP-28C |
1988 | MCMLXXXVIII | HP-42S |
1991 | MCMXCI | HP-32sII |
2006 | MMVI | HP-50g |
2007 | MMVII | HP-35s |
Download | ↑ ↓ |
Textový tvar | Binární forma | Zdrojový text C |
---|---|---|
ROMAN | ROMAN.hp | roman.c |