Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Programovatelná a interaktivní kalkulačka bc

Pravděpodobně se vám už stalo, že jste museli použít svůj počítač k tomu, od čeho je odvozeno jeho jméno – k počítání. Možná jste sáhli po nějaké jednoduché grafické kalkulačce a jednoduchý výpočet vyřídili velmi rychle. Nebo jste narazili na to, že byste potřebovali sofistikovanější a mocnější nástroj.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Trojjediné bc

Mocný nástroj bc je tu s námi už velmi dlouho. Jedná se vlastně o matematický programovací jazyk, s jehož pomocí můžete provádět jednoduché, ale i velmi komplexní matematické výpočty. Existuje ve třech základních variantách: POSIX bc je původní a pevně definovaný bc jazyk, ze kterého se postupně vytvořily dialekty GNU bc a Plan 9 bc. Dnes je jednoznačně nejrozšířenější GNU bc, který naleznete zcela jistě ve své oblíbené distribuci.

Domovská stránka programu se nachází na webu FSF, kde můžete samozřejmě získat zdrojové kódy pod licencí GNU GPL. Díky naprosto minimálním nárokům na závislosti je možné bc provozovat na všech unixových systémech. Díky projektu GnuWin32 je možné bc provozovat i na MS Windows.

Pokud si chcete vše v tomto článku vyzkoušet bez instalace bc, můžete dokonce vyzkoušet plně funkční online variantu. Všechny zmíněné instalace GNU bc vycházejí z jedněch zdrojových kódů (aktuální je verze 1.06) a nabízejí shodné možnosti.

Jednoduché bc

Samotný příkaz můžete využít jak v řádkovém režimu, tak i v zajímavějším interaktivnějším. Na začátku můžeme využít především základní operátory jako součet (+), rozdíl (-), násobení (*) a dělení (/). Kromě toho tu máme také třeba zbytek po celočíselném dělení (%) nebo mocninu (^). Použití v řádce je jednoduché:

$ echo "(3+4)*7" | bc
49

Takto je možné utilitu využít například ve skriptech, kde potřebujeme jednoduše provádět složitější výpočty. Pro nás bude ale zajímavější interaktivní režim. K tomu přejdeme jednoduše tak, že příkaz spustíme bez parametrů.

Octneme se v jeho interaktivní konzole, ve které můžeme vytvářet základní výpočty. Příklad jako obvykle napoví nejvíce:

$ bc
4+7
11

5*5
25

14/7
2

(37-12)*3
75
quit

Vidíte, že jednoduché výpočty je možné provádět vlastně bez znalosti jazyka bc. Pokud chcete rychle spočítat několik čísel, jedná se o poměrně příjemnou cestu. Navíc si program pamatuje historii, ve které se můžete pohybovat pomocí kurzorových kláves, jak jsme na to zvyklí v shellu.

Mocnější bc

Jelikož se jedná o jazyk, pravděpodobně tušíte, že toho bude umět podstatně více. Základem jsou například proměnné, kterých je možné využít k ukládání výsledků a výpočty tak snadno řetězit a propojovat.

$ bc
cislo=12*2
druhe=cislo+7
druhe
31
quit

Vidíte, že jsem do proměnné cislo uložil výsledek výrazu 12*2, pak jsem vytvořil další proměnnou a k výpočtu její hodnoty jsem využil první proměnnou. Výsledek jsem pak vypsal pouhým zapsáním názvu proměnné. V bc existuje ještě jedna speciální proměnná, kterou reprezentuje znak tečky. Tečka obsahuje výsledek posledního výpočtu.

$ bc
7+3
10
.-7
3
quit

Samozřejmě je možné tečku využívat jako každou jinou proměnnou a můžete s ní tedy provádět další výpočty. Zatím jsme si ukázali jednoduché celočíselné výpočty. Program bc ale dovoluje pracovat se zcela libovolnou přesností. Ta se řídí proměnnou scale, která určuje, na kolik desetinných míst budou výpočty probíhat. Standardně je nastavena na nulu, takže je třeba ji v případě potřeby zvýšit.

& bc
scale


7/4
1

scale=2
7/4
1.75

scale=10
7/3
2.3333333333
quit

Ještě mocnější bc

Celá syntaxe bc je odvozena od programovacího jazyka C. Můžete tak využívat i dalších obvyklých operátorů jako ++, --, +=, -=, *=, /=, ^= a %=.

$ bc
a=10
a+=5
a
15

a-=9
a
6

a%=5
a
1

a++
2

quit

Zároveň můžeme použít i operátory pro porovnání, jako je rovnost (==), méně (<), více (>), více nebo rovno (>=), méně nebo rovno (<=) či nerovnost (!=). Zároveň je možné porovnání kombinovat klasicky pomocí and (&&) či or (||). Pokud jste zvyklí na syntaxi C, budete se v bc cítit jako doma.

