Provided by: manpages-pl_20060617-3_all bug

NAZWA

       bc - jzyk kalkulatora dowolnej precyzji

SK/LADNIA

       bc [-hlwsqv] [d/lugie_opcje] [plik...]

WERSJA

       Niniejszy podrcznik opisuje GNU bc w wersji 1.06.

OPIS

       bc  jest jzykiem obslugujcym obliczenia na liczbach dowolnej dokladnoci
       z interaktywnym  wykonywaniem  instrukcji.  Istniej  pewne  podobiestwa
       skladni  do  jzyka  programowania  C.  Przy pomocy opcji wiersza polece
       dostpna jest standardowa biblioteka matematyczna. Na danie,  biblioteka
       matematyczna  jest  definiowana przed rozpoczciem przetwarzania plikow.
       bc rozpoczyna prac przetwarzajc kod z wszystkich plikow wymienionych  w
       wierszu  polece,  zachowujc  ich  kolejno.  Po przetworzeniu wszystkich
       plikow, bc czyta ze standardowego wejcia. Calo kodu wykonywana  jest  w
       miar  czytania.  (Jeli plik zawiera polecenie zatrzymania procesora, to
       bc nie bdzie prowadzil odczytu ze standardowego wejcia.)

       Omawiana wersja bc zawiera kilka rozszerze w stosunku  do  tradycyjnych
       realizacji  bc i standardu POSIX.  Opcje wiersza polece mog powodowa, e
       rozszerzenia te bd wywietla  ostrzeenia  lub  bd  odrzucane.  Niniejszy
       dokument opisuje jzyk akceptowany przez ten procesor bc. Rozszerzenia s
       w nim wyranie wyronione.

   OPCJE
       -h, --help
              Wypisuje informacj o sposobie wywolania i koczy dzialanie.

       -i, --interactive
              Wymusza tryb interaktywny.

       -l, --mathlib
              Definiuje standardow bibliotek matematyczn.

       -w ,  --warn
              Ostrzega o rozszerzeniach w stosunku do POSIX bc.

       -s ,  --standard
              Przetwarza wylcznie standardowy, POSIX-owy jzyk bc.

       -q ,  --quiet
              Nie wywietla zwyklego przywitania GNU bc.

       -v ,  --version
              Wypisuje numer wersji, informacj o prawach  autorskich  i  koczy
              dzialanie.

   LICZBY
       Najbardziej  podstawowym  elementem w bc jest liczba. Liczby s liczbami
       dowolnej dokladnoci. Dokladno ta odnosi si zarowno do  czci  calkowitej
       jak  i  do  ulamkowej.  Wszystkie  liczby s reprezentowane wewntrznie w
       postaci dziesitnej i  wszystkie  obliczenia  prowadzone  s  w  ukladzie
       dziesitnym.   (Opisywana  wersja  obcina  wyniki  operacji  dzielenia i
       mnoenia.)  Liczby posiadaj dwa atrybuty: dlugo i dokladno.  [od  tlum.:
       (org.scale)  -  w tlumaczeniu uywane bdzie slowo `dokladno' w znaczeniu
       zblionym do znanego np. z obslugi  kalkulatorow]  Dlugo  jest  calkowit
       liczb  cyfr  znaczcych  liczby,  za  dokladno  jest calkowit liczb cyfr
       dziesitnych po kropce dziesitnej.  Na przyklad:
               .000001 ma dlugo 6 i dokladno 6.
               1935.000 ma dlugo 7 i dokladno 3.

   ZMIENNE
       Liczby przechowywane s w dwu rodzajach zmiennych, zmiennych prostych  i
       tablicach.  Zarowno  zmienne proste jak i tablice posiadaj nazwy. Nazwy
       zaczynaj si od litery, po ktorej nastpuje dowolna liczba liter, cyfr  i
       znakow  podkrelenia.  Wszystkie  litery  musz  by  male. (Nazwy w pelni
       alfanumeryczne s  rozszerzeniem.  W  POSIXowym  bc  wszystkie  nazwy  s
       pojedynczymi  malymi literami.) Rodzaj zmiennej wynika z kontekstu, gdy
       po nazwie kadej zmiennej tablicowej wystpi nawiasy ([]).

       Istniej cztery zmienne specjalne: scale, ibase, obase oraz last.  scale
       okrela,  jak  niektore operacje uywaj cyfr po kropce dziesitnej. Domyln
       wartoci scale jest 0. ibase  oraz  obase  okrelaj  podstaw  pozycyjnego
       systemu  liczbowego  przy  konwersji  wejcia  i  wyjcia. Domyln podstaw
       zarowno dla wejcia  jak  i  dla  wyjcia  jest  10.  last  (rozszerzenie
       standardu)  jest  zmienn, ktora przechowuje warto ostatnio wydrukowanej
       liczby. Zmienne te bd omowione szczegolowo poniej, w odpowiedniej czci.
       Wszystkie z nich mog mie przypisywane wartoci, jak rownie mog by uywane
       w wyraeniach.

   KOMENTARZE
       Komentarze w bc rozpoczynaj  si  od  znakow  /*  za  kocz  znakami  */.
       Komentarze  mog  zaczyna  si w dowolnym miejscu i na wejciu pojawiaj si
       jako pojedyncze spacje. (Powoduje to,  e  komentarze  s  ogranicznikami
       innych  elementow  wejcia. Na przyklad, komentarz nie moe znajdowa si w
       rodku nazwy zmiennej.)  Komentarze  obejmuj  znaki  nowej  linii  (koca
       linii) pomidzy pocztkiem a kocem komentarza.

       Do  zapewnienia  obslugi  skryptow  dla  bc,  jako  rozszerzenie dodano
       komentarz w pojedynczym wierszu. Komentarz jednowierszowy rozpoczyna si
       znakiem  #  i  rozciga  si do koca wiersza. Znak koca linii nie jest tu
       czci komentarza i jest przetwarzany jak zwykle.

   WYRAENIA
       Liczbami  posluguj  si  wyraenia  i  instrukcje.  Poniewa  jzyk  zostal
       zaprojektowany  jako  interaktywny,  instrukcje i wyraenia wykonywane s
       niezwlocznie. Nie ma adnego programu "glownego" ("main"). Zamiast tego,
       kod  jest  wykonywany  zaraz  po  jego  napotkaniu.  (Funkcje, omowione
       szczegolowo dalej, s zdefiniowane po ich napotkaniu.)

       Proste wyraenie jest po prostu stal. bc  zamienia  stale  na  wewntrzne
       liczby  dziesitne  przy uyciu biecej podstawy systemu dla wprowadzania,
       podanej w zmiennej ibase. (Istnieje wyjtek dla funkcji.) Dopuszczalnymi
       wartociami  ibase  s  2  do  16.  Przypisanie  ibase wartoci spoza tego
       zakresu nada jej warto 2 lub 16. Liczby wejciowe mog zawiera znaki  0-9
       oraz  A-F.  (Uwaga:  musz  to  by wielkie litery. Male litery s nazwami
       zmiennych.) Liczby jednocyfrowe maj zawsze warto cyfry, bez  wzgldu  na
       warto  ibase.  (tj.  A  =  10.)  Dla  liczb  wielocyfrowych bc zamienia
       wszystkie cyfry wejciowe  wiksze  bd  rowne  ibase  na  warto  ibase-1.
       Powoduje  to,  e liczba FFF bdzie zawsze najwiksz trzycyfrow liczb przy
       danej podstawie systemu dla wejcia.

       Pelne wyraenia s podobne  do  wystpujcych  w  wielu  jzykach  wysokiego
       poziomu.  Poniewa  wystpuje  tylko  jeden  rodzaj  liczb,  nie ma regul
       okrelajcych uycie ronych typow. Zamiast tego  istniej  reguly  dotyczce
       dokladnoci  wyrae. Kade wyraenie posiada okrelon dokladno. Zaley ona od
       dokladnoci  pierwotnych  liczb,  wykonywanego  dzialania  i,  w   wielu
       przypadkach, wartoci zmiennej scale. Dopuszczalnymi wartociami zmiennej
       scale s liczby od 0 a do maksymalnej liczby, jaka moe by reprezentowana
       jako calkowita (integer) w jzyku C.

       W podanych poniej opisach dopuszczalnych wyrae, "wyraenie" okrela pelne
       wyraenie a "zmienna" okrela zmienn prost lub  tablicow.   Zmienn  prost
       jest po prostu
              nazwa
       a zmienna tablicowa jest okrelona jako
              nazwa[wyraenie]
       Dokladno wyniku jest maksymaln z dokladnoci uytych w nim wyrae, chyba e
       podano inaczej.

       - wyraenie
              Wynikiem jest warto przeciwna do wyraenia.

       ++ zmienna
              Zmienna jest powikszana o jeden a wynikiem wyraenia jest ta nowa
              warto.

       -- zmienna
              Zmienna  jest  pomniejszana  o jeden a wynikiem wyraenia jest ta
              nowa warto.

       zmienna ++
              Wynikiem wyraenia jest warto zmiennej, a nastpnie  zmienna  jest
              powikszana o jeden.

       zmienna --
              Wynikiem  wyraenia  jest warto zmiennej, a nastpnie zmienna jest
              pomniejszana o jeden.

       wyraenie + wyraenie
              Wynikiem tego wyraenia jest suma obu wyrae.

       wyraenie - wyraenie
              Wynikiem tego wyraenia jest ronica obu wyrae.

       wyraenie * wyraenie
              Wynikiem tego wyraenia jest iloczyn obu wyrae.

       wyraenie / wyraenie
              Wynikiem tego wyraenia jest iloraz obu  wyrae.  Liczba  cyfr  po
              kropce dziesitnej wyniku jest rowna wartoci zmiennej scale.

       wyraenie % wyraenie
              Wynikiem  tego  wyraenia  jest  "reszta" z dzielenia obliczana w
              nastpujcy sposob. W celu obliczenia a%b, obliczane jest najpierw
              a/b z dokladnoci do scale cyfr dziesitnych. Wynik uywany jest do
              obliczenia a-(a/b)*b z  dokladnoci  okrelon  jako  maksymalna  z
              scale+scale(b)  oraz  scale(a).   Jeeli  scale ustawiona jest na
              zero, za oba wyraenia s calkowite to  wyraenie  to  jest  funkcj
              reszty calkowitej.

       wyraenie ^ wyraenie
              Wynikiem tego wyraenia jest warto pierwszego z wyrae podniesiona
              do potgi okrelonej przez drugie. Drugie wyraenie musi  by  liczb
              calkowit.    (Jeli   drugie  wyraenie  nie  jest  calkowite,  to
              emitowane jest ostrzeenie  a  wyraenie  jest  obcinane  tak,  by
              otrzyma  warto  calkowit).  Liczba cyfr ulamkowych wyniku wynosi
              scale, jeli wykladnik jest ujemny. Jeeli  jest  on  dodatni,  to
              dokladno  (liczba  cyfr  po  kropce  dziesitnej)  wyniku stanowi
              minimum z dokladnoci pierwszego wyraenia przemnoonej przez warto
              wykladnika  i maksimum z scale i dokladnoci pierwszego wyraenia.
              To znaczy:
              scale(a^b) = min(scale(a)*b, max( scale, scale(a)))
              Naley pamita, e wyraenie^0 zawsze zwraca warto 1.

       ( wyraenie )
              Nawiasy wymuszaj zmian standardowych priorytetow przy obliczaniu
              wyraenia.

       zmienna = wyraenie
              Zmiennej przypisywana jest warto wyraenia.

       zmienna <op>= wyraenie
              jest  to rownowane zapisowi "zmienna = zmienna <op> wyraenie", z
              wyjtkiem tego, i cz "zmienna" jest wyliczana tylko raz.  Moe  to
              by istotne, jeli "zmienna" jest tablic.

       Wyraenia relacyjne s specjalnym rodzajem wyrae, zwracajcym zawsze warto
       0 lub 1: zero jeli relacja jest falszywa, za 1  jeeli  jest  prawdziwa.
       Mog  one wystpowa w dowolnych dozwolonych wyraeniach. (POSIX bc wymaga,
       by  wyraenia relacyjne byly uywane wylcznie w instrukcjach if, while  i
       for  oraz  aby  bylo  w  nich  uyte  tylko  jedno sprawdzenie relacji.)
       Operatorami relacji s:

       wyraenie1 < wyraenie2
              Wynikiem jest jeden jeli wyraenie1 jest mniejsze ni wyraenie2.

       wyraenie1 <= wyraenie2
              Wynikiem jest 1 gdy wyraenie jest mniejsze bd rowne wyraenie2.

       wyraenie1 > wyraenie2
              Wynikiem jest 1 jeli wyraenie1 jest wiksze ni wyraenie2.

       wyraenie1 >= wyraenie2
              Wynikiem jest 1 gdy wyraenie1 jest wiksze bd rowne wyraenie2.

       wyraenie1 == wyraenie2
              Wynikiem jest 1 gdy wyraenie1 jest rowne wyraenie2.

       wyraenie != wyraenie2
              Wynikiem jest 1 gdy wyraenie1 nie jest rowne wyraenie2.

       Dozwolone s take operacje logiczne.  (POSIX  bc  NIE  posiada  operacji
       logicznych).  Wynikami  wszystkich  operacji  logicznych s 0 lub 1 (dla
       falszu i prawdy), tak jak dla wyrae relacyjnych. Operatorami logicznymi
       s:

       !wyraenie
              Zaprzeczenie. Wynikiem jest 1 jeli wyraenie ma warto 0.

       wyraenie && wyraenie
              Koniunkcja. Wynikiem jest 1 jeeli oba wyraenia s niezerowe.

       wyraenie || wyraenie
              Alternatywa.   Wynikiem   jest  1  jeli  dowolne  z  wyrae  jest
              niezerowe.

       Wyraenia posiadaj nastpujcy priorytet: (od najniszego do najwyszego)
              operator ||, wizanie lewe
              operator &&, wizanie lewe
              operator !, niezwizany
              operatory relacji, wizanie lewe
              operator przypisania, wizanie prawe
              operatory + i -, wizanie lewe
              operatory *, / i %, wizanie lewe
              operator ^, wizanie prawe
              jednoargumentowy operator -, niezwizany
              operatory ++ i --, niezwizane

       Kolejno wykonywania zostala dobrana tak, by programy zgodne z POSIX  bc
       dzialaly poprawnie. Powoduje to, e operatory relacyjne i logiczne, uyte
       w wyraeniach przypisania, bd wykazywa niecodzienne zachowywanie.  Rozwa
       wyraenie:
              a = 3 < 5

       Wikszo  programistow C uwaalaby, e przypisze ono wynik operacji "3 < 5"
       (warto 1) zmiennej "a". Tymczasem w bc nadaje ono warto 3 zmiennej "a",
       a  nastpnie  porownuje  3  z  5. Uywajc operatorow relacji i operatorow
       logicznych  z  operatorami  przypisania  najlepiej   jest   posluy   si
       nawiasami.

       bc  obsluguje  jeszcze  kilka innych wyrae specjalnych. Zwizane s one z
       funkcjami definiowanymi przez  uytkownika  i  funkcjami  standardowymi.
       Wszystkie  one  maj posta "nazwa(parametry)". Funkcje definiowane przez
       uytkownika opisano w sekcji Funkcje. Funkcjami standardowymi s:

       length ( wyraenie )
              Wynikiem funkcji length jest liczba cyfr znaczcych w wyraeniu.

       read ( )
              Funkcja ta, bdca rozszerzeniem, odczytuje liczb ze standardowego
              wejcia,  niezalenie od miejsca uycia funkcji. Strze si -- moe to
              spowodowa klopoty przy przeplataniu  si  danych  i  programu  ze
              standardowego wejcia.  Najlepszym zastosowaniem tej funkcji jest
              uycie  jej  w  uprzednio  napisanym  programie,   ktory   wymaga
              wprowadzania  danych  przez uytkownika, ale nigdy nie pozwala na
              wprowadzanie kodu programu. Wynikiem dzialania funkcji read jest
              liczba  odczytana  ze  standardowego  wejcia  z  konwersj ukladu
              liczbowego wedlug aktualnej wartoci zmiennej ibase.

       scale ( wyraenie )
              Wynikiem funkcji scale jest liczba cyfr po kropce  dziesitnej  w
              wyraeniu bdcym jej parametrem.

       sqrt ( wyraenie )
              Wynikiem  funkcji  sqrt  jest pierwiastek kwadratowy z wyraenia.
              Jeeli wyraenie ma warto ujemn, to generowany jest bld wykonania.

   INSTRUKCJE
       Instrukcje (jak w wikszoci jzykow algorytmicznych) umoliwiaj sterowanie
       kolejnoci wykonywania wyrae. W bc instrukcje wykonywane s bezzwlocznie,
       "tak szybko jak to jest moliwe". Wykonanie odbywa si gdy napotkano znak
       nowej  linii  i  istnieje jedna lub wicej pelna instrukcja.  W zwizku z
       takim natychmiastowym wykonaniem, znaki nowej linii s bardzo istotne  w
       bc.  W  rzeczywistoci,  jako  organiczniki  instrukcji uywane s zarowno
       znaki nowej linii jak i redniki. Nieprawidlowo umieszczony  znak  nowej
       linii  spowoduje  bld  skladni.  Poniewa  znaki  nowej linii rozdzielaj
       instrukcje, moliwe jest ich ukrycie (przed  interpretacj)  przy  pomocy
       znaku  odwrotnego  ukonika.  Sekwencja "\<nl>", gdzie <nl> jest znakiem
       nowej linii postrzegana jest przez bc jako znak zwyklej spacji  zamiast
       znaku  nowej  linii.  Poniej  umieszczono  list  instrukcji  bc  i  ich
       znaczenia:  (elementy  umieszczone  w  nawiasach  kwadratowych  ([])  s
       opcjonalnymi czciami instrukcji.)

       wyraenie
              Instrukcja ta wykonuje dwie rzeczy. jeeli wyraenie rozpoczyna si
              od  "<zmienna>  <przypisanie>  ...",  to  jest  traktowane   jak
              instrukcja   przypisania.   Jeli  wyraenie  nie  jest  instrukcj
              przypisania,  to  wyraenie  jest  wyliczane   i   drukowane   na
              standardowym  wyjciu. Po wydrukowaniu liczby drukowany jest znak
              nowej linii. Na przyklad, "a=1" jest  instrukcj  przypisania  za
              "(a=1)" jest wyraeniem zawierajcym przypisanie. Wszystkie liczby
              drukowane s przy uyciu  systemu  pozycyjnego  okrelonego  zmienn
              obase.  Dopuszczalnymi  wartociami  obase  s  2  do BC_BASE_MAX.
              (Patrz sekcja OGRANICZENIA.) Dla podstaw  systemu  od  2  do  16
              uywana jest zwyczajowa metoda zapisu liczb. Dla podstaw wikszych
              od 16 bc posluguje  si  metod  cyfr  wieloznakowych  wywietlania
              liczb,  gdzie  kada z kolejnych cyfr wywietlana jest jako liczba
              dziesitna. Cyfry wieloznakowe oddzielane s odstpami. Kada z cyfr
              zawiera  tyle  znakow,  ile  jest  niezbdnych  do przedstawienia
              dziesitnie  wartoci  "obase-1".  Poniewa   liczby   maj   dowoln
              dokladno, niektore z liczb mog nie da wydrukowa si w pojedynczym
              wierszu. Takie dlugie liczby  zostan  podzielone  midzy  wiersze
              przy  zastosowaniu  "\" jako ostatniego znaku wiersza. Maksymaln
              liczb  znakow  drukowanych  w  wierszu   jest   70.   Z   powodu
              interaktywneggo charakteru bc drukowanie liczby ma efekt uboczny
              w  postaci  przypisania  wydrukowanej  wartoci   do   specjalnej
              zmiennej  o  nazwie  last.  Umoliwia to uytkownikowi odtworzenie
              ostatnio wydrukowanej wartoci bez potrzeby ponownego  wpisywania
              wyraenia,  ktore  j wydrukowalo. Nadawanie wartoci zmiennej last
              jest dozwolone; spowoduje ono zastpienie  ostatnio  wydrukowanej
              wartoci wartoci przypisan. Nowo przypisana warto pozostanie a do
              wydrukowania kolejnej liczby lub  nadania  last  innej  wartoci.
              (Niektore z implementacji mog dopuszcza uycie pojedynczej kropki
              (.), nie bdcej czci liczby, jako skroconej notacji dla last.)

       lacuch Na wyjciu drukowany jest lacuch znakowy. Lacuchy rozpoczynaj  si
              znakiem cudzyslowu i zawieraj wszystkie znaki do nastpnego znaku
              cudzyslowu.  Wszystkie znaki, wlcznie ze  znakami  nowej  linii,
              traktowane  s  doslownie.   Po  wydrukowaniu  lacucha  nie  jest
              drukowany znak nowej linii.

       print lista
              Instrukcja print (rozszerzenie) umoliwia  uycie  innego  sposobu
              wydruku wynikow. "Lista" jest list lacuchow i wyrae oddzielonych
              przecinkami.   Kady  lacuch  czy  wyraenie  drukowany   jest   w
              kolejnoci  wystpowania  na licie. Nie jest drukowany koczcy znak
              nowej linii (przejcie  do  nastpnego  wiersza).  Wyliczana  jest
              warto  wyrae;  jest  ona drukowana i przypisywana zmiennej last.
              Lacuchy uyte w instrukcji print s  drukowane  na  wyjciu  i  mog
              zawiera  znaki specjalne. Znaki specjalne rozpoczynaj si znakiem
              odwrotnego ukonika (\). bc rozpoznaje nastpujce znaki specjalne:
              "a"  (dzwonek,  bell),  "b" (backspace), "f" (wysuw strony, form
              feed), "n" (nowa linia, newline), "r" (powrot karetki,  carriage
              return),  "q"  (cudzyslow,  double  quote), "t" (tabulacja, tab)
              oraz "\" (odwrotny ukonik, backslash).  Inne znaki wystpujce  po
              odwrotnym ukoniku bd ignorowane.

       { lista_instrukcji }
              Jest  to  instrukcja  grupowania.  Pozwala  na  grupowanie wielu
              instrukcji do wykonania.

       if ( wyraenie ) instrukcja1 [else instrukcja2]
              Instrukcja  if  oblicza  wyraenie  i  wykonuje   instrukcj1   bd
              instrukcj2  w  zalenoci od wartoci wyraenia. Jeeli wyraenie jest
              niezerowe,   wykonywana   jest   instrukcja1.   Jeli    wystpuje
              instrukcja2  a  wartoci  wyraenia  jest  0,  to  wykonywana jest
              instrukcja2. (Klauzula else instrukcji if jest rozszerzeniem).

       while ( wyraenie ) instrukcja
              Instrukcja while  powtarza  wykonywanie  danej  instrukcji  poki
              wyraenie  jest niezerowe. Oblicza ona warto wyraenia przed kadym
              wykonaniem instrukcji.  Przerwanie ptli  powodowane  jest  zerow
              wartoci wyraenia lub wykonaniem instrukcji break (przerwania).

       for ( [wyr1] ; [wyr2] ; [wyr3] ) instrukcja
              Instrukcja for kontroluje powtarzane wykonanie danej instrukcji.
              Przed ptl obliczane jest  wyraenie1.  Wyraenie2  jest  obliczane
              przed  kadym  wykonaniem  instrukcji.  Jeli  jest  niezerowe, to
              wykonywana jest instrukcja.  Jeli ma ono  warto  zero,  to  ptla
              jest  przerywana.  Po kadym wykonaniu danej instrukcji wyliczana
              jest warto wyraenia3 przed ponownym wyliczeniem wyraenia2. Jeeli
              pominito  wyraenie1  lub  wyraenie3, to nic nie jest obliczane w
              chwili, gdy  powinna  by  okrelana  ich  warto.  Jeeli  pominito
              wyraenie2,   to   jest   ono  zastpowane  wartoci  1.  (Wyraenie
              opcjonalne stanowi rozszerzenie. bc w POSIXie wymaga  wszystkich
              trzech wyrae.)  Poniszy kod jest rownowany instrukcji for:
              wyraenie1;
              while (wyraenie2) {
                 instrukcja;
                 wyraenie3;
              }

       break  Instrukcja ta powoduje wymuszone zakoczenie ostatniej obejmujcej
              j instrukcji while lub for.

       continue
              Instrukcja continue (rozszerzenie) powoduje rozpoczcie  kolejnej
              iteracji przez ostatni obejmujc j instukcj for.

       halt   Instrukcja   halt   (rozszerzenie)   jest   instrukcj   nakazujc
              preprocesorowi  bc  zakoczenie  pracy  (ale  tylko   wtedy   gdy
              instrukcja ta jest wykonywana).  Na przyklad, "if (0 == 1) halt"
              nie spowoduje przerwania pracy bc, gdy instrukcja halt nie bdzie
              wykonana.

       return Zwraca  warto  zero  jako  wynik funkcji. (Patrz sekcja dotyczca
              funkcji).

       return ( wyraenie )
              Zwraca warto wyraenia jako wynik funkcji. (Patrz sekcja dotyczca
              funkcji).  Nawiasy nie s wymagane, co jest rozszerzeniem GNU bc.

   PSEUDO-INSTRUKCJE
       Te instrukcje nie s instrukcjami w tradycyjnym sensie tego terminu. Nie
       s one instrukcjami wykonywanymi. Ich funkcja  jest  wykonywana  podczas
       "kompilacji".

       limits Wypisuje  lokalne ograniczenia narzucone przez lokalna wersj bc.
              Jest to rozszerzenie.

       quit   Po odczycie instrukcji quit procesor bc koczy  prac,  niezalenie
              od tego, gdzie wystpila ta instrukcja. Na przyklad, "if (0 == 1)
              quit" spowoduje zakoczenie pracy bc.

       warranty
              Wypisuje dlusz notk na temat gwarancji. Jest to rozszerzenie.

   FUNKCJE
       Funkcje dostarczaj sposobu definiowania oblicze, ktore mog by  wykonane
       poniej.  Funkcje  w  bc  zawsze  obliczaj  warto i zwracaj j do miejsca
       wywolania. Definicje funkcji s "dynamiczne" w  tym  sensie,  e  funkcja
       pozostaje  niezdefiniowana  dopoki na wejciu nie zostanie odczytana jej
       definicja. Definicja  ta  jest  nastpnie  uywana  dopoki  nie  zostanie
       napotkana  inna  definicja  funkcji  o  tej  samej nazwie. Wowczas nowa
       definicja zastpuje starsz. Funkcja definiowana jest nastpujco:
              define nazwa ( parametry ) { nowa_linia
                  lista_auto   lista_instrukcji }
       Wywolanie funkcji jest po prostu wyraeniem postaci "nazwa(parametry)".

       Parametry s liczbami lub tablicami (rozszerzenie). W definicji  funkcji
       definiuje  si  rownoczenie  jest  zero  lub  wicej jej parametrow przez
       podanie  ich  nazw  rozdzielonych  przecinkami.   Liczby   s   jedynymi
       parametrami  wywolywanymi  przez  warto.  Tylko  tablice s wolane przez
       wskazanie zmiennej.  Tablice podawane s  w  definicji  parametrow  przy
       pomocy  notacji  "nazwa[ ]".  W wywolaniu funkcji parametry rzeczywiste
       dla parametrow numerycznych  s  pelnymi  wyraeniami.  Do  przekazywania
       tablic  uywana  jest  ta  sama notacja, co przy definiowaniu parametrow
       typu tablicowego. Dana tablica przesylana jest do  funkcji  przez  nazw
       (wskazanie).   Poniewa   definicje  funkcji  s  dynamiczne,  w  trakcie
       wywolywania funkcji sprawdzana  jest  liczba  i  typy  jej  parametrow.
       Niezgodnoc  liczby parametrow lub ich typow powoduje bld wykonania. Bld
       wykonania  pojawi  si  take  przy  probie  wywolania   niezdefiniowanej
       funkcji.

       lista_auto  jest opcjonaln list zmiennych, do uytku "lokalnego".  A oto
       skladnia tej listy (jeli wystpuje): "auto nazwa, ... ;".   rednik  jest
       opcjonalny. Kada z nazw jest nazw auto-zmiennej.  Tablice mog by podane
       przy uyciu takiej samej skladni jak w parametrach.  Na pocztku  funkcji
       wartoci  tych  zmiennych  odkladane  s  na  stosie.  Nastpnie zmienne s
       inicjowane  zerami  i  uywane  w  czasie  wykonywania   funkcji.   Przy
       zakoczeniu  funkcji  zmienne  s  zdejmowane ze stosu, tak e przywracana
       jest ich pierwotna warto (z momentu wywolania funkcji). Parametry te  s
       faktycznie  zmiennymi  auto  inicjowanymi  wartociami  dostarczonymi  w
       wywolaniu funkcji. Zmienne typu auto roni si od tradycyjnych  zmiennych
       lokalnych,  gdy  jeli  funkcja  A  wola funkcj B, to B moe poslugiwa si
       zmiennymi auto funkcji A po prostu uywajc tych  samych  nazw,  chyba  e
       funkcja  B  traktuje  je  jako  zmienne  auto.  Poniewa  zmienne auto i
       parametry skladowane s na stosie, to bc obsluguje funkcje rekurencyjne.

       Cialo funkcji jest list instrukcji bc. I znow, jak w czci  zasadniczej,
       instrukcje  oddzielane  s rednikami lub znakami nowej linii. Instrukcje
       return (powrot) powoduj zakoczenie funkcji i zwrocenie wartoci. Istniej
       dwa  warianty instrukcji return. Pierwsza posta, "return", zwraca warto
       0 do wywolujcego wyraenia. Druga posta, "return ( wyraenie )",  oblicza
       warto  wyraenia i zwraca j do wyraenia wolajcego. Kada funkcja domylnie
       koczy si niejawn instrukcj "return  (0)".  Pozwala  to  na  funkcji  na
       zakoczenie dzialania i zwrocenie zera bez jawnej instrukcji powrotu.

       Funkcje  inaczej  korzystaj ze zmiennej ibase. Wszystkie stale w obrbie
       ciala  funkcji  bd  konwertowane  przy  zastosowaniu  wartoci  ibase  w
       momencie wywolania funkcji. Zmiany ibase w czasie wykonywania funkcji s
       ignorowane, z wyjtkiem  funkcji  standardowej  read,  ktora  zawsze  do
       konwersji liczb wykorzystuje biec warto ibase.

       Rozszerzeniem  GNU  bc  jest  nieco  luniejszy  format  dla  definicji.
       Standard wymaga, by nawias otwierajcy znajdowal si w tym samym  wierszu
       co  slowo  kluczowe  define,  a  wszystkie  pozostale  czci w kolejnych
       wierszach. Opisywana tu wersja bc zezwala na dowoln  ilo  znakow  nowej
       linii  przed i po nawiasie otwierajcym funkcji.  Na przyklad, dozwolone
       s ponisze definicje.
              define d (n) { return (2*n); }
              define d (n)
                { return (2*n); }

   BIBLIOTEKA MATEMATYCZNA
       Jeeli bc  wywolywane  jest  z  opcj  -l,  to  wstpnie  wczytywana  jest
       biblioteka   matematyczna   (math   library),  a  domylna  liczba  cyfr
       dziesitnych (scale) ustawiana jest na 20. Funkcje matematyczne obliczaj
       swe  wyniki z dokladnoci okrelon w momencie ich wywolania.  Bibilioteka
       matematyczna definiuje nastpujce funkcje:

       s(x)   Sinus x, x podawany jest w radianach.

       c(x)   Cosinus x, x w radianach.

       a(x)   Arcus tangens x; arcus tangens zwraca radiany.

       l(x)   Logarytm naturalny z x.

       e(x)   Funkcja wykladnicza - e do potgi x.

       j(n,x) Funkcja Bessela rzdu n (calkowitego) z argumentem x.

   PRZYK/LADY
       W powloce /bin/sh,  ponisze  polecenie  przypisuje  warto  liczby  "Pi"
       zmiennej rodowiska pi.
               pi=$(echo "scale=10; 4*a(1)" | bc -l)

       Poniej  podano  definicj  funkcji  wykladniczej  uywanej  w  bibliotece
       matematycznej. Funkcja ta napisana jest w bc standardu POSIX.
              scale = 20

              /* wykorzystuje fakt, e e^x = (e^(x/2))^2
                 Gdy  x jest dostatecznie male, uywamy szeregu:
                   e^x = 1 + x + x^2/2! + x^3/3! + ...
              */

              define e(x) {
                auto  a, d, e, f, i, m, v, z

                /* sprawdzenie znaku x */
                if (x<0) {
                  m = 1
                  x = -x
                }

                /* przewidywane x */
                z = scale;
                scale = 4 + z + .44*x;
                while (x > 1) {
                  f += 1;
                  x /= 2;
                }

                /* inicjowanie zmiennych */
                v = 1+x
                a = x
                d = 1

                for (i=2; 1; i++) {
                  e = (a *= x) / (d *= i)
                  if (e == 0) {
                    if (f>0) while (f--)  v = v*v;
                    scale = z
                    if (m) return (1/v);
                    return (v/1);
                  }
                  v += e
                }
              }

       Poniszy kod posluguje si rozszerzonymi cechami bc do uzyskania prostego
       programu  liczcego salda ksieczki czekowej. Najlepiej byloby zachowa go
       w  pliku,  tak  by  mogl  by  wykorzystany  wielokrotnie  bez  potrzeby
       kadorazowego przepisywania.
              scale=2
              print "\nProgram ksieczki czekowej!\n"
              print "  Pamitaj, wplaty s transakcjami ujemnymi.\n"
              print "  Koniec - transakcja zerowa.\n\n"

              print "Saldo pocztkowe? "; bal = read()
              bal /= 1
              print "\n"
              while (1) {
                "biece saldo = "; bal
                "transakcja? "; trans = read()
                if (trans == 0) break;
                bal -= trans
                bal /= 1
              }
              quit

       Poniej zamieszczono definicj rekurencyjnej funkcji silni.
              define f (x) {
                if (x <= 1) return (1);
                return (f(x-1) * x);
              }

   OPCJE READLINE I LIBEDIT
       GNU  bc  moe  zosta  skompilowany  (poprzez  opcj konfiguracji) tak, by
       poslugiwal si bibliotek GNU edytora wejcia o  nazwie  readline  lub  te
       bibliotek  BSD  libedit.   Umoliwia to uytkownikowi edycj wierszy przed
       wyslaniem ich do bc. Pozwala te na  wykorzystanie  historii  poprzednio
       wprowadzonych  wierszy.  Przy  wybraniu  tej  opcji bc posiada dodatkow
       zmienn specjaln.  Ta  specjalna  zmienna,  history,  przechowuje  liczb
       zachowywanych  wierszy  historii.   Dla  readline,  warto -1 oznacza, e
       przechowywana jest nieograniczona liczba wierszy historii.   Ustawienie
       wartoci  history  na  liczb  dodatni  ogranicza  liczb  przechowywanych
       wierszy historii do podanej liczby. Warto zero wylcza  funkcj  historii
       wprowadzonych  wierszy. Wartoci domyln jest 100.  Wicej informacji mona
       znale w podrcznikach uytkownika dla bibliotek GNU  readline  i  history
       oraz  BSD  libedit.   Nie mona rownoczenie wlczy zarowno readline jak i
       libedit.

   R'ONICE
       Niniejsza wersja  bc  zostala  zbudowana  w  oparciu  o  projekt  POSIX
       P1003.2/D11  i  zawiera  kilka  ronic  i  rozszerze  w stosunku do tego
       dokumentu i tradycyjnych realizacji.  Nie jest  wykonana  w  tradycyjny
       sposob,  wykorzystujcy  polecenie  dc(1).   Wersja  ta jest pojedynczym
       procesem, analizujcym i uruchamiajcym  kod  binarny  bdcy  tlumaczeniem
       programu.  Istnieje "nieudokumentowana" opcja (-c) powodujca, e program
       wywietla kod binarny na standardowym  wyjciu  zamiast  wykonywania  go.
       Uywana  byla  ona  glownie  do  debuggowania analizatora skladni i przy
       przygotowaniu biblioteki matematycznej.

       Glownym rodlem ronic s  rozszerzenia,  w  ktorych  jaka  cecha,  moliwo
       programu  jest rozbudowana w celu dodania funkcjonalnoci, oraz dodatki,
       gdzie dodano nowe moliwoci.  Poniej podano list ronic i rozszerze.

       Zmienna rodowiska LANG
              Niniejsza  wersja  nie  spelnia  standardu  POSIX  przetwarzania
              zmiennej   rodowiska   LANG  i  wszystkich  zmiennych  rodowiska
              rozpoczynajcych si na LC_.

       nazwy  Tradycyjny i POSIXowy bc posiadaj jednoliterowe  nazwy  funkcji,
              zmiennych   i   tablic.   Zostaly   one   rozszerzone   do  nazw
              wieloznakowych,  rozpoczynajcych  si  liter  i  mogcych  zawiera
              litery, cyfry i znaki podkrelenia.

       lacuchy
              Lacuchy nie mog zawiera znakow NUL. POSIX stwierdza, e wszystkie
              znaki musz by zawarte w lacuchach.

       last   POSIX bc nie posiada zmiennej last.  Niektore  implementacje  bc
              uywaj kropki (.) w podobny sposob.

       porownania
              POSIX  bc dopuszcza porownania wylcznie w instrukcjach if, while
              oraz w drugim wyraeniu instrukcji for. Dodatkowo, w kadej z tych
              instrukcji  dopuszczalna  jest  tylko  jedna operacja porownania
              (relacji).

       instrukcja if, klauzula else
              POSIX bc nie posiada klauzuli else.

       instrukcja for
              POSIX  bc  wymaga  by  w  instrukcji  for  wystpowaly  wszystkie
              wyraenia.

       &&, ||, !
              POSIX bc nie posiada operatorow logicznych.

       funkcja read
              POSIX bc nie posiada funkcji read.

       instrukcja print
              POSIX bc nie posiada instrukcji print.

       instrukcja continue
              POSIX bc nie posiada instrukcji continue.

       instrukcja return
              POSIX bc wymaga nawiasow wokol zwracanego wyraenia.

       parametry tablicowe
              POSIX bc nie obsluguje (obecnie) w pelni parametrow tablicowych.
              Gramatyka POSIX zezwala na uycie tablic w  definicjach  funkcji,
              ale   nie  zapewnia  metody  przekazania  tablicy  jako  biecego
              parametru.   (Jest   to   najprawdopodobniej    przeoczenie    w
              zdefiniowanej  gramatyce.)  Tradycyjne implementacje bc posiadaj
              jedynie wywolanie parametrow tablicowych przez warto.

       format funkcji
              POSIX bc wymaga, by nawias otwierajcy byl w tym  samym  wierszu,
              co slowo kluczowe define, za instrukcja auto w nastpnym wierszu.

       =+, =-, =*, =/, =%, =^
              POSIX  bc  nie  wymaga,  by  byly zdefiniowane powysze operatory
              przypisania "starego typu". Niniejsza wersja  zezwala  na  takie
              przypisania  w  "starym  stylu".  Naley  skorzysta  z instrukcji
              limits, by stwierdzi, czy zainstalowana  wersja  je  rozpoznaje.
              Jeeli  obsluguje ona przypisania w "starym stylu", to instrukcja
              "a =- 1" pomniejszy a o jeden zamiast przypisa a warto -1.

       spacje w liczbach
              Inne implementacje bc dopuszczaj wystpowanie spacji w  liczbach.
              Na  przyklad,  "x=1  3"  przypisze  warto 13 zmiennej x. Ta sama
              instrukcja spowoduje bld skladni w opisywanej tu wersji bc.

       bldy i wykonanie
              Opisywana implementacja roni  si  od  innych  sposobem,  w  jaki
              wykonywany  jest  kod  w przypadku znalezienia w programie bldow
              skladniowych i innych.  W przypadku napotkania bldu w  definicji
              funkcji,  obsluga  bldow  probuje  odnale  pocztek  instrukcji i
              kontynuowa analiz skladniow  funkcji.   Po  znalezieniu  bldu  w
              funkcji,   nie   jest   ona  moliwa  do  wywolania  i  staje  si
              niezdefiniowana. Bldy  skladniowe  w  interaktywnym  wykonywaniu
              kodu  uniewaniaj  biecy  blok  wykonania.  Blok  wykonania  jest
              zakoczony  kocem  linii  pojawiajcym  si  po  pelnej   sekwencji
              instrukcji.  Na przyklad,
                     a = 1
                     b = 2
              posiada dwa bloki wykonania a
                     { a = 1
                       b = 2 }
              ma  jeden  blok  wykonania.   Kady  z  bldow  wykonania przerywa
              wykonywanie  biecego  bloku  wykonania.   Ostrzeenie  w  trakcie
              wykonywania nie przerywa biecego bloku.

       Przerwania
              Podczas  sesji  interaktywnej  sygnal  SIGINT (zwykle generowany
              przez znak control-C z terminala) spowoduje  przerwanie  biecego
              bloku  wykonywania.   Wywietli  on  bld  wykonania  ("runtime"),
              wskazujcy ktora  funkcja  zostala  przerwana.  Po  wyczyszczeniu
              wszystkich  struktur  (runtime  structures)  wykonania, zostanie
              wywietlony komunikat informujcy uytkownika, e bc jest  gotow  do
              przyjmowania  kolejnych danych. Wszystkie uprzednio zdefiniowane
              funkcje pozostaj zdefiniowane, za wartoci  wszystkich  zmiennych
              innych  ni  zmienne  typu  auto  s wartociami sprzed przerwania.
              Podczas procesu oczyszczania struktur danych usuwane s wszystkie
              zmienne  typu  auto  oraz  parametry  funkcji.   W  czasie sesji
              nieinteraktywnej sygnal SIGINT przerywa wykonanie calego bc.

   OGRANICZENIA
       Poniej podano obecne ograniczenia opisywanego procesora bc.  Niektore z
       nich  mog by zmienione podczas instalacji.  Faktyczne ograniczenia mona
       sprawdzi za pomoc instrukcji limits (ograniczenia).

       BC_BASE_MAX
              Maksymalna podstawa pozycyjnego ukladu, w ktorym wyprowadzane  s
              wyniki  obecnie  ustawiona jest na 999. Maksymaln podstaw ukladu
              wejciowego jest 16.

       BC_DIM_MAX
              Obecnie ustawione  jest  arbitralne  ograniczenie  do  65535  (w
              wersji rozpowszechnianej). Twoja instalacja moe by inna.

       BC_SCALE_MAX
              Liczba  cyfr  po  kropce  dziesitnej ograniczona jest do INT_MAX
              cyfr. Take liczba cyfr przed kropk dziesitn ograniczona jest  do
              INT_MAX cyfr.

       BC_STRING_MAX
              Maksymalnie w lacuchu moe wystpi INT_MAX znakow.

       wykladnik
              Warto  wykladnika  w operacji potgowania (^) ograniczona jest do
              LONG_MAX.

       nazwy zmiennych
              Obecnie nie moe by wicej ni 32767  unikalnych  nazw  w  kadym  z
              rodzajow: zmiennych prostych, tablic i funkcji.

ZMIENNE RODOWISKA

       bc przetwarza nastpujce zmienne rodowiska:

       POSIXLY_CORRECT
              To samo, co opcja -s. Tryb zgodnoci z POSIX.

       BC_ENV_ARGS
              Inny  sposob  przekazywania  argumentow  do bc. Format jest taki
              sam, jak argumentow wiersza polece. Argumenty te przetwarzane  s
              na   pocztku,   wic   pliki   podane   w  argumentach  rodowiska
              przetwarzane s przed plikami  podanymi  jako  argumenty  wiersza
              polece.  Umoliwia  to  uytkownikowi  ustawienie  "standardowych"
              opcji i plikow, jakie bd przetwarzane przy kadym  wywolaniu  bc.
              Pliki  podane  w  zmiennych  rodowiska zawieraj zwykle definicje
              funkcji,  ktore  uytkownik  chce  mie  zdefiniowane  przy  kadym
              uruchomieniu bc.

       BC_LINE_LENGTH
              Powinna  to  by  liczba calkowita (integer) podajca ilo znakow w
              wierszu wynikowym. Obejmuje ona znaki odwrotnego ukonika i nowej
              linii dla dlugich liczb.

DIAGNOSTYKA

       Jeeli ktory z plikow podanych w wierszu polece nie moe zosta otwarty bc
       zglosi, e  plik  ten  jest  niedostpny  i  przerwie  prac.  Istniej  te
       komunikaty  diagnostyczne  kompilacji  i  wykonania,  ktore  powinny by
       zrozumiale.

B/LDY

       Obsluga bldow (error recovery) nie jest jeszcze bardzo dobra.

       Bldy prosz zglasza (w jz.angielskim) na adres bug-bc@gnu.org.   Upewnij
       si, e pole tematu wiadomoci zawiera gdzie slowo ``bc''.

AUTOR

       Philip A. Nelson
       phil@cs.wwu.edu

PODZIKOWANIA

       Autor  chcialby  podzikowa Steve'owi Sommars (Steve.Sommars@att.com) za
       jego szerok pomoc w testowaniu  tej  implementacji.  Podsunl  on  wiele
       cennych  sugestii.  Dziki  jego  zaangaowaniu  jest  to  o wiele lepszy
       produkt.

ZOBACZ TAKE

       dc(1), expr(1), awk(1)

INFORMACJE O T/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju  Projektu  Tlumaczenia
       Manuali  i  moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem  opisywanego  programu  lub  funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.