Dc (program)

From Wikipedia, the free encyclopedia

dc (desc calculator) je softwarový kalkulátor s reverzní polskou notací a neomezenou aritmetickou přesností.[1] Je jednou z nejstarších unixových utilit a předchází dokonce vzniku programovacího jazyka C.[pozn. 1] Stejně jako jiné utility té doby vyznačuje výkonnými funkcemi, také však extrémně strohou syntaxí.[zdroj?] Tradičně, na základě dc byl vytvořen uživatelsky příjemnější kalkulační program bc (s infixovou notací), ačkoli současné implementace bc nebývají na dc závislé.[3]

Stručná fakta První vydání, Operační systém ...
dc
První vydání1971
Operační systémmultiplatformní, původně UNIX
Vyvíjeno vpůvodně B
Typ softwarusoftware calculator
Některá data mohou pocházet z datové položky.
Zavřít

Historie

Nástroje dc a bc byly vyvinuty Lorindou Cherryovou a Robertem Morrisem z Bellových laboratoří v roce 1971.[4][5][6] Ken Thompson tvrdil, že dc byl zcela první program napsaný v Bellových laboratořích pro počítač PDP-11.[7]

Popis

Tento článek přináší několik příkladů ve snaze ukázat jazyk jako takový. Kompletní seznam příkazů a syntaxe je třeba nastudovat z manuálové stránky konkrétní implementace.

Na rozdíl od bc je dc založen na postfixové notaci, což znamená, že matematické výrazy jsou prováděny na způsob zásobníku.

Vynásobení čísel čtyři a pět (většinu bílých znaků lze vynechat):

4 5 *
p

Toto lze přeložit jako „vlož čtyři a pět do zásobníku, pak s operátorem násobení vyjmi dva prvky ze zásobníku, vynásob je a vlož výsledek zpět do zásobníku.“ Příkaz p slouží k vypsání horního prvku v zásobníku.

Pro výpočet (12 + 3^4)/11-22:

12 3 4 ^ + 11 / 22 -
p

Krom základních aritmetických a zásobníkových operací zahrnuje dc i podporu maker, podmínek a ukládání výsledků pro pozdější použití. Však je jeho syntaxe velmi strohá a komplexní programy bývají jen velmi obtížně čitelné.[zdroj?]

Mechanismem, který se skrývá se za makry a podmínkami, je tzv. registr. Registr je v dc úložný prostor s jednoznakovým názvem, do nějž lze ukládat a naopak z něj načítat. Pro práci s nimi se používají příkazy s a l. Například sc vyjme horní prvek ze zásobníku a uloží jej do registru c; lc vloží hodnotu z registru c do zásobníku:

3 sc 4 lc * p

S registry lze pracovat také jako se sekundárními zásobníky, takže lze mezi nimi a hlavním zásobníkem hodnoty vyjímat a vkládat.

Makra jsou implementována tak, že umožňují, aby hodnoty v registrech a zásobníku byly řetězci i čísly. Řetězec lze vypsat, může být ale také zpracován jako posloupnost příkazů. Kupříkladu je možné do registru m uložit makro pro přičtení jedničky a poté vynásobení dvěma:

[1 + 2 *] sm

S použitím příkazu x, který provede operaci na horní pozici zásobníku, je možné:

3 lm x p

Mechanismus maker lze využít i ke konstrukci podmínek. Příkaz =r vyjme ze zásobníku dvě hodnoty a makro, uložené v registru r, provede pouze v případě, že jsou si rovny. Následující příklad vypíše řetězec shodne jen tehdy, je-li hodnota na vrcholu zásobníku rovna 5:

[shodne]p] sm 5 =m

Cyklus je možné vytvořit definicí makra, které podmínečně volá samo sebe.

Příkladem budiž následující výpočet faktoriálu:

# F(x): return x!
# if x-1 > 1
#     return x * F(x-1)
# otherwise
#     return x
[d1-d1<F*]dsFxp

Příklad převedu vzdálenost v metrech na stopy a palce. Velká část příkladu se zabývá výzvami pro zadání hodnot na vstup, vypisováním výstupu ve vhodném formátu a probíhání cyklem pro převod dalšího čísla¨. Je zde ukázáno i pouštění jednořádkového příkazu z příkazového řádku.

dc -e '[[Zadej cislo (v metrech) nebo 0 pro ukonceni.]psj]sh[q]sz[lhx?d0=z10k39.370079*.5+0k12~1/rn[ stop ]Pn[ palcu]P10Pdx]dx'

Odkazy

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.