Výpočet dne v týdnu a počtu dní mezi dvěma daty

Obsah této kapitoly jistě dává do ruky mocný argument oponentům: otírá se (a to, prosím, opakovaně) o kalkulátory obdařené AOS stejně jako kapitola minulá. Není to známka poklonkování, servility či devótnosti, chcete-li, před systémem AOS. Je však třeba bez vší ironie a laciného přezírání brát vážně konkurenční výrobky takového kalibru jako je TI-58/59. Právě z jejího programového modulu Master Library je zcela bezostyšně vykraden programový blok s pořadovým číslem 20. Algoritmus pro výpočet dne v týdnu a počtu dní mezi dvěma daty je pro svoji jednoduchost natolik dráždivý, že v kombinaci s pocitem nádechu jeho praktické použitelnosti lze jen s vypětím všech sil (a morálně volních vlastností) odolat pokušení o implementaci pro stroj s RPN. Implementace se urodily pro HP-35s, HP-42s a HP-15C.


Původní řešení

Nejprve krátký pohled, jak na to šli borci z Texasu. Na následujících čtyřech "proužcích papíru" z tiskárny PC-100C je originální kód programu pro TI-58/59.

000  76 LBL
001  78 Σ+
002  53  (
003  93  .
004  04  4
005  65  ×
006  43 RCL
007  01  01
008  85  +
009  02  2
010  93  .
011  03  3
012  54  )
013  59 INT
014  94 +/-
015  85  +
016  61 GTO
017  77 x≥t
018  76 LBL
019  79  x
020  00  0
021  35 1/x
022  92 RTN
023  76 LBL
024  10 E'
025  53  (
026  42 STO
027  01  01
028  29 CP
029  22 INV
030  77 x≥t
031  79  x
032  22 INV
033  59 INT
034  22 INV
035  44 SUM
036  01  01
037  65  ×
038  04  4
039  22 INV
040  28 log
041  54  )
042  42 STO
043  03  03
044  32 x↔t
045  01  1
046  05  5
047  08  8
048  01  1
049  77 x≥t
050  79  x
051  03  3
052  02  2
053  32 x↔t
054  53  (
055  53  (
056  43 RCL
057  01  01
058  55  ÷
059  01  1
060  00  0
061  00  0
062  54  )
063  42 STO
064  01  01
065  22 INV
066  59 INT
067  22 INV
068  44 SUM
069  01  01
070  65  ×
071  01  1
072  00  0
073  00  0
074  54  )
075  42 STO
076  02  02
077  77 x≥t
078  79  x
079  01  1
080  03  3
081  32 x↔t
082  43 RCL
083  01  01
084  77 x≥t
085  79  x
086  53  (
087  03  3
088  06  6
089  05  5
090  65  ×
091  43 RCL
092  03  03
093  85  +
094  43 RCL
095  02  02
096  85  +
097  03  3
098  01  1
099  65  ×
100  43 RCL
101  01  01
102  75  -
103  03  3
104  01  1
105  85  +
106  03  3
107  32 x↔t
108  43 RCL
109  01  01
110  77 x≥t
111  78 Σ+
112  01  1
113  22 INV
114  44 SUM
115  03  03
116  76 LBL
117  77 x≥t
118  53  (
119  43 RCL
120  03  03
121  55  ÷
122  04  4
123  54  )
124  59 INT
125  75  -
126  53  (
127  93  .
128  07  7
129  05  5
130  85  +
131  53  (
132  43 RCL
133  03  03
134  55  ÷
135  01  1
136  00  0
137  00  0
138  54  )
139  59 INT
140  65  ×
141  93  .
142  07  7
143  05  5
144  54  )
145  59 INT
146  54  )
147  92 RTN
148  76 LBL
149  11  A
150  10 E'
151  42 STO
152  04  04
153  00  0
154  92 RTN
155  76 LBL
156  12  B
157  10 E'
158  42 STO
159  05  05
160  00  0
161  92 RTN
162  76 LBL
163  13  C
164  53  (
165  43 RCL
166  05  05
167  75  -
168  43 RCL
169  04  04
170  54  )
171  92 RTN
172  76 LBL
173  14  D
174  53  (
175  53  (
176  10 E'
177  42 STO
178  01  01
179  94 +/-
180  55  ÷
181  07  7
182  54  )
183  59 INT
184  65  ×
185  07  7
186  85  +
187  43 RCL
188  01  01
189  54  )
190  92 RTN
Programové řádky kódu mají následující významy:
000 - 017 Pokračování výpočtu faktoru (viz níže) pro měsíce březen až prosinec.
018 - 022 Hlášení o chybném zadání.
023 - 147 Výpočet faktoru. Tento blíže nespecifikovný termín je převzat z originální (německé) dokumentace. Výsledek dělení této hodnoty počtem dní v roce (pro ty, kteří o tom neradi přemýšlejí, je to 365) naznačuje, že tajemný faktor udává počet dní od začátku letopočtu. Zároveň jsou mezi řádky 028 - 085 prováděny kontroly zadání. Tím je vždy jediná hodnota (číslo ve tvaru MMDD.YYYY) udávající příslušné datum.
148 - 190 Zadání hodnot a spouštění jednotlivých výpočtů.


Řešení nové

Zde předkládané RPN řešení je pro HP-35s. Modifikace pro jiný RPN kalkulátor by byla velmi snadná. Stačí (1) nahradit (nebo obejít prostřednictvím více skoků) funkci znaménka SGN na řádku L026 a (2) spočítat zbytek po dělení, není-li k dispozici instrukce RMDR.

Nové řešení není otrockým přepisem výchozího řešení. Co je v novém RPN pojetí jinak ukazuje následující souhrn:

V tabulce s výpisem nově vzniklého programu jsou použity jednopísmenné symboly. Mají tyto významy:
p nějaká předchozí hodnota
y rok
m měsíc
d den
f faktor (viz výše)
v mezivýsledek