bc – kalkulator dla konsolowców cz. I

BC to rozbudowany, uniksowy kalkulator dowolnej precyzji z lekko programistycznym podejściem do sprawy. Narzędzie to z pewnością przypadnie do gustu ludziom nie lubiącym “klikanych” kalkulatorów, a także miłośnikom pracy w konsoli czy programistą…

Początek pracy z kalkulatorem

(Kalkulator powinien być zainstalowany domyślnie w systemie, jeśli było by inaczej należy przeprowadzić standardową dla Twojej dystrybucji procedurę instalacji aplikacji…)

Praca w bc może odbywać się w 2 trybach:

  • interaktywnym – pozwalającym na wpisywanie na bieżąco wyrażeń kalkulatora
  • trybie przetwarzania zapisanego skryptu

Pracę w trybie interaktywnym rozpoczynamy wpisując w oknie terminala polecenie bc, w 2 z trybów podając po bc nazwę pliku/ów z skryptem/ami do wykonania. Chcąc uniknąć wypisywania powitania programu możemy dorzucić opcję -q. Innym niewątpliwie interesującym parametrem z którym można uruchomić program jest -l które definiuje parę funkcji matematycznych “na start”. Pracę z programem kończymy wpisują quit.

Wyrażenia

Wyrażenia podaje się w postaci znanej z lekcji matematyki, z uwagą że zamiast przecinka stosujemy kropkę przy podawaniu liczb niecałkowitych. Operatory których możemy używać w działaniach (wyrażeniach):

  • +, -, *, / – po kolei: dodawanie, odejmowanie, mnożenie, dzielenie – z tym ostatnim trzeba uważać gdyż domyślną precyzją po przecinku jest 0. Należy zmienić wartość zmiennej scale ew. uruchomić program z parametrem -l.
  • % – reszta z dzielenia dwóch wyrażeń np. 5 % 2 = 1, znów uwaga na scale
  • ^ – podnieś x do potęgi y

Działania reprezentowania przez operatory wykonywane są w naturalnej kolejności matematycznej. Do ich zmiany, również jak w matematyce, służą nawiasy okrągłe (zagnieżdżone w sobie dowolną liczbę razy). Kilka przykładowych wyrażeń:  2 + 2, 3^6, (2 * 3)^2 / 2. Wynik wyrażenia jest wypisywany w następnej linii, pod wyrażeniem.

Co do wspomnianej zmiennej scale to w tej części artykułu napisze jedynie że jest to coś (dla nie wtajemniczonych w programowanie), co jest odpowiedzialne za precyzję obliczeń po przecinku. Standardowo zmienna ustawiona jest na wartość 0 co powoduje że wartość wyrażeń jest obcinana do części całkowitej, zmienić możemy to przypisując jej inną wartość poprzez np. wyrażenie o postaci: scale = 2; ew uruchamiając z barametrem -l. (Wartość ustawiana jest na 20).

Istnieją również pewne “wyrażenia specjalne”, będące w rzeczywistości funkcjami  standardowymi. Używa się ich za pomocą schematu nazwa(argument). Argumentem jest różny w zależności funkcji. Oczywiście nic nie stoi na przeszkodzie aby funkcje te łączyć z operacjami wymienionymi wyżej. Poniżej kilka wybranych funkcji:

  • sqrt(wyrażenie) – funkcja zwraca wartość pierwistka z wyrażenia np. sqrt(16) (zwróci 4…)
  • scale(wyrażenie) - funkcja zwraca liczbę cyfr po przecinku wyrażenia podanego jako argument np. scale(0.02) wypisze 2

Poniższe funckje zdefiniowane są jedynie w przypadku uruchomienia programu z dodatkowym parametrem -l:

  • s(wyrażenie) – funkcja zwraca sinus z konta o mierze równej wartość wyrażenia, miara jest liczona w radianach. Analogicznie do niej działają funkcję c, i a, zwracające cosinus i arcus tangens (w radianach) z wyrażenia.
  • l(wyrażenie) logarytm naturalny z wyrażenia
  • e(wyrażenie) - liczba e do potęgi wyrażenie

Oczywiście to co tu pokazałem to tylko kropla możliwośći bc. Więcej, między innymi o używaniu i definiowaniu zmiennych oraz funkcji, w kolejnej części ;)

c.d.n…

2 Odpowiedzi do “bc – kalkulator dla konsolowców cz. I”


  1. 1 trtrtrtr styczeń 19, 2009 o 10:03 am

    Jak uzywać modulo?
    nie moge nigdzie znaleźć

    np. jak zaszyfrować liczbe używając RSA ;)

  2. 2 adawo styczeń 19, 2009 o 10:56 am

    Trzeba by było zaimplementować funkcję szyfrującą, co przyznam szczerze jest ciekawym wyzwaniem…

    Co do modulo: 173 linijka man bc:

    wyrażenie % wyrażenie

    Wynikiem tego wyrażenia jest “reszta” z dzielenia obliczana w następujący sposób. W celu obliczenia a%b, obliczane jest najpierw a/b z dokładnością do scale cyfr dziesiętnych. Wynik
    używany jest do obliczenia a-(a/b)*b z dokładnością określoną
    jako maksymalna z scale+scale(b) oraz scale(a). Jeżeli scale
    ustawiona jest na zero, zaś oba wyrażenia są całkowite to
    wyrażenie to jest funkcją reszty całkowitej.


Dodaj komentarz