Bc (programovací jazyk)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

bc je jazyk pro numerické výpočty s libovolnou přesností se syntaxí podobnou programovacímu jazyku C. Zpravidla je používán napsáním příkazu bc na Unixovém příkazovém řádku (shellu) a zadáním matematického výrazu, jako (1 + 3) * 2, kdy na výstupu ihned obdržíme výsledek 8.

V současné době existují dva dialekty jazyka: přísně definovaný POSIX bc a jeho přímý následník, mnohem rozšířenější GNU bc.

Obě formy bc lze spouštět buď jako matematický skriptovací jazyk, nebo jako interaktivní matematický shell.

POSIX bc

Standardizovaný jazyk POSIX bc je tradičně napsán jako program v programovacím jazyce dc, aby tak na vyšší úrovni poskytl přístup k jeho vlastnostem bez složitosti strohé syntaxe dc.

V této formě obsahuje bc jednopísmenná označení pro proměnné, pole a funkce a většinu standardních aritmetických operátorů, stejně jako řídící struktury (if(podmínka)…, while(podmínka)… a for(inicializace; podmínka; inkrementace)…) známé z jazyka C. Na rozdíl od C však nesmí být klauzule if následována else.

Funkce jsou definovány prostřednictvím klíčového slova define a hodnoty jsou vraceny pomocí příkazu return, následovaného návratovou hodnotou v závorkách. Klíčové slovo auto slouží k deklaraci lokální proměnné funkce.

Všechna čísla a obsah proměnných jsou reálná čísla s pevně danou přesností, jež je (na úrovni desetinných míst) určena globální proměnnou scale.

Číselnou soustavu vstupu (v interaktivním režimu), výstupu a programových konstant lze specifikovat nastavením rezervovaných proměnných ibase (input base, číselná soustava pro vstup) a obase (output base, číselná soustava pro výstup).

Výstup je generovaný tehdy, není-li výsledek výpočtu záměrně uložen do proměnné.

Komentáře mohou být do kódu bc vloženy pomocí symbolů ve stylu C: /* pro začátek a */ pro označení konce komentáře.

Matematické operátory

Stejné jako v C

Následující POSIX bc operátory pracují ve shodě se svými ekvivalenty v jazyce C:

+ - * /

+= -= *= /=

++ --

== != =

[ ] { }

Podobné jako v C

Operátory pro modulo (zbytek po celočíselném dělení):

% %=

…se chovají naprosto stejně jako jejich protějšky v C pouze tehdy, je-li globální proměnná scale nastavena na 0, tj. všechny výpočty jsou výhradně celočíselné. +more Je-li scale větší než 0, je modulus vypočítán ve vztahu k nejmenší kladné hodnotě větší než 0.

Pouze připomínající C

Operátory:

^ ^=

…vypadají jako bitové operátory exlusive-or (xor) v jazyce C, ale ve skutečnosti jsou to v bc exponenciální operátory.

Operátory, které chybí

Bitové, boolovské a podmíněné operátory:

& | ^ && || ^^

&= |= ^= &&= ||= ^^=

>

>=

?:

…nejsou v POSIX bc dostupné.

Zabudované funkce

Funkce sqrt pro výpočet druhé odmocniny je v POSIX bc jedinou zabudovanou matematickou funkcí. Další funkce jsou dostupné v externí standardní knihovně.

Funkce standardní knihovny

Standardní knihovna bc obsahuje funkce pro výpočet sinu, cosinu, arcus tangens, přirozeného logaritmu, exponenciální funkci a dvouparametrickou Besselovu funkci J.

GNU bc

GNU bc vychází ze standardu POSIX a obsahuje mnohá vylepšení. Je zcela oddělen od implementací založených na dc (POSIX dc) a namísto toho je celý napsán v C. +more Přesto zachovává naprostou zpětnou kompatibilitu a tak všechny bc programy dle standardu POSIX poběží v nezměněné podobě i jako GNU bc programy.

Názvy proměnných, polí a funkcí mohou v GNU bc sestávat z více znaků, byly přidány některé další operátory z C a především, klauzule if může být následována else.

Výstup je zajištěn buď ve stylu POSIX (tedy když výsledek výpočtu není přiřazen žádné proměnné), nebo za použití dodatečného příkazu print.

Navíc, příkaz read umožňuje interaktivní vkládání číselných hodnot za běhu výpočtu.

Jako přídavek ke komentářům ve stylu C, znak # způsobí, že cokoli je za ním až do konce řádku je ignorováno.

Výsledek posledního výpočtu je vždy uložen v dodatečně zabudované proměnné last.

Dodatečné operátory

Následující logické operátory rozšiřují výčet operátorů z POSIX bc:

&& || !

…a je možné je použít v podmíněných konstrukcích (např. if). Nicméně bitové a přiřazovací operátory stále nemají v bc svůj ekvivalent.

Funkce

Veškeré funkce dostupné v GNU bc jsou poděděné ze standardu POSIX, žádné dodatečné funkce nejsou standardně v distribuci zahrnuty.

Ukázka kódu

Jelikož operátor ^ dovoluje na místě exponentu pouze celé číslo, jednou z prvních funkcí, které může uživatel napsat, je funkce s reálným exponentem. Oba níže uvedené příklady předpokládají použití standardní knihovny:

Funkce mocnina v POSIX bc

/* Funkce, ktera vrati celociselnou cast x */ define i(x) { auto s s = scale scale = 0 x /= 1 /* zaokrouhli x dolu */ scale = s return (x) }

/* Vyuziva skutecnosti, ze x^y

e^(y*log(x)) */ define m(x,y) { if (y

i(y)) { return (x ^ y) } return ( e( y * l(x) ) ) }

Ekvivalentní funkce v GNU bc

# Funkce, ktera vrati celociselnou cast promenne cislo define int(cislo) { auto oldscale oldscale = scale scale = 0 cislo /= 1 /* round number down */ scale = oldscale return cislo }

# Vyuziva skutecnosti, ze cislo^exponent

e^(exponent*log(cislo)) define mocnina(cislo,exponent) { if (exponent

int(exponent)) { return cislo ^ exponent } else { return e( exponent * l(cislo) ) } }

Externí odkazy

[url=http://www. funet. +morefi/pub/doc/posix/p1003. 2/d11. 2/4. 3]Specifikace POSIX bc[/url] (anglicky) * [url=http://www. gnu. org/software/bc/manual/html_mono/bc. html]Manuálová stránka GNU bc[/url] (anglicky) * [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ž velká část se zabývá právě bc.

Kategorie:Programovací jazyky Kategorie:Unix Kategorie:Numerické programovací jazyky

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