bc (programovací jazyk)

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é. 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. 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) )
   }
}

Související články

Externí odkazy


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Bc_(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.