Bc: calculadora CLI
Contingut
Introducció
- http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html
- http://www.gnu.org/software/bc/manual/html_mono/bc.html
$ echo "scale=3; 4*1.3^2*6^4" | bc 8760.96
Interessant l'ús de last:
1+1 >2 last+2 >4 last + 5 >9 last +8 >17 quit
logaritmes neperians:
$ echo "scale=6; l(2.719)" | bc -l 1.000264
Utilitzar bc amb fitxers:
exemple fahrenheit.txt
fahrenheit.txt:
scale=2 /* C-style comments are allowed, as are spaces */ print "\nConvert Fahrenheit to Celsius\n\n" print "Temperature in Fahrenheit: " ; fah = read() print "\n" print "Equivalent Temperature in Celsius is: " (fah - 32.0) * 5.0 / 9.0 quit
$ bc -q fahrenheit.txt Convert Fahrenheit to Celsius Temperature in Fahrenheit: 34 Equivalent Temperature in Celsius is: 1.11
treballar amb fitxers dóna peu a fer servir declaracions de variables, bucles,etc.
taula de multiplicar (bucles)
Taula de multimplicar del 8: (taula_multiplicar.txt)
scale=2 print "\nTaula de multiplicar del 8\n\n" for (i=1; i<=10; i++) { e = i*8 print e print "\n" } quit
$ bc -q taula_multiplicar.txt Taula de multiplicar del 8 8 16 24 32 40 48 56 64 72 80
Mètode numèric bàsic
Es tracta d'avariguar quan dues funcions intersecten. Auixò pot ser d'aplicació en el curs 6002x del MIT (Circuits and Electronics)
metode_numeric.txt
scale=2 print "\nMètode numèric bàsic per mirar quan intersecten dues funcions\n\n" /* s'ha de veure quan s'igualen les funcions 10-2*v = exp(0.5*v) */ for (v=0; v<=5; v=v+.2) { a = 10-2*v b = e(0.5*v) print v print "\t" print a print "\t" print b print "\n" } quit
S'ha d'invocar a bc amb l'opció -l per tal d'utilitzar la funció e() (Math Library Function).
$ bc -l -q metode_numeric.txt ... 2.6 4.8 3.66 2.8 4.4 4.05 3.0 4.0 4.48 3.2 3.6 4.95 ...
Aquest càlcul també es podria fer gràficament amb gnuplot. Es tractaria de dibuixar les dues funcions sobre la mateixa gràfica i mirar quan es creuen.
Cas pràctic: MITx 6.002x
Curs_MIT:_Circuits_and_Electronics_(6.002x)#S6_.28Circuits_with_Nonlinear_Elements.29
creat per Joan Quintana Compte, març 2012