Programowanie w systemie UNIX/bc: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Programowanie_w_systemie_UNIX/dc
linki, interpunkcja, formatowanie
Linia 1:
'''bc''' ( od ang. ''basic calculator '') jest to język programowania umożliwiający :
* operowanie liczbami w dowolnych systemach liczbowych (wejście możliwe w systemie maksymalnie szesnastkowym, wyjście w dowolnie dużym), , ale nie w formacie naukowym<ref>[http://stackoverflow.com/questions/12882611/how-to-get-bc-to-handle-numbers-in-scientific-aka-exponential-notation| STackoverflow Stackoverflow: How to get bc to handle numbers in scientific (aka exponential) notation?]</ref>
* operowanie liczbami dowolnej precyzji (zarówno przed, jak i po przecinku)
* wykonywanie skryptów
* wczytywanie danych z pliku lub standardowego wejścia. Pozwala to na użycie [[Programowanie_w_systemie_UNIX/Potok_(Unix)|potoku ( ang. pipe)]]
 
bc jest preprocesorem dla [[Programowanie_w_systemie_UNIX/dc|dc]]<ref>[http://www.basicallytech.com/blog/?/archives/23-command-line-calculations-using-bc.html command-line calculations using bc by Rob Newcater]</ref>
 
 
bc jest preprocesorem dla [[Programowanie_w_systemie_UNIX/dc|dc]]<ref>[http://www.basicallytech.com/blog/?archive/archives23/23-command-line-calculations-using-bc.html/ command-line calculations using bc, by Rob Newcater]</ref>
=Podstawowe operacje=
==Uruchomianie==
Linia 14 ⟶ 12:
bc
 
Jest to podstawowy sposób uruchomienia. Standardowo liczba miejsc po przecinku ( ang. scale ) jest ustawiona na 0. Nie ładuje biblioteki standardowej.
 
 
 
Uruchomienie z opcją l powoduje :
* załadowanie przy uruchomieniu biblioteki standardowej, zawierającą np. funkcje trygonometryczne
* ustawia liczbę miejsc po przecinku dla dzielenia ( ang. scale ) na 20 zamiast domyślnego 0
 
bc -l
 
Pełna składnia :
 
bc [-hlwsqv] [długie_opcje] [plik...]
Linia 33 ⟶ 29:
==Kończenie pracy ==
 
W celu zakończenia pracy wpisujemy w bc :
 
quit
 
albo sekwencje klawiszy :
 
control-D
Linia 45 ⟶ 41:
===limits===
 
Za pomocą komendy :<ref>[https://www.gnu.org/software/bc/manual/html_mono/bc.html#SEC22| bc - limits]</ref>
 
 
limits
 
sprawdzamy aktualne ustawienia :
 
BC_BASE_MAX = 2147483647
Linia 58 ⟶ 52:
MAX Exponent = 9223372036854775807
Number of vars = 32767
 
 
===ibase i obase===
 
Są to 2 specjalne zmienne ( ang. special variables ) określające podstawę ( ang. base) liczb dla wejścia ( ibase ) i wyjścia ( obase).
 
Najpierw sprawdźmy domyślne ustawienie :
 
ibase
Linia 77 ⟶ 69:
===scale===
 
Możemy zmienić poprzez :
* [[Programowanie w systemie UNIX/bc#Uruchomianie|uruchomienie]] ( <code>bc</code> lub <code>bc -l</code>)
* ręczne ustawienie : <code>scale= 20</code>
* ustawienie w pliku <code>.bashrc</code>
** w pliku .bashrc w katalogu domowym dodać <code>BC_ENV_ARGS=~/.bc</code>
** potem <code>export BC_ENV_ARGS</code>
** utworzyć plik <code>.bc</code> w katalogu domowym z jedną linią <code>scale=2 </code><ref>[http name="://linux.byexamples.com/archives/42/command-line-calculator-bc/0" tip by Mike Williams]</ref>
 
=== BC_LINE_LENGTH===
 
Długość linii wydruku jest określona przez zmienną BC_LINE_LENGTH. Standardowo zmienna nie jest określona.
 
Przykład :
 
echo "scale=100;last=10;8/(1+(1/3))" | bc
 
powoduje :
 
<pre>
Linia 100 ⟶ 92:
</pre>
 
W celu zmiany tego zachowania :
 
export BC_LINE_LENGTH=105
 
i ponownie
echo "scale=100;last=10;8/(1+(1/3))"|bc
 
otrzymujemy :
echo "scale=100;last=10;8/(1+(1/3))"|bc
 
otrzymujemy :
 
6.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
 
 
=== BC_ENV_ARGS===
 
Linia 118 ⟶ 106:
==Interaktywny==
===bc===
Uruchamiamy bc poprzez wpisanie w konsoli :
 
bc
 
otrzymujemy :
bc 1.06.95
Linia 129 ⟶ 117:
For details type `warranty'.
 
Przykładowe obliczenie :
 
2^5-1
 
i wynik :
 
31
Linia 148 ⟶ 136:
For details type `warranty'.
 
Sprawdzamy jakiajaka jest dokładność :
 
scale
 
wynik :
 
20
 
Wprowadzamy obliczenia :
<pre>
33877456965431938318210482471113262183356704085033125021829876006886584214655562
Linia 168 ⟶ 156:
.14285714285714285714
 
Zwiększamy dokładność :
 
scale=300
 
Ponownie obliczamy :
<pre>
33877456965431938318210482471113262183356704085033125021829876006886584214655562
Linia 179 ⟶ 167:
</pre>
 
Wynik :
<pre>
.1428571428571428571428571428571428571428571428571428571428571428571
Linia 190 ⟶ 178:
===z poziomu bash'a===
 
Z poziomu bash'a przesyłamy dane do bc korzystąckorzystając z potoku :
 
echo '57+43' | bc
 
otrzymujemy wynik :
 
 
100
 
lub inny sposób : <ref name=":0">[http://linux.byexamples.com/archives/42/command-line-calculator-bc/ Command line calculator, bc. Tip by Mark B ]</ref>
 
bc <<< 56.8+77.7
 
otrzymujemy :
 
134.5
 
Inny przykład :
 
bc -l <<< '10.5 / 1'
Linia 213 ⟶ 199:
 
 
Inna metoda :
cru=$(echo $center_im+$r | bc -l)
 
Linia 219 ⟶ 205:
 
===Bash'a===
Skrypt Bash'a wysyła dane do bc. Odbiera wyniki i zapisuje je do zmiennych ( num i den). Wyniki obliczeń z wykorzystaniem tych zmiennych zapisuje do pliku tekstowego
<pre>
#!/bin/bash
Linia 240 ⟶ 226:
==Podstawowe działania==
===Kolejność wykonywania działań===
 
 
1/3*2
.66666666666666666666
Linia 247 ⟶ 231:
.16666666666666666666
 
Komentarz dzielenie i mnożenia mają ten sam poziom<ref>[http://www.gnu.org/software/bc/manual/html_node/bc_13.html bc manual : Precedence]</ref> <ref>[[wW:Kolejność_wykonywania_działańKolejność wykonywania działań|Kolejność wykonywania działań w wikipediiWikipedii]]</ref> więc wykonuje się je w kolejności od lewej do prawej
 
Może to powodować błąd w następującej sytuacji :
 
1/1*10^-6
Linia 260 ⟶ 244:
echo 'scale=25;57/43' | bc
 
wynik :
 
1.3255813953488372093023255
Linia 267 ⟶ 251:
 
====Zmiana e na 10====
Jak przekształcić <code>1.0e-2</code> na <code>1.0*10^-2 </code>?<ref>[http://stackoverflow.com/questions/12882611/how-to-get-bc-to-handle-numbers-in-scientific-aka-exponential-notation How to get bc to handle numbers in scientific (aka exponential) notation?]</ref>
radius="1.0e-2.0"
Linia 273 ⟶ 257:
echo $rim
 
wynik :
 
1.0*10^-2.0
 
====zmiana podstwypodstawy====
Przekształcamy dziesiętną liczbę 12 ( [[Programowanie_w_systemie_UNIX/bc#ibase_i_obase|ibase = 10 ]]) na liczbę binarną ([[Programowanie_w_systemie_UNIX/bc#ibase_i_obase|obase = 2 ]])
 
$ echo 'obase=2;12' | bc
 
otrzymujemy :
 
1100
 
 
====zmiana typu====
 
Zmiennoprzecinkowa do całkowitej ( obcinanie = trunc) :
 
echo '(4.2-1.3) / 1' | bc
 
wynik :
 
2
Linia 301 ⟶ 283:
=Pomoc=
 
<b>Podręcznik offline</b><ref>[[w:man (Unix)|man (Unix)]]</ref> w aktualnej wersji po polsku ( ang. manual) otwiera się po wpisaniu w konsoli polecenia :
 
man bc
 
lub :
 
info bc
 
Zamykamy podręcznik klawiszem <code>q</code>.
 
Pomoc online jest zwykle nieaktualna <ref>[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html bc doc at opengroup]</ref>
 
 
<b>Wersja </b>:
 
bc -v
 
otrzymujemy :
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
 
Podobna informacja jest na 1 stronie podręcznika :
 
WERSJA Niniejszy podręcznik opisuje GNU bc w wersji 1.06.
 
=Źródła=
=Żródła=
<references/>