Dc (programovací jazyk)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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.

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. +more 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ů. +more 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. +more Následující příklad vypíše řetězec 'shodne' jen tehdy, je-li hodnota na vrcholu zásobníku rovna 5:.

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

Příkladem budiž následující příkaz:

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

Reference

Externí odkazy

[url=http://www. die. +morenet/doc/linux/man/man1/dc. 1. html]Manuálová stránka GNU dc[/url] * [url=https://web. archive. org/web/20051116050448/http://www. linuxsoft. cz/article. php. id_article=713]Linux v příkazech - aritmetika[/url] - článek na serveru [url=https://web. archive. org/web/20130530004211/http://www. linuxsoft. cz/]linuxsoft. cz[/url], jehož část se zabývá dc.

Kategorie:Programovací jazyky Kategorie:Unix

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top