Bc (Unix)

W dzisiejszym świecie Bc (Unix) jest nadal tematem interesującym wiele osób. Wraz z postępem technologii i globalizacją Bc (Unix) stał się istotnym tematem we współczesnym społeczeństwie. Niezależnie od tego, czy Bc (Unix) jest osobą, wydarzeniem historycznym czy aktualnym zjawiskiem, nie można niedoceniać jego wpływu na nasze życie. W tym artykule szczegółowo zbadamy różne aspekty Bc (Unix), analizując jego znaczenie, implikacje i wpływ w różnych obszarach. Od momentu powstania do obecnego stanu Bc (Unix) pozostawił niezatarty ślad w społeczeństwie i zrozumienie jego zasięgu jest niezbędne, aby lepiej zrozumieć otaczający nas świat.


bcuniksowy kalkulator dowolnej precyzji (zarówno przed, jak i po przecinku). Umożliwia operowanie liczbami w dowolnych systemach liczbowych (wejście możliwe w systemie maksymalnie szesnastkowym, wyjście w dowolnie dużym), wykonywanie skryptów itd.

Pierwotnie program opierał się na programie dc, tłumacząc zapis infiksowy na postfiksowy (odwrotna notacja polska), jednak obecnie wersja GNU jest autonomicznym programem.

bc posiada składnię podobną do języka C.

Odmiany

Oprócz prostych poleceń (np. 2*(3+4)^4) POSIX bc obsługuje:

  • if(warunek) – wyrażenia warunkowe
  • while(warunek) – pętle typu while
  • for(wartość początkowa; warunek; operacja zwiększenia) – pętle typu for
  • define – tworzenie funkcji
  • return – zwracanie wartości przez funkcję
  • operatory:
 +     -     *     /
 +=    -=    *=    /=
 ++    --    <     >
 ==    !=    <=    >=
 ( )      { }
 %     %=
 ^     ^=
  • sqrt - pierwiastek kwadratowy
  • zmienne

GNU bc

GNU bc oferuje te same polecenia co POSIX bc oraz:

  • read – zezwala na odczyt danych liczbowych z klawiatury
  • operatory logiczne:
 &&     ||      !
  • komentarze (wszystkie znaki w linii po # są ignorowane)

Przykłady użycia

  • Obliczanie liczby z dokładnością do 200 miejsc po przecinku.
   $ bc -l
   scale=200
   4*a(1)
  • Wypisanie tabliczki mnożenia o rozmiarach 10x10.
   for (i=1; i<=10; ++i){
      for (j=1; j<=10; ++j)
         print i*j, "\t"
      print "\n"
   }
  • Rekurencyjne zdefiniowanie funkcji silnia.
   define silnia(n){
      if (n <= 1) return 1;
      return n * silnia(n-1);
   }

Potęgowanie

  • Potęgowanie w POSIX bc
 /* Funkcja zwraca część całkowitą liczby */
 define i(x) {
   auto s
   s = scale
   scale = 0
    x /= 1   /* zaokrągla x z niedomiarem */
   scale = s
   return (x)
 }
 
 /* Funkcja wykorzysuje fakt, iż x^y == e^(y*log(x)) */
 define p(x,y) {
   if (y == i(y)) {
      return (x ^ y)
   }
   return ( e( y * l(x) ) )
 }
  • Potęgowanie w GNU bc
 # Funkcja zwraca część całkowitą liczby
 define int(number) {
   auto oldscale
   oldscale = scale
   scale = 0
   number /= 1 /* round number down */
   scale = oldscale
   return number
 }
 
 # Funkcja wykorzysuje fakt, iż x^y == e^(y*log(x))
 define power(number,exponent) {
   if (exponent == int(exponent)) {
      return number ^ exponent 
   } else {
      return e( exponent * l(number) )
   }
 }