Drobnosti pro HP-35s

Úvod

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.

  1. Nalezení největšího společného dělitele
  2. Převod pravoúhlých souřadnic na polární
  3. Převod polárních souřadnic na pravoúhlé
  4. Řešení kvadratické rovnice
  5. Fibonacciho čísla

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.




1. Nalezení největšího společného dělitele

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í...

ADDRCODEXYZT
G001LBL Gnm

G002RMDRr = m % n


G003LASTxnr

G004x<>yrn

G005x≠0?rn

G006GTO G002n ← rm ← n

G007x<>ynr

G008RTNvýsledek


LN=24, CK=59F5

Použití programu:
Stisk klávesČinnostDisplay
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 ENTERspuštění programu
RUNNING
výsledek (14) v X-registru0.0000
14.0000


R↑


2. Převod pravoúhlých souřadnic na polární

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.

ADDRCODEXYZT
P001LBL Pxy

P002x<>yyx

P003iiyx
P004×yix

P005+x + yi


P006ARGθ


P007LASTxx + yiθ

P008ABSRθ

P009RTNRθ

LN=28, CK=E448

Použití programu:
Stisk klávesČinnostDisplay
RAD výsledek bude v radiánech0.0000
0.0000
3 Y souřadnice... 0.0000
3_
ENTER ...do Y-registru 3.0000
3.0000
4 Y souřadnice v X-registru3.0000
4_
XEQ P ENTERspuštění programu
RUNNING
výsledek: (5.0000θ0.6435) úhel θ v Y- a vzdálenost R v X-registru0.6435
5.0000


R↑


3. Převod polárních souřadnic na pravoúhlé

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.

ADDRCODEXYZT
R001LBL RRθ

R002x<>yθR

R003COScos θR

R004x<>yRcos θ

R005LASTxθRcos θ
R006SINsin θRcos θ
R007x<>yRsin θcos θ
R008×R sin θcos θ

R009x<>ycos θR sin θ

R010LASTxRcos θR sin θ
R011×R cos θR sin θ

R012RTNxy

LN=36, CK=D02A

Použití programu:
Stisk klávesČinnostDisplay
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 ENTERspuštění programu
RUNNING
výsledek: souřadnice x a y ve stejnojmenných registrch RPN stacku 3.0000
4.0000


R↑


4. Řešení kvadratické rovnice

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ů :-)

ADDRCODEXYZT
Q001LBL Qcba
Q002ENTERccba
Q003R↑accb
Q004÷c / acbb
Q005R↑bc / acb
Q006LASTxabc / ac
Q007÷b / ac / acc
Q008-2-2b / ac / ac
Q009÷-b / 2ac / acc
Q010ENTER-b / 2a-b / 2ac / ac
Q011ENTER-b / 2a-b / 2a-b / 2ac / a
Q012(-b / 2a)²-b / 2a-b / 2ac / a
Q013R↑c / a(-b / 2a)²-b / 2a-b / 2a
Q014-(-b / 2a)² - c / a-b / 2a-b / 2a
Q015x≥0?D ≥ 0


Q016GTO Q020D-b / 2a-b / 2a
Q0170.5i00.5 + 0iD-b / 2a-b / 2a
Q018yxD-b / 2a-b / 2a
Q019GTO Q021D-b / 2a-b / 2a
Q020xD-b / 2a-b / 2a
Q021--b / 2a - √D-b / 2a

Q022x<>y-b / 2ax2

Q023LASTxD-b / 2ax2
Q024+-b / 2a + √Dx2

Q025RTNx1x2

LN=82, CK=8D17

Použití programu:
Stisk klávesČinnostDisplay
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 ENTERspuš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 ENTERspuš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.

ADDRCODEXYZT
C001LBL Ccba
C002ENTERccba
C003R↑accb
C004÷c / acbb
C005R↑bc / acb
C006LASTxabc / ac
C007÷b / ac / acc
C008-2-2b / ac / ac
C009÷-b / 2ac / acc
C010ENTER-b / 2a-b / 2ac / ac
C011ENTER-b / 2a-b / 2a-b / 2ac / a
C012×(-b / 2a)²-b / 2ac / ac / a
C013LASTx-b / 2a(-b / 2a)²-b / 2ac / a
C014x<>y(-b / 2a)²-b / 2a-b / 2ac / a
C015R↑c / a(-b / 2a)²-b / 2a-b / 2a
C016-(-b / 2a)² - c / a-b / 2a-b / 2a
C0170.5i00.5 + 0iD-b / 2a-b / 2a
C018yxD-b / 2a-b / 2a
C019--b / 2a - √D-b / 2a

C020x<>y-b / 2ax2

C021LASTxD-b / 2ax2
C022+-b / 2a + √Dx2

C023RTNx1x2

LN=76, CK=306B

Použití programu:
Stisk klávesČinnostDisplay
x² - (2 + i)x - 1 + 7i = 0  
1 ENTER koeficient a 1.0000
1.0000
2 +/- i 1 +/- ENTERkoeficient 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


R↑


5. Fibonacciho čísla

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>.

ADDRCODEXYZT
F001LBL Fn


F002x≥0?n


F003GTO F012



F004+/--(-n)


F005REGX-(-n)-(-n)

F00611-(-n)-(-n)
F007ANDn & 1-(-n)

F008x=0?n & 1-(-n)

F019GTO F027



F010CLx0-(-n)

F011+-(-n)


F01255n

F013x5n

F014115n
F015+1 + √5n

F016221 + √5n
F017÷φn

F018x<>ynφ

F029yxφn


F02055φn

F021x5φn

F022÷φn / √5


F0230.50.5φn / √5

F024+



F025INTGFn


F026RTN



F027XEQ F011



F028+/-Fn


F029RTN



LN=95, CK=6797

Použití programu:
Stisk klávesČinnostDisplay
1 9 nezáporné číslo "n" (kladné nebo 0) 0.0000
19_
XEQ F ENTERspuštění programu
RUNNING
výsledek v X-registru 0.0000
4,181.0000
8 +/- záporné "n" 4,181.0000
-8_
XEQ F ENTERspuš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 F013F027.

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ČinnostDisplay
7 n = 7 0.0000
7_
XEQ F ENTERspuštění programu
RUNNING
F7 v X-registru 0.0000
13.0000
8 n = 8 13.0000
8_
XEQ F ENTERspuštění programu
RUNNING
F7
F8
13.0000
21.0000
+ F8
F9
13.0000
34.0000
9 n = 9 34.0000
9_
XEQ F ENTERspuštění programu
RUNNING
F9 v obou registrech34.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í.

ADDRCODEXYZT
V001LBL VFn-1Fn-2

V002+Fn-1 + Fn-2


V003STOPFn


V004LASTxFn-1Fn

V005x<>yFnFn-1

V006GTO V001



LN=18, CK=1EA3

Použití programu:
Stisk klávesČinnostDisplay
1 ENTER F2 1.0000
1.0000
F1 stejné jako F2 1.0000
1.0000
XEQ V ENTERspuštění programu
RUNNING
F3 v X-registru 0.0000
2.0000
R/S pokračovat pro výpočet F40.0000
3.0000
R/S F5 0.0000
5.0000
R/S F6 0.0000
8.0000
R/S F7 0.0000
13.0000


R↑