Hlavní navigace

Matematika v příkazové řádce XIII - aplikace sc (4)

19. 4. 2006
Doba čtení: 9 minut

Sdílet

V dnešní části seriálu, který je věnován matematicky zaměřeným aplikacím ovládaným zejména z příkazové řádky nebo z textového terminálu, dokončíme popis ovládání tabulkového procesoru sc. Ukážeme si tvorbu interních i externích maker, pomocí kterých je možné funkčnost tabulkového procesoru prakticky libovolně rozšiřovat.

Obsah

1. Makra v tabulkovém procesoru sc
2. Vzorce – základy maker
3. Unární, binární a ternární operátory
4. Interní funkce použitelné ve vzorcích
5. Funkce @ext() a její význam
6. Práce se jmenovkami
7. Práce s barvami
8. Obsah dalšího pokračování tohoto seriálu

1. Makra v tabulkovém procesoru sc

V předchozích třech pokračováních tohoto seriálu jsme si popsali jak základní funkce a operace určené pro práci s tabulkami v tabulkovém procesoru sc (spreadsheet calculator), tak i operace složitější, například práci s bloky, vzorci nebo změnu parametrů tabulkového procesoru jak pomocí konfiguračních souborů, tak i přímo za běhu aplikace. Stále jsme si však nepopsali podporované způsoby práce s makry, které původně poměrně jednoduchý tabulkový procesor povyšují na všestranný a profesionální nástroj s možností naprogramování (resp. naskrip­tování) i velmi složitých operací s tabulkami. Kromě popisu práce s makry se zmíníme o zbývajících funkcích, kterými tento tabulkový procesor disponuje; především se bude jednat o funkce určené pro práci se jmenovkami a také o možnosti barevného zvýraznění jednotlivých buněk tabulky. Začněme podrobnějším popisem vzorců, které tvoří (ostatně jako u většiny ostatních tabulkových procesorů) základ pro tvorbu maker.

2. Vzorce – základy maker

Tabulkový procesor sc zcela samozřejmě podporuje práci se vzorci – bez této podpory by se ostatně nejednalo o plnohodnotný tabulkový procesor, ale o pouhý formátovač numerických a textových dat uložených v tabulkách. Pro vložení vzorců do buněk tabulky jsou určeny dva již dříve popsané příkazy: „e“ a „=“. Po zadání jednoho ze zmíněných dvou příkazů je možné zadat, popř. editovat požadovaný vzorec, který také může obsahovat makra, resp. jejich volání. Základem pro tvorbu vzorců jsou, podobně jako v prakticky všech programovacích jazycích i dříve popsaných matematicky orientovaných aplikacích, unární, binární a ternární operátory spolu s několika funkcemi. Nejprve si stručně popíšeme dostupné operátory a posléze i interní funkce, které je možné ve vzorcích použít.

3. Unární, binární a ternární operátory

V následující tabulce jsou vypsány všechny unární a binární operátory (spolu s jediným operátorem ternárním), které tabulkový procesor sc obsahuje. Priorita těchto operátorů do značné míry odpovídá jejich matematickému významu, protože nejvyšší prioritu mají operátory unární, po nich následuje umocnění, násobení a dělení, sčítání a odčítání, relační operátory, logické binární operátory a konečně podmíněný ternární operátor, jehož priorita je nejnižší. Prioritu je možné ovlivňovat pomocí závorek. Vyhodnocení operátorů na stejné úrovni (resp. prioritě) probíhá zleva doprava, toto řazení není možné, stejně jako aritu operátorů, měnit.

Operátor Typ operátoru (arita) Význam
- unární negace výrazu (operandu) uvedeného napravo od operátoru
+ binární součet výrazů (operandů)
- binární rozdíl výrazů (operandů)
* binární součin výrazů (operandů)
/ binární podíl výrazů (operandů)
% binární zbytek po podílu (dělení modulo)
^ binární umocnění prvního výrazu výrazem druhým
# binární spojení (konkatenace) dvou řetězců
~ unární logická negace
& binární logický součin
| binární logický součet
= binární relační operátor „je rovno“
!= binární relační operátor „nerovná se“
< binární relační operátor „menší než“
> binární relační operátor „větší než“
<= binární relační operátor „menší nebo rovno“
>= binární relační operátor „větší nebo rovno“
?: ternární podmíněný výraz: podle hodnoty prvního výrazu se vyhodnotí buď výraz druhý nebo třetí

4. Interní funkce použitelné ve vzorcích

Kromě operátorů popsaných ve třetí kapitole nabízí tabulkový procesor sc i několik interních funkcí, které je možné ve vzorcích použít. Jména těchto funkcí vždy začínají znakem @ (zavináč), což je způsob zápisu známý zejména ze starších tabulkových kalkulátorů. Následuje soupis těchto funkcí s jejich stručným popisem:

Název interní funkce Význam funkce
@pi návrat konstanty Π
@sqrt() druhá odmocnina zadaného výrazu
@exp() výpočet ex
@ln() výpočet přirozeného logaritmu
@log() výpočet desítkového logaritmu
@floor() zaokrouhlení směrem ke kladnému nekonečnu
@ceil() zaokrouhlení směrem k zápornému nekonečnu
@rnd() zaokrouhlení na celá čísla (nejedná se tedy o funkci random()!)
@round() zaokrouhlení na zadaný počet desetinných míst
@sin() sinus
@cos() kosinus
@tan() tangens
@asin() arkusinus
@acos() arkukosinus
@atan() arkustangens (existuje i verze této funkce se dvěma argumenty, která se podobá céčkovské funkci atan2())
@abs() výpočet absolutní hodnoty
@fabs() výpočet absolutní hodnoty
@pow() výpočet xy
@hypot() výpočet přepony rovnostranného trojúhelníka (resp. délky vektoru) podle Pythagorovy věty
@dtr() převod stupňů na radiány
@rtd() převod radiánů na stupně
@ston() převod řetězce na číselnou hodnotu
@eqs() porovnání dvou řetězců
@nval() převod argumentů na označení sloupce a řádku buňky, navrácení číselné hodnoty této buňky
@sval() převod argumentů na označení sloupce a řádku buňky, navrácení řetězcové hodnoty této buňky
@err návrat konstantní chybové hodnoty
@if() funkční podoba podmíněného výrazu (tato funkce akceptuje tři argumenty)
@sum() součet (sum) hodnot buněk zadaných pomocí oblasti
@count() počet buněk v zadané oblasti
@prod() součin (product) hodnot buněk zadaných pomocí oblasti
@avg() průměr hodnot buněk v zadané oblasti
@max() maximální hodnota nalezená v zadané oblasti nebo v seznamu argumentů
@min() minimální hodnota nalezená v zadané oblasti nebo v seznamu argumentů
@stddev() směrodatná odchylka hodnot zadané oblasti
@rows() počet řádků v zadané oblasti
@cols() počet sloupců v zadané oblasti
@lookup() vyhledání hodnoty ve sloupci nebo řádku
@index() návrat hodnoty buňky na dané pozici z vybrané oblasti
@stindex() návrat řetězcové hodnoty buňky dané pozice z vybrané oblasti
@filename() jméno souboru s uloženou tabulkou
@substr() návrat podřetězce zadaného dvěma indexy
@fmt() konverze (formátování) numerické hodnoty na řetězec; parametry odpovídají céčkovské funkci printf()
@upper() převod řetězce na velká písmena
@lower() převod řetězce na malá písmena
@capital() převod slov uložených v řetězci tak, aby počáteční písmena slov byla velká a ostatní malá
@ext() zavolání externí funkce (skriptu), blíže viz další kapitoly
@pmt() výpočet úroků pro zadanou peněžní částku, úrokovou sazbu a počet měsíců
@fv() výpočet zbylé částky na účtu při pravidelných platbách a pravidelné úrokové sazbě
@pv() výpočet maximální částky, kterou je možné vypůjčit, při zadaných splátkách, počtu splátek a úrokové sazbě
@now tato funkce vrací počet sekund uběhlých od 1.1.1970 (začátku epochy)
@dts() převod datumu na počet sekund uběhlých od 1.1.1970
@tts() převod času na počet sekund uplynulých od nejbližší půlnoci
@date() převod číselného data (počtu sekund od 1.1.1970) na řetězec
@year() návrat roku ze zadaného času (počtu sekund od 1.1.1970)
@month() návrat měsíce ze zadaného času (počtu sekund od 1.1.1970)
@day() návrat dne ze zadaného času (počtu sekund od 1.1.1970)
@hour() návrat hodiny ze zadaného času (počtu sekund od 1.1.1970)
@minute() návrat minuty ze zadaného času (počtu sekund od 1.1.1970)
@second() návrat sekundy ze zadaného času (počtu sekund od 1.1.1970)

Některé z výše uvedených funkcí, například funkce @sum(), @count() apod., akceptují i dva parametry. Prvním parametrem je stále výraz vyjadřující oblast, nad kterou se výpočet provádí. Druhý parametr po svém vyhodnocení (pravdivostní hodnotou) určuje, které buňky z výběru budou do výpočtu zahrnuty – tímto postupem je možné například sečíst pouze kladné hodnoty uložené v buňkách. Následuje dobrá zpráva pro uživatele Excelu: v sc nejsou názvy funkcí žádným způsobem lokalizovány, ve všech jazykových verzích mají funkce stále stejné označení.

5. Funkce @ext() a její význam

Základ pro využití externích maker představuje funkce @ext(). Tato funkce akceptuje dva argumenty. Prvním argumentem je název externího příkazu, který se má zavolat (ve většině případů se bude jednat o řetězec, je zde tedy nutné použít uvozovky), druhý argument je ještě před zavoláním tohoto příkazu vyhodnocen a převeden na řetězec a posléze je k příkazu připojen jako jeho parametr. Pokud je provádění externích příkazů povoleno (viz předchozí část tohoto seriálu, kde jsme si ukázali dvě možnosti povolení), je příkaz i se svým parametrem zavolán a po dokončení je výsledek (standardní výstup) zpracován tabulkovým procesorem sc. Zpracování probíhá velmi jednoduchým způsobem: z výstupního datového proudu je získán (pouze) první řádek, ostatní řádky jsou ignorovány. Tento první řádek je považován za návratovou řetězcovou hodnotu funkce @ext(). Pokud externí příkaz vrací číselnou hodnotu, je možné v sc provést zpětný převod pomocí funkce @scon() (string to numeric). Problémy nastávají u interaktivních externích příkazů (ty se nezpracují korektně) a také u příkazů, které na výstup pošlou více řádků textu – tyto řádky se totiž vypíšou na standardní výstup (obrazovku), takže poruší obrázek tabulky. Překreslení obrazovky si můžeme kdykoli vynutit klávesovou zkratkou Ctrl+L, podobně jako v mnoha dalších aplikacích určených pro textový terminál.

6. Práce se jmenovkami

Jmenovkou je v tabulkovém procesoru sc myšlen odkaz na jednu buňku nebo oblast buněk, na kterou je možné skočit z jiných buněk. Jedná se vlastně o symbolicky zapsané linky. Se jmenovkami se pracuje poměrně jednoduchým způsobem, k dispozici jsou pouze čtyři příkazy. Prvním příkazem je a (add), který slouží pro vytvoření nové jmenovky. Po vyvolání tohoto příkazu je očekáváno zadání buňky či oblasti buněk, na které bude jmenovka odkazovat. Kromě toho je možné buňky nejprve označit jedním z příkazů, které jsme si popsali v předcházejících částech tohoto seriálu. Označené buňky jsou posléze pomocí a přidány do jmenovky. Druhým příkazem je d (delete), který slouží, jak již jeho název napovídá, k vymazání dříve vytvořené jmenovky. Třetím příkazem je s. Tento příkaz po svém zadání barevně (či alespoň inversně) odliší ty buňky, u kterých je jmenovka vytvořena. Posledním (a vlastně i nejužitečnějším) příkazem je **, kterým se provede skok na jmenovku přiřazenou k aktivní buňce. Pokud nebyla žádná jmenovka k buňce přiřazena, nemá tento příkaz žádný efekt. Návrat zpět je možné provést pomocí příkazu `` (jedná se o zpětné apostrofy).

7. Práce s barvami

Základy práce s barvami (povolení a zákaz barvového zvýraznění, odlišení buněk se zápornou hodnotou) jsme si ukázali již v předchozích částech tohoto seriálu. Dnes si popíšeme tři příkazy, pomocí kterých je možné buňky barevně označovat. Prvním příkazem je příkaz C (pozor, musí jít o velké písmeno!), pomocí kterého je možné změnit jednu z barev, jež se nachází v mikropaletě o kapacitě osmi barev. Po zadání tohoto příkazu je očekáváno slovo color následované číslem 1–8, což je index do barvové palety. Po tomto číslu by měl být uveden znak = a posléze výraz, který se vyhodnotí na barvu popředí a pozadí (ty jsou od sebe odděleny středníkem). Při vytváření výrazů, jež se mají vyhodnotit na barvu, je možné (samozřejmě kromě všech výše popsaných numerických operátorů) použít i následující užitečné konstanty:

@black
@red
@green
@yellow
@blue
@magenta
@cyan
@white

Příklad redefinice barvy s indexem jedna:

color 1 = @white;@green 

Složitější příklad, ve kterém je použit podmíněný výraz:

color 5 = B23<E75?(@black;@cyan):(@white;@magenta) 

Kromě příkazu C se pro práci s barvami používají i příkazy rC a rS. Příkazem rC je možné obarvit zadanou oblast buněk. Nejprve je očekáváno slovo color, po něm oblast buněk zadaná stejně, jako například u funkce @sum() a nakonec index do barvové palety, který se musí nacházet v rozsahu 1–8. Posledním příkazem je rS, který na standardní výstup vypíše všechny definované barevně vysvícené oblasti.

CS24_early

8. Obsah dalšího pokračování tohoto seriálu

V následujícím pokračování tohoto seriálu se začneme věnovat aplikacím, které je možné použít pro vizualizaci vypočtených dat. Budeme si popisovat jak aplikace určené pro tvorbu dvojrozměrných a třírozměrných grafů, tak i programy, které mohou sloužit například pro vizualizaci jednoduchých i složitějších matematických ploch. Stále se však budeme přidržovat ovládání pomocí mnoha lety osvědčeného příkazového řádku.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.