dc (programovací jazyk)

Manuálová stránka programu GNU dc říká: 'Dc je kalkulátor s reverzní polskou notací a neomezenou aritmetickou přesností'. Je jednou z nejstarších unixových utilit a předchází dokonce vzniku programovacího jazyka C. Stejně jako jiné utility té doby se vyznačuje mocnými vlastnostmi, také však extrémně strohou syntaxí. Tradičně, na základě dc byl vytvořen uživatelsky příjemnější kalkulační program bc (s infixovou notací), ačkoli většina jeho současných implementací už není s dc nijak spojena.

Nástroje dc a bc byly vyvinuty Lorindou Cherryovou a Robertem Morrisem z Bellových laboratořích[1][2][3].

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 reverzní polské notaci, což znamená, že matematické výrazy jsou prováděny na způsob zásobníku. Příklad – vynásobení čísel pět a šest (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í; bohužel je jeho syntaxe velmi strohá a komplexní programy bývají jen velmi obtížně čitelné.

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: '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í příkaz:

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'

Ten převede 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.

Další příklad je implementací Euklidova algoritmu pro nalezení největšího společného dělitele:

dc -e '?[dSarLa%d0<a]dsax+p' # kratsi
dc -e '[a=]P?[b=]P?[dSarLa%d0<a]dsax+[GCD:]Pp' # komfortnější verze

Reference

  1. Lorinda Cherry, Robert Morris - BC - An Arbitrary Precision Desk-Calculator Language dostupné anglicky online
  2. Or if you're a fan of cli tools, check out dc! | Hacker News. news.ycombinator.com [online]. [cit. 2022-02-17]. Dostupné online. 
  3. KRČMÁŘ, Petr. Zemřela Lorinda Cherryová, autorka utilit bc a dc. Root.cz [online]. [cit. 2022-02-17]. Dostupné online. 

Externí odkazy


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Dc_(programovací_jazyk)
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.