Hustodémonsky krutopřísné bc

Od jednoduché matematiky se pak můžete přesunout k samotnému programovacímu jazyku. My si z něj ukážeme jen malý kousek jako demonstraci ohromných možností bc. To zvládá například takové věci jako jsou cykly.

$ bc
for(a=0;a<10;++a){
a;
}

1
2
3
4
5
6
7
8
9
quit

Využít můžete ale také smyček, jako například while.

$ bc
a=0
while(a<10{
a;
void ++a;
}

1
2
3
4
5
6
7
8
9
quit

V bc je možné definovat také vlastní funkce. Jejich zápis je opět velmi povědomý:

$ bc
define funkce(a){
return(a * a);
}
funkce(3)
9
quit

Delší sekvence příkazů samozřejmě nemusíte zapisovat a spouštět přímo, ale můžete si je zapsat do textového souboru a jeho jméno pak předat bc jako parametr. Program se spustí a bude načítat obsah souboru řádek po řádce, jako byste vše znovu opisovali ručně.

A ještě dál

Tím jsme ani zdaleka nevyčerpali možnosti a schopnosti bc. Pomocí silného jazyka je možné vytvářet podstatně komplexnější programy. K dispozici jsou například funkce pro práci s datem a časem a další užitečné možnosti. Pro poslední ukázku jsem si vypůjčil příklad z jednoho pokročilejšího tutoriálu:

# addgrg yyyymmdd days - adds days to yyyymmdd and outputs new yyyymmdd

if [ $# != 2 ]
 then
    echo "Not enough arguments"
    echo "Syntax addgrg yyyymmdd [-]days"
    exit
 fi

bc < 0 ; ++m){
      n = m(y,m);
      d -= n;
   }
   void --m;
   d+=n;
   g= (y*10000)+(m*100)+d;
   return(g);
}
/* convert gregorian (yyyymmdd) to julian(yyyyddd)*/
define j(g){
   auto y,m,d,x,i,j;
   y=g/10000;
   m=(g/100) % 100;
   d=g%100;
   for(x=1;xi){
      y+=1;
      d-=i;
      i=y(y);
   }
   while(d<1){
      y-=1;
      i=y(y);
      d+=i;
   }
   r= (y*1000)+d;
   return(r);

}
/* add positive or negative days to a greg date - returns new date */
define a(g,a){
   auto j,r;
   j=j(g);
   j=b(j,a);
   r=g(j)
   return(r);
}

 /* call add to greg using the two command line arguments*/
 a($1,$2)

quit
END-OF-INPUT

Tento ukázkový program umí pracovat s datem (ve formátu yyyymmdd) a dokáže k němu přičíst libovolný počet dnů. Jeho výstup pak vypadá takto:

addgrg 19980101 -1
19971231
addgrg 20000101 60
20000301
addgrg 20000101 59
20000229
addgrg 19000101 365
19010101
addgrg 20001231 -365
20000101

Výkonný, jak zrovna potřebujete

Výhodou bc je jeho opravdu široký záběr. Můžete jej považovat za příjemně jednoduchou kalkulačku s možností ukládání do proměnných, které podstatně zvyšují možnosti výpočtu. Můžete jej ale také brát jako komplexní prostředí pro složitou matematiku, které můžete zakomponovat do svých velkých skriptů. Tady máte nástroj. Využití je už na vás.

Další zdroje ke studiu

Petr Krčmář

Petr Krčmář

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Vystudoval elektroniku se zaměřením na počítačové systémy, nyní se zabývá médii, především těmi elektronickými.

Školení: Zavedení Google Apps do firmy

Cílem školení je provést účastníky jednotlivými kroky zavedení Google Apps na vlastní doménu a seznámit je se základy administrace, aby byli schopni Google Apps sami udržovat a rozvíjet dle potřeb. Účastníci se také dozví, jak používat základní služby v balíku Google Apps (Gmail, Kalendář, Dokumenty a Weby Google) a jaké jsou možnosti jejich využití ve firmě.

Podrobnější informace a přihláška  

Ohodnoťte jako ve škole:
Průměrná známka 2,65

Přehled názorů

Yes!
monzunk 3. 2. 2010 01:20
Nový
└ 
Re: Yes!
Petr Mejzlík 4. 2. 2010 21:57
Nový
toe jak reklama na praci prasek :)
YF 3. 2. 2010 05:31
Nový
└ 
Re: toe jak reklama na praci prasek :)
stativ 3. 2. 2010 10:01
Nový
 
└ 
Re: toe jak reklama na praci prasek :)
Petr Krčmář 3. 2. 2010 10:10
Nový
 
 
└ 
Re: toe jak reklama na praci prasek :)
42 3. 2. 2010 14:10
Nový
Chybička v příkladu se smyčkou
BobTheBuilder 3. 2. 2010 09:04
Nový
└ 
Re: Chybička v příkladu se smyčkou
Petr Krčmář 3. 2. 2010 09:08
Nový
 
└ 
Re: Chybička v příkladu se smyčkou
BobTheBuilder 3. 2. 2010 09:13
Nový
 
 
└ 
Dalsi chybicka
Miloss 4. 2. 2010 15:24
Nový
tak nevim...
sycho 3. 2. 2010 09:09
Nový
├ 
Re: tak nevim...
tonda 3. 2. 2010 09:20
Nový
├ 
python
tom 3. 2. 2010 11:46
Nový
│
└ 
Re: python
Xjmeno363 3. 2. 2010 13:56
Nový
│
 
├ 
Re: python
nemo 3. 2. 2010 14:17
Nový
│
 
└ 
Re: python
42 3. 2. 2010 15:37
Nový
│
 
 
└ 
Re: python
Xjmeno363 3. 2. 2010 15:45
Nový
└ 
Re: tak nevim...
maks 3. 2. 2010 13:19
Nový
 
└ 
Re: tak nevim...
Father Hurley 3. 2. 2010 13:29
Nový
 
 
└ 
Re: tak nevim...
Xjmeno363 4. 2. 2010 11:49
Nový
 
 
 
└ 
Re: tak nevim...
Hynek Vychodil 11. 2. 2010 10:11
Nový
Uzivatelska konfigurace
Miroslav Kucera 3. 2. 2010 09:28
Nový
octave
pap 3. 2. 2010 09:38
Nový
Re: Programovatelná a interaktivní kalkulačka bc
Karel Zak 3. 2. 2010 09:46
Nový
Kouknete na "calc"
anydot 3. 2. 2010 10:02
Nový
└ 
Re: Kouknete na "calc"
Marek Chlup 3. 2. 2010 11:13
Nový
gp [tohle tu byt nemuselo, ale protoze je to nutne ... doplneni titulku aby…
s 3. 2. 2010 10:51
Nový
pekne napsane
typan 3. 2. 2010 11:04
Nový
└ 
Re: pekne napsane
xstanda 3. 2. 2010 11:05
Nový
odmocniny
xstanda 3. 2. 2010 11:11
Nový
└ 
Re: odmocniny
leumas 3. 2. 2010 19:19
Nový
 
└ 
Re: odmocniny
Pavel 6. 2. 2010 23:05
Nový
diky
tomash01 3. 2. 2010 11:16
Nový
Diky!
Tomas Vymazal 3. 2. 2010 11:23
Nový
bc je k ničemu
Martin Soušek 3. 2. 2010 11:24
Nový
└ 
Re: bc je k ničemu
Father Hurley 3. 2. 2010 13:32
Nový
Libovolná mocnina a odmocnina
Tuttle 3. 2. 2010 13:18
Nový
├ 
Re: Libovolná mocnina a odmocnina
xstanda 3. 2. 2010 13:39
Nový
│
└ 
Re: Libovolná mocnina a odmocnina
Marek Chlup 3. 2. 2010 15:04
Nový
│
 
└ 
Re: Libovolná mocnina a odmocnina
Marek Chlup 3. 2. 2010 15:06
Nový
└ 
Re: Libovolná mocnina a odmocnina
xstanda 3. 2. 2010 13:49
Nový
Proc bc?
Michal Ambroz 3. 2. 2010 15:52
Nový
skvele osvezeni mysli
rastakajakwanna 3. 2. 2010 16:10
Nový
Nieco co pocita s presnostou na 200 des. miest
TrSek 3. 2. 2010 17:17
Nový
├ 
Re: Nieco co pocita s presnostou na 200 des. miest
JardaP . 3. 2. 2010 19:28
Nový
│
└ 
Re: Nieco co pocita s presnostou na 200 des. miest
TrSek 4. 2. 2010 12:36
Nový
├ 
Re: Nieco co pocita s presnostou na 200 des. miest
nemo 4. 2. 2010 01:36
Nový
└ 
Re: Nieco co pocita s presnostou na 200 des. miest
Daniel Housar 24. 6. 2010 01:34
Nový
Props
Adam Konrád 3. 2. 2010 20:19
Nový
co to je zase za hovadinu
mat 5. 2. 2010 09:59
Nový
bc vs. dc
e. 6. 2. 2010 18:44
Nový
Prispevky
Palo 7. 2. 2010 13:14
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem