Přeskočit na hlavní obsah

Tvořím RPN kalkulačku

Techniku jako takovou jsem měl rád od nepaměti. Snad první kalkulačka, kterou jsem kdy držel v ruce, byla bulharská Elka. Žlutočerné tělo a displej s krásnými červenými segmenty. A tak jsem ji v nestřeženém okamžiku bráchovi vytáhl z tašky a během noci jsem ji úplně vybil. Druhý den mi nemohl přijít na jméno, protože neměl při ruce nové baterie. Prostě mě uchvátila. Několik let na to, tentokrát v Tuzexu, mi rodiče koupili už vyšší model. Bylo to Casio fx-39. Ideální pro středoškolskou matematiku. A právě druhý ročník střední školy bude klíčový pro celé další vyprávění. Kamarád ze třídy někde sehnal kalkulačku Elektronika MK-61. Vyráběla se v Rusku, tehdy ještě v Sovětském svazu. Krásný zelený displej, hezká tlačítka a na nich symboly, které nám nic moc neříkaly. Manuál byl sice součástí balení, ale byl v ruštině. A i když jsme Ruský jazyk měli jako předmět na škole, s manuálem jsme si neporadili. A tak jsme zkoušeli, ale nějak jsme se nemohli dobrat výsledku. Pamatuju si z té doby dvě věci. Kalkulačka byla programovatelná a to byla v té době naprosto úžasná schopnost. A co bylo ještě divnější, neměla tlačítko pro výpočet výsledku, tedy rovná se. A tím by mohl tento příběh skončit.


Po škole jsem nastoupil do pracovního procesu, jako programátor. Ale kalkulačky nebyly mým denním chlebem. Ty stroje, které jsem programoval, byly poněkud větší. Byly to sálové počítače a já programoval v jazyku Cobol. Doba šla dál, dalo by se říct, že mílovými kroky. A pak už jsem měl počítač na stole a kalkulačky už tolik potřeba nebyly. Většinu výpočtů jsem mohl vyřešit v tabulkovém procesoru anebo si složitější věci naprogramovat. Tentokrát v Turbo Pascalu nebo v Delphi. Jazyk jsem volil podle okolností, byť Turbo Pascal 6 mi byl bližší. A používám ho doposud.


A pak přišlo září roku 2024. Někde jsem brouzdal po internetu a najednou jsem objevil obrázek právě té zapomenuté kalkulačky MK-61. Už před tím jsem věděl, co znamená RPN zápis vzorců, ale nikdy jsem takovou kalkulačku nevlastnil. A tak jsem začal studovat, na jakém principu takové stroje fungují. A věřte - nevěřte, je to strašně jednoduché. Problém je v tom, že se všude kolem používá infixová notace, kterou všichni známe. Tedy zápis 1 + 2 + 3 = je celkem jasný. Ale pokud bych ho napsal pomocí RPN, vypadalo by to asi takhle. 1 2 + 3 +. Nejdřív se píší operandy, tedy číslice a operátory (+ -) až potom. RPN zápis je ještě navíc zajímavý v tom, že nepoužívá závorky. Priorita operátorů je dána přímo jejich umístěním.


A tak jsem řekl, že bych se o tomto tématu mohl dovědět něco víc. Pustil jsem se tedy do studia. A jak jsem řekl před chvílí, je to naprosto jednoduché. Když si na tenhle zápis zvyknete, jiný už nechcete. Navíc, pokud budu mluvit o programování, je logika naprosto jednoduchá. A tak jsem si řekl, že bych si takovou jednoduchou RPN kalkulačku mohl napsat. A tak jsem začal v Turbo Pascalu psát. Během půl hodiny jsem měl ten základ. Kalkulačka zvládala čtyři základní úkony. Sčítání, odčítání, násobení, dělení. A pak nastal útlum, protože se konal prodloužený víkend v lázeňském zařízení. A s odstupem času vidím, že to bylo dobře. Těch pět dnů jsem mohl nad programem přemýšlet. Dumal jsem, psal si poznámky, dopisoval nápady. A urodilo se jich dost. Taková kalkulačka má paměti a těm se říká registry. Pro výpočet se používají čtyři základní. Jmenují se X, Y, Z a T. No a pak jsou ještě registry pro ukládání dat a těch je deset. Mají označení 0 až 9. A právě tohle jsem promýšlel.


Zatím kalkulačka fungovala interaktivně, čili jako na klasické kalkulačce. Mačkal jsem klávesy a výsledek se objevoval v registru X. Ale pak mě napadlo, že bych mohl napsat celý vzorec a ten si nechat vypočítat najednou. Stisky kláves jsem si zaznamenával a napsaný vzorec se dal kdykoliv opakovat.


Následně jsem doplnil i vyšší matematické operce. Sin, Cos, Tan, Pi, Frac, Int, mocnina, odmocnina, absolutní hodnota, reciproká hodnota, logaritmus. Tohle už byl docela nadupaný nástroj na výpočty. Následně jsem dodělal i zápis příkazů jako celek s okamžitým výpočtem. A každý vzorec se ukládal do zásobníku a bylo ho možné kdykoliv vyvolat, opravit a znova spustit. Ale byl to jen vzorec na 80 znaků, čili delší vzorec nebo jejich posloupnost se tam už napsat nedala. Pozic v zásobníku bylo deset.


A když jsem se takto rozjel, napadlo mě ještě, že deset registrů na ukládání hodnot není moc. Sice skutečné RPN kalkulačky to takto mají, ale já navrhl i banky registrů. A banky jsem si pojmenoval písmena A až Z. Tedy 26 bank po deseti registrech. A navíc obsahy bank je možné importovat i exportovat pomocí CSV formátu. Buď jednu a nebo všechny.


Teď už kalkulačka začala být docela složitá a já začal ztrácet přehled, co všechno jsem naprogramoval, jaké klávesy slouží k obsluze a jak to celé funguje. A protože každý dobrý program by měl mít nápovědu, i já ji začal vytvářet. Jednak tam byla popsána obsluha, ale i to, co jsem udělal a jaké mám plány do budoucna. V podstatě cokoliv jsem naprogramoval, jsem okamžitě psal do nápovědy, která byla kontextová. Čili něco jako hypertext v DOSu. Každý den po ukončení práce probíhala záloha, abych se mohl případně vracet v čase.


A protože jsem začal řešit složitější úlohy, které měly i více příkazů, bylo nutné udělat radikální řez. Při práci jsem musel opustit RPN kalkulátor, spustit externí editor a příkazy napsat. A to se mi vůbec nelíbilo. Pustil jsem se do psaní svého editoru a tím pádem jsem dotáhl do konce první verzi.


Kalkulátor funguje naprosto parádně. Mám tam příklady na výpočet kořenů kvadratické rovnice, Gaussovo počítání řady, ale ne pomocí vzorce. A pak ještě Fibonacciho posloupnost. Dokonce jsem zkusil napsat provoz automobilu. Tedy ujeté kilometry a čerpání paliva. I to funguje. Dalo by se říct, že je to vlastně takový obrácený tabulkový procesor. Vzorce nejsou v buňkách, ale ve skriptu. Buňky, tedy registry slouží jen pro výsledky výpočtů.


A dále mě napadlo, že bych do skriptů mohl přidat nějakou logiku. Tu první jsem vymyslel během chvíle a je podobné té, kterou používala třeba programovatelná kalkulačka Casio fx-180p. Pokud chci opakovat vzorec, ten se opakuje tak dlouho, pokud registr X není nulový. Pokud nulový je, výpočet se zastaví. A pokud ho chci ukončit dříve, Je na to kombinace kláves Alt + Scroll Lock. Ale i to se mi zdálo málo. A tak jsem začal přemýšlet, že bych ještě dodělal příkazy IF, THEN, GO TO, FOR, NEXT. Ale tyto záležitosti na zpracování teprve čekají.


Pokud jde o ten editor, který jsem dělal pro tvorbu skriptů, zaujal mě natolik, že jsem si ho chtěl dodělat i na vlastní psaní. Je to stránkový editor, který pracuje s bloky. Umí je kopírovat, mazat a přesouvat. Odstavec, případně blok umí i přeformátovat. A protože mám stále dost programů v DOSu, které používám, doplnil jsem i export do formátů T602, Sprint, Wordperfect a RTF. Pro mnohé uživatele už toto mohou být neznámé typy souborů, ale poslední dva se stále používají. A protože jsem puntičkář, začal jsem vytvářet i kontrolu pravopisu. A tato práce vlastně trvá doposud. Za deset měsíců jsem slovník rozšířil na devět a půl tisíce slov a rozšiřování stále pokračuje. Pro moje běžné psaní ale rozsah slovníku už téměř vyhovuje. Můj odhad je, že bych se měl dopracovat minimálně na dvojnásobek. Ale tady už poznámky nechám otevřené, protože jak kalkulačka, tak i editor jsou stále ve vývoji. Možná časem dopíšu něco o dalších funkcích a vylepšeních.


Možná bych mohl ještě dodat, ohledně té RPN notace, že ji pro vnitřní výpočty používá i Excel. Uživatel zadá sice vzorec v infixové notaci, ale Excel si ji následně převede na postfixovou a v ní výpočty provede. A u kalkulaček ještě na momentík zůstanu. Výše jsem zmínil Casio fx-180p. Byla to moje první programovatelná kalkulačka. Měla jen 38 programových kroků a omezenou instrukční sadu. Ale pokud bylo potřeba, pár věcí se na ní naprogramovat dalo. Třeba právě ty kořeny kvadratické rovnice, o kterých jsem se již zmínil. A protože jsem si s touto kalkulačkou docela dost hrál, všiml jsem si, že když je poblíž rádio naladěné na střední vlny, toto vydává podivný zvuk Ale, když běžel program, podivný zvuk zmizel. A tak jsem vytvořil tři cykly, na kterých jsem si podle hodinek změřil čas a do programu zadal odvozenou konstantu. Najednou jsem měl pomůcku, která fungovala jako stopky. Kravinka, ale i taková maličkost dokáže potěšit. 


Pokud jde o kalkulačky s RPN notací, je docela problém si je pořídit. Už je téměř nikdo nevyrábí. Dříve je ve velkém produkovala firma Hewlett & Packard. Teď už to jsou jen omezené série. A taktéž Texas Instruments, s podobným omezením. Jediný, kdo se do tohoto segmentu pustil ve velkém, je firma Swiss Micros. A tam se toho opravdu nebojí, tak tedy díky za ně. Jak jsem se dočetl, pokud jde o výrobu kalkulaček, tak ty s RPN notací zabírají na trhu jednotky procent. Prostě zvyk je železná košile a infixová notace všechno převálcovala. Ale já jsem tak trochu vždy šel proti proudu. A poslední poznámka na závěr. Tenhle text jsem napsal v tom svém editoru. ☺ 

Komentáře

Populární příspěvky z tohoto blogu

Najdi, ulož, oprav, generuj

Opět se ponořím do dávné minulosti. Podle údajů v archívu se jednalo o rok 1994. To už je opravdu nějakej pátek. A protože v té době kraloval DOS a snad i Windows 3.11, čas od času jsem používal na nějaké menší obrázky Z-Soft Paint Brush . Pamětníci jistě vědí, o čem hovořím. Na podobném principu následně i Microsoft vytvořil program Malování. Ale já používal tehdy Paint Brush. Neměl jsem k němu výhrady, snad jen, že nepodporoval české znaky. A protože absence Češtiny mi vadila čím dál víc, rozhodl jsem se s tím něco udělat. Při pohledu do adresáře jsem pochopil, že fonty jsou uložené v souborech, které mají příponu FNT a jsou rastrové. To mi samozřejmě nedošlo hned, ale musel jsem chvíli do těchto souborů nahlížet. A pak mě napadlo řešení. Co kdybych si napsal svůj prográmek, který umí obsah tohoto souboru přepsat tak, aby se znaková sada změnila na to, co chci já? A v tom okamžiku mi došlo, že vlastně nejde jen o Paint Brush, ale že bych rád počeštil i jiné programy. A ta...

Jak hacknout Pagemaker?

Opět píšu a důvod bude následující. Zase bych rád něco napsal na blog. O čem to bude tentokrát? Opět půjde o jeden program, který jsem ale nenapsal já. Je to program publikační a jmenuje se Pagemaker 5. Ten, kdo s ním někdy přišel do styku, jistě tuší, o čem tohle povídání bude. Ano, program měl zabudovanou ochranu proti neoprávněnému kopírování. Pokud si zpětně po letech vybavím, bylo možné z disket udělat maximálně tři instalace na tři různé stroje. Pokud jsem chtěl čtvrtý stroj, jedna z již existujících instalací musela být odebrána. Ano, tak to aspoň stálo v manuálu. Tuto informaci jsem bral jako fakt, protože ve firmě se tento software měl dávat pouze na dva stroje. Třetí instalace pořád zbývala. Ale vlastně než celý proces začal, zkusil jsem si první pokusnou instalaci na svůj stroj s tím, že ji později odeberu, pokud by bylo potřeba instalovat ještě někam jinam. Jen zmíním, že Pagemaker 5 se instaloval z disket 3,5" a deinstalace se rovněž prováděla z disket. Pa...

Kontextové menu v DOSu

Podívejme se do listopadu roku 1993, kdy jsem začal tvořit zajímavý prográmek, který řešil jednu pomocnou záležitost při práci se soubory. V té době jsem pracoval ve Volkov Commanderu. A při klepnutí na soubor, který se dal zpracovat několika způsoby mi právě tato možnost chyběla. Proto jsem se rozhodl napsat cosi, co by tenhle problém vyřešilo. Program měl být podobný tomu, co nabízely Norton Utility pod názvem BE.EXE, tedy Batch Enhancer . A tak jsem začal programovat. První verze vlastně pracovala pouze pomocí klávesnice, do druhé jsem zapojil i myš, což BE.EXE neměl.  Myš jsem přidal především z lenosti. Když jsem myší dvakrát klikl na daný soubor a menu se otevřelo, už jsem nechtěl ruku z myši sundávat a šmátrat po klávesnici. Ta myš se nastavila na slovo Volba, kterým se MENU2A ohlásil a čekal na vstup. Pak už stačil jen minimální pohyb nahoru. Vybrat volbu a stisknout levé tlačítko. Takhle si představuju user friendly aplikaci. Teď už budu popisovat j...