Poslání následujících několika ukázek kratičkých sekvencí instrukcí je až urážlivě prosté: na několika málo řádcích předvést řešení, ...
A nyní již ruče do studia. Zde je seznam ukázek.
Důležité upozornění:
Slovní spojení sekvence instrukcí z úvodní věty lze nahradit termínem program. Není však cílem laskavého čtenáře (je-li jím úplný začátečník) vyděsit, ani budit jeho očekávání, která po přečtení tohoto materiálu zůstanou nenaplněna (pokud je týž z řad pokročilců). Použití výrazu program hned na samý úvod se tomto kontextu zdá býti nepatřičné, proto ten opisný tvar. V dalším textu je označení program pro jednoduchost bezostyšně užíváno, navzdory tomu, že si to ty sekvence instrukcí vůbec nezaslouží.
Ukázky také neobsahují žádné bližší komentáře. Jejich absence je zcela záměrná. Pokud by se k bližšímu komentování přikročilo, nejeden čtenář by takový počin mohl vyhodnotit jako pohrdání jeho osobou. A to i v případě začátečníků!
Ještě jedno důležité upozornění:
Dlužno přiznat, že minimalistických rysů ukázek nebylo povětšinou dosaženo genialitou autorovou. Příčinou úspěchu jsou především vlastnosti HP-35s, kterých aby u starších modelů pohledal.
Program spočítá největší společný dělitel dvou celých čísel. Je vhodné první zadat větší číslo - ušetří se tím jeden jalový průchod potřebný k výměně vstupních argumentů použitím výpočtu zbytku po dělení. Jak perverzní...
ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
G001 | LBL G | n | m | ||
G002 | RMDR | r = m % n | |||
G003 | LASTx | n | r | ||
G004 | x<>y | r | n | ||
G005 | x≠0? | r | n | ||
G006 | GTO G002 | n ← r | m ← n | ||
G007 | x<>y | n | r | ||
G008 | RTN | výsledek | |||
LN=24, CK=59F5 |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
5 6 | první (větší) číslo... | 0.0000 56_ |
ENTER | ...do Y-registru | 56.0000 56.0000 |
4 2 | druhé číslo v X-registru | 56.0000 42_ |
XEQ G ENTER | spuštění programu | RUNNING |
výsledek (14) v X-registru | 0.0000 14.0000 |
Samotný postup převodu je zcela nezajímavý. Co stojí za pozornost je vytvoření komplexního čísla z registrů RPN stacku a následné využití jedné z mnoha mocných zbraní, kterými HP-35s disponuje: jsou to operace s komplexními čísly. Vlastně se dá říci, že tento program nedělá nic jiného, než složí komplexní číslo ze souřadnic pravoúhlé soustavy a následného rozloží na druhý možný tvar, tedy na souřadnice polární. Použití programu napodobuje funkci R→P z modelu HP-32sII.
ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
P001 | LBL P | x | y | ||
P002 | x<>y | y | x | ||
P003 | i | i | y | x | |
P004 | × | yi | x | ||
P005 | + | x + yi | |||
P006 | ARG | θ | |||
P007 | LASTx | x + yi | θ | ||
P008 | ABS | R | θ | ||
P009 | RTN | R | θ | ||
LN=28, CK=E448 |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
RAD | výsledek bude v radiánech | 0.0000 0.0000 |
3 | Y souřadnice... | 0.0000 3_ |
ENTER | ...do Y-registru | 3.0000 3.0000 |
4 | Y souřadnice v X-registru | 3.0000 4_ |
XEQ P ENTER | spuštění programu | RUNNING |
výsledek: (5.0000θ0.6435) úhel θ v Y- a vzdálenost R v X-registru | 0.6435 5.0000 |
Tento program nemá nic společného se specifiky HP-35s, zcela nezměněn může být provozován na libovolném RPN kalkulátoru HP. Je zde uveden pouze pro formu jako realizace inverzní funkce k převodu předchozímu.
Poznámka:
Obě konverze obsahují na programových řádcích P002 resp. R002 zdánlivě zbytečnou instrukci x<>y. Je to tak, je lhostejno v jakém pořadí jsou vstupní argumenty zadány. Přesto jsou tam tyto instrukce ponechány z důvodu kompatibility s funkcemi R→P a P→R modelu HP-32sII.
ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
R001 | LBL R | R | θ | ||
R002 | x<>y | θ | R | ||
R003 | COS | cos θ | R | ||
R004 | x<>y | R | cos θ | ||
R005 | LASTx | θ | R | cos θ | |
R006 | SIN | sin θ | R | cos θ | |
R007 | x<>y | R | sin θ | cos θ | |
R008 | × | R sin θ | cos θ | ||
R009 | x<>y | cos θ | R sin θ | ||
R010 | LASTx | R | cos θ | R sin θ | |
R011 | × | R cos θ | R sin θ | ||
R012 | RTN | x | y | ||
LN=36, CK=D02A |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
RAD | výsledek bude v radiánech, úhel θ v Y- a vzdálenost R v X-registru z předchozího výpočtu | 0.6435 5.0000 |
XEQ R ENTER | spuštění programu | RUNNING |
výsledek: souřadnice x a y ve stejnojmenných registrch RPN stacku | 3.0000 4.0000 |
Kalkulátor HP-35s má mnoho předností a unikátních funkcí. Zajímavostí této ukázky je využití některých z nich pro řešení kvadratické rovnice
ax² + bx + c = 0
s koeficienty z oboru reálných čísel. Další zajímavostí je délka programu: bystrému pozorovateli neuniklo, že po úvodních rozpacích z předcházejících příkladů se délka tohoto díla rozpíná přes úctyhodných pětadvacet řádků :-)ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
Q001 | LBL Q | c | b | a | |
Q002 | ENTER | c | c | b | a |
Q003 | R↑ | a | c | c | b |
Q004 | ÷ | c / a | c | b | b |
Q005 | R↑ | b | c / a | c | b |
Q006 | LASTx | a | b | c / a | c |
Q007 | ÷ | b / a | c / a | c | c |
Q008 | -2 | -2 | b / a | c / a | c |
Q009 | ÷ | -b / 2a | c / a | c | c |
Q010 | ENTER | -b / 2a | -b / 2a | c / a | c |
Q011 | ENTER | -b / 2a | -b / 2a | -b / 2a | c / a |
Q012 | x² | (-b / 2a)² | -b / 2a | -b / 2a | c / a |
Q013 | R↑ | c / a | (-b / 2a)² | -b / 2a | -b / 2a |
Q014 | - | (-b / 2a)² - c / a | -b / 2a | -b / 2a | |
Q015 | x≥0? | D ≥ 0 | |||
Q016 | GTO Q020 | D | -b / 2a | -b / 2a | |
Q017 | 0.5i0 | 0.5 + 0i | D | -b / 2a | -b / 2a |
Q018 | yx | √D | -b / 2a | -b / 2a | |
Q019 | GTO Q021 | √D | -b / 2a | -b / 2a | |
Q020 | √x | √D | -b / 2a | -b / 2a | |
Q021 | - | -b / 2a - √D | -b / 2a | ||
Q022 | x<>y | -b / 2a | x2 | ||
Q023 | LASTx | √D | -b / 2a | x2 | |
Q024 | + | -b / 2a + √D | x2 | ||
Q025 | RTN | x1 | x2 | ||
LN=82, CK=8D17 |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
1) x² + 5x - 6 = 0 | ||
1 ENTER | koeficient a | 1.0000 1.0000 |
5 ENTER | koeficient b | 5.0000 5.0000 |
6 +/- | koeficient c | 5.0000 -6_ |
XEQ Q ENTER | spuštění programu | RUNNING |
kořeny rovnice v X- a Y-registru | -6.0000 1.0000 | |
2) 9x² + 6 + 2 = 0 | ||
FDISP | výsledek zobrazit ve formě zlomků | 0 0 |
9 ENTER | koeficient a | 9 9 |
6 ENTER | koeficient b | 6 6 |
2 | koeficient c | 6 2_ |
XEQ Q ENTER | spuštění programu | RUNNING |
kořeny rovnice v X- a Y-registru | -0 1/3i-0 1/3 -0 1/3i0 1/3 |
Na tomto místě by mohlo srdceryvné líčení žalostných osudů kvadratických rovnic skončit. Bylo by to však trochu unfair. Vůči komu? Přeci vůči konkurenčním číselným oborům.
V úvodu komentáře k této "drobnosti" je psáno o řešení kvadratické rovnice s koeficienty z oboru reálných čísel. Pro ty, kteří jsou ochotni skousnout zobrazení výsledků vždy v komplexním tvaru (bez ohledu na to, mají-li výsledné hodnoty nulové imaginární části) a kterým se nebude eklovat zkrácení programu o dva řádky, je tu alternativní řešení. To vyčíslí kořeny kvadratické rovnice s komplexními koeficienty.
ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
C001 | LBL C | c | b | a | |
C002 | ENTER | c | c | b | a |
C003 | R↑ | a | c | c | b |
C004 | ÷ | c / a | c | b | b |
C005 | R↑ | b | c / a | c | b |
C006 | LASTx | a | b | c / a | c |
C007 | ÷ | b / a | c / a | c | c |
C008 | -2 | -2 | b / a | c / a | c |
C009 | ÷ | -b / 2a | c / a | c | c |
C010 | ENTER | -b / 2a | -b / 2a | c / a | c |
C011 | ENTER | -b / 2a | -b / 2a | -b / 2a | c / a |
C012 | × | (-b / 2a)² | -b / 2a | c / a | c / a |
C013 | LASTx | -b / 2a | (-b / 2a)² | -b / 2a | c / a |
C014 | x<>y | (-b / 2a)² | -b / 2a | -b / 2a | c / a |
C015 | R↑ | c / a | (-b / 2a)² | -b / 2a | -b / 2a |
C016 | - | (-b / 2a)² - c / a | -b / 2a | -b / 2a | |
C017 | 0.5i0 | 0.5 + 0i | D | -b / 2a | -b / 2a |
C018 | yx | √D | -b / 2a | -b / 2a | |
C019 | - | -b / 2a - √D | -b / 2a | ||
C020 | x<>y | -b / 2a | x2 | ||
C021 | LASTx | √D | -b / 2a | x2 | |
C022 | + | -b / 2a + √D | x2 | ||
C023 | RTN | x1 | x2 | ||
LN=76, CK=306B |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
x² - (2 + i)x - 1 + 7i = 0 | ||
1 ENTER | koeficient a | 1.0000 1.0000 |
2 +/- i 1 +/- ENTER | koeficient b | -2.0000i-1.0000 -2.0000i-1.0000 |
1 +/- i 7 | koeficient c | -2.0000i-1.0000 -1i7_ |
XEQ C ENTER | spuštění programu | RUNNING |
kořeny rovnice v X- a Y-registru | -1.0000i2.0000 3.0000i-1.0000 |
V ukázce výpočtu libovolného Fibonacciho čísla není - tak jako u ostatních ukázek - nic světoborného. Vlastně by tu žádný komentář nemusel být, ale přesto nebude ke škodě zopakovat si některá "provařená" fakta. Důvodem k opakování pochopitelně není případného čtenáře vzdělat, to jistě ne. Spíš mu následující řádky umožní zcela zdarma se přesvědčit o vlastní genialitě (po kolikáté již!) a se shovívavým úsměvem si pobrlávat: "...no jasně, to přeci všichni dávno víme...".
Fibonacciho řada je definována vztahem:
Fn = Fn-1 + Fn-2, F0 = 0, F1 = 1.
Tento postup (postupné sčítání) však následující program nepoužívá. Je v něm "zaklet" vzorec používající hodnotu nazývanou zlatý řez označovanou literou φ:F(n) = floor(φn / √5 + 0.5), n ≥ 0
kdeφ = (1 + √5) / 2 ≈ 1.61803399.
Hodnota Fn je vypočtena pro n z oboru celých čísel v rozsahu <-2392; 2392>.ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
F001 | LBL F | n | |||
F002 | x≥0? | n | |||
F003 | GTO F012 | ||||
F004 | +/- | -(-n) | |||
F005 | REGX | -(-n) | -(-n) | ||
F006 | 1 | 1 | -(-n) | -(-n) | |
F007 | AND | n & 1 | -(-n) | ||
F008 | x=0? | n & 1 | -(-n) | ||
F019 | GTO F027 | ||||
F010 | CLx | 0 | -(-n) | ||
F011 | + | -(-n) | |||
F012 | 5 | 5 | n | ||
F013 | √x | √5 | n | ||
F014 | 1 | 1 | √5 | n | |
F015 | + | 1 + √5 | n | ||
F016 | 2 | 2 | 1 + √5 | n | |
F017 | ÷ | φ | n | ||
F018 | x<>y | n | φ | ||
F029 | yx | φn | |||
F020 | 5 | 5 | φn | ||
F021 | √x | √5 | φn | ||
F022 | ÷ | φn / √5 | |||
F023 | 0.5 | 0.5 | φn / √5 | ||
F024 | + | ||||
F025 | INTG | Fn | |||
F026 | RTN | ||||
F027 | XEQ F011 | ||||
F028 | +/- | Fn | |||
F029 | RTN | ||||
LN=95, CK=6797 |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
1 9 | nezáporné číslo "n" (kladné nebo 0) | 0.0000 19_ |
XEQ F ENTER | spuštění programu | RUNNING |
výsledek v X-registru | 0.0000 4,181.0000 | |
8 +/- | záporné "n" | 4,181.0000 -8_ |
XEQ F ENTER | spuštění programu | RUNNING |
výsledek opět v X-registru Y-registr zachován | 4,181.0000 -21.0000 |
Poznámka:
V případě, že není třeba vstupní hodnoty n uvažovat záporné, postačí program zredukovat na řádky F013 až F027.
Ještě jedna poznámka:
Ať se program použije v libovolné podobě (celý, jak ho ukazuje předchozí výpis, nebo zkrácený pouze pro nezáporné vstupní hodnoty n) platí tento fakt: po skončení běhu této sekvence jsou modifikovány pouze Z- a T-registry RPN stacku, Y-registr je zachován. Toho lze využít při kontrole správnosti výpočtu:
Stisk kláves | Činnost | Display |
---|---|---|
7 | n = 7 | 0.0000 7_ |
XEQ F ENTER | spuštění programu | RUNNING |
F7 v X-registru | 0.0000 13.0000 | |
8 | n = 8 | 13.0000 8_ |
XEQ F ENTER | spuštění programu | RUNNING |
F7 F8 | 13.0000 21.0000 | |
+ | F8 F9 | 13.0000 34.0000 |
9 | n = 9 | 34.0000 9_ |
XEQ F ENTER | spuštění programu | RUNNING |
F9 v obou registrech | 34.0000 34.0000 | |
- | F9 - F9 = 0 | 34.0000 0.0000 |
Při potřebě pouze si prohlížet posloupnost čísel není potřeba vkládat do paměti kalkulátoru celé třicetiřádkové monstrum (v kombinaci s poměrně toporným ručním ovládáním: (1) zadat n, (2) spustit program XEQ F ENTER, (3) zadat n+1, (4) spustit program XEQ F ENTER, ...). Pro takový účel vrchovatě postačí sekvence instrukcí notoricky známá z kalkulátorů používaných v polovině sedmdesátých let. Zde se skví.
ADDR | CODE | X | Y | Z | T |
---|---|---|---|---|---|
V001 | LBL V | Fn-1 | Fn-2 | ||
V002 | + | Fn-1 + Fn-2 | |||
V003 | STOP | Fn | |||
V004 | LASTx | Fn-1 | Fn | ||
V005 | x<>y | Fn | Fn-1 | ||
V006 | GTO V001 | ||||
LN=18, CK=1EA3 |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
1 ENTER | F2 | 1.0000 1.0000 |
F1 stejné jako F2 | 1.0000 1.0000 | |
XEQ V ENTER | spuštění programu | RUNNING |
F3 v X-registru | 0.0000 2.0000 | |
R/S | pokračovat pro výpočet F4 | 0.0000 3.0000 |
R/S | F5 | 0.0000 5.0000 |
R/S | F6 | 0.0000 8.0000 |
R/S | F7 | 0.0000 13.0000 |