|
|
bc: la calculadora en la consola
(28654 lectures)
Por Carles Pina i Estany
cpina
(http://pinux.info)
Creado el 08/06/2004 12:34 modificado el 08/06/2004 12:34
|
A veces hay conjuntos de herramientas que nos suenan y no las aprovechamos al máximo. Quizás una de esas sea "bc". La calculadora que podemos usar desde la consola, que aparte de sumar y restar puede realizar cálculos con una precisión de varios decimales, cambiar de base numérica o programarla, etc. veremos como... | Pagina1/1 |
Introducción
bc es el nombre mismo de un ejecutable, en Debian está en el paquete "bc". Siempre lo he visto instalado por defecto, así que seguramente ya lo tendremos.
Si ejecutamos bc veremos:
carles@pinux:~$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
Y aquí se queda esperando que trabajemos con él:
4+2
6
Sabe sumar (y restar, dividir, multiplicar; sin problemas)
Trabajar con variables
Si queremos que trabaje con cierto número de decimales, asignaremos un valor a la variable scale.
scale=3
2/3
.666
También podríamos haber hecho:
scale=9;2/3
.666666666
Al ser scale una variable más, podemos consultar su valor sencillamente escribiéndola:
scale
3
#o también usando print
print scale
3
Otro ejemplo de usos de variables podría ser:
scale=5
variable=3
100/variable
33.33333
Hay una variable especial llamada last, almacena el resultado de la última operación:
100/3
33.33333
last*2
66.66666
Cambios de base
Hay dos variables especiales que son ibase y obase que definen la base de entrada y de salida de los números, respectivamente.
Si queremos calcular el número 5 de base 10 (decimal) a base 2 (binario), haremos:
obase=2
5
101
Si queremos pasar de binario a hexadecimal:
obase=16
ibase=2
11111111
FF
Otras operaciones matemáticas
Podemos usar también sqrt, 2^3, etc.
Si queremos tener operaciones matemáticas más complejas tenemos que ejecutar el bc con la opción -l (bc -l) para cargar la librería matemática, y entonces tendremos:
s (x) Seno de x, en radianes
c (x) Coseno de x
a (x) Arcotangente de x
l (x) Logaritmo neperiano de x
e (x) Exponencial de x
j (n,x) Función de Bessel de un entero de orden n de x
Haciendo un pequeño programa
Si queremos pedir que el usuario teclee algo por teclado, la función es read. Por tanto.
variable=read()
esperará que tecleemos algo y lo pondrá en variable.
También podemos hacer un programa en un fichero y ejecutarlo. Por ejemplo, si hacemos un fichero que contenga eso:
print "Hola\n"
print "Escribe tu año de nacimiento\n"
nacimiento=read()
edad=2003-nacimiento
print edad
print " años\n"
halt
Y lo ejecutamos con bc -q fichero.bc (el -q es para que no muestre el Copyright) estaremos preguntando el año nacimiento y mostrando la edad.
Ahora un ejemplo definiendo una función, pasándole un parámetro y retornándolo. Veremos que es totalmente intuitivo:
define mayor_edad(edad) {
if (edad < 18)
return 0
if (edad >= 18)
return 1
}
print "Dí tus edad\n"
edad=read()
if (mayor_edad(edad))
print "Eres mayor de edad\n"
if (!mayor_edad(edad))
print "Eres menor de edad\n"
halt
Un último ejemplo, con un for:
for (i=0;i<10;i++) {
print i,"\n"
}
halt
Observemos en la , para separar la variable y la cadena en el print.
Para salir
halt
Más información
En man bc
También en el directorio /usr/share/doc/bc/examples (hay unos ejemplos que están bien para ver la sintaxis).
Recordar que se puede usar desde scripts de forma muy cómoda, por ejemplo:
resultado=$(echo "scale=3;2/3" | bc)
|
|
|
|
|
|
Comentarios Es posible que se hayan omitido algunos comentarios considerados poco constructivos
| 1. Re: bc: la calculadora en la consola (08/06/2004 13:08, #21794) Por: Anónimo |
Una cosa curiosa...
quit When the quit statement is read, the bc processor is terminated,
regardless of where the quit statement is found. For example,
"if (0 == 1) quit" will cause bc to terminate.
:D
(El efecto esperado se haría con "halt" en vez de "quit") |
|
2. Re: bc: la calculadora en la consola (08/06/2004 13:27, #21796) Por: cpina (http://pinux.info) |
| Ok, arreglado está.
Gracias! |
|
3. Re: bc: la calculadora en la consola (13/06/2004 17:13, #21885) Por: Anónimo |
que diferencia hay realmente en este caso entre "quit" y "halt"?
Si el resultado que se busca es salir de la aplicación ambos son igualmente válidos a mi entender....
Otra cosa, por lo que he podido extraer de las páginas man, es que esté en el código de un script ejecutable. Pero para uso convencional en shell yo los veo equivalentes, ambos. |
|
4. Re: bc: la calculadora en la consola (14/06/2004 23:40, #21900) Por: cpina (http://pinux.info) |
Si estás en "modo" interactivo es lo mismo (a no ser que uno sea root, haga halt pensando que está en bc pero está en la shell y apague la máquina!)
Si es en script, halt "no tiene" en cuenta el flujo de execución, cuando bc lo lee pues termina... |
|
|
|
|
5. Re: bc: la calculadora en la consola (08/06/2004 14:53, #21799) Por: Anónimo |
| Por cierto: ¿Qué pasaría si el usuario de tu programa de mayor de edad tiene 18 años? :P |
|
6. Re: bc: la calculadora en la consola (08/06/2004 15:02, #21800) Por: cpina (http://pinux.info) |
| Vaya dia que llevo XD
Ya está bien
Nota: antes ponía >=19 en lugar de >=18 |
|
7. Re: bc: la calculadora en la consola (08/06/2004 16:34, #21805) Por: Anónimo |
| y si tiene 17?... |
|
8. Re: bc: la calculadora en la consola (08/06/2004 16:47, #21806) Por: cpina (http://pinux.info) |
| Los examenes me estan afectando muuuuucho, peor que no dormir... |
|
|
|
|
9. Re: bc: la calculadora en la consola (08/06/2004 15:15, #21801) Por: Anónimo |
| Una cosilla mas, la variable last tiene un alias que es ".", no es tan intuitivo pero ahí está |
|
10. Re: bc: la calculadora en la consola (13/06/2004 17:40, #21886) Por: alex (http://adumont.hopto.org/~adumont/) |
Ese truco es bueno. No lo conocia.
Yo, al estar mas acostubrado a las calculadoras RPN (Reverse Polish notation), como la HP48SX, suelo usar dc(1), en vez de bc.
Resaltar que salvo en linux, creo que en los demas sistemas, bc(1) es solo un preprocesador para dc(1). |
|
|
11. Re: bc: la calculadora en la consola (08/06/2004 17:15, #21807) Por: Saiyine (http://clubdelphi.com/saiyine) |
Yo lo que hago es incluir estas lineas en mi .bashrc :
calcu() # Calculadora de linea de comandos
{
echo "$*" | bc -l
}
Asi dispongo de una calculadora comodisima en la linea de comandos:
[saiyine:~] calcu "(200*300+2)"
60002
[saiyine:~]
¡No olvideis las " si usais parentesis! |
|
12. Re: bc: la calculadora en la consola (08/06/2004 22:44, #21814) Por: Anónimo |
bash es sabio:
$ echo $((200*300+2))
60002
Aunque si quieres tratar con decimales fallará, bash sigue siendo amigo :) |
|
13. Re: bc: la calculadora en la consola (05/04/2006 18:38, #31812) Por: topi |
he vist les dues maneres...
i m'he preguntat, que tant ràpides seran comparativament?
$ time echo $(echo "200*300+2" | bc)
60002
real 0m0.008s
user 0m0.002s
sys 0m0.005s
$ time echo $((200*300+2))
60002
real 0m0.000s
user 0m0.000s
sys 0m0.000s
conclusió: mai no encarregues res a bc que pugues fer tu mateix (va dir bash) |
|
|
|
14. Re: bc: la calculadora en la consola (08/06/2004 23:15, #21817) Por: FrIkI (http://friki.org) |
| Una altra opció és usar l'interpret Python.
$ python
Jo és el que empr normalment. |
|
15. Python (09/06/2004 09:28, #21820) Por: Anónimo |
| para usar una calculadora mucho mas potente tenemos python. como ya han comentado. Te permite sumar restar, decimales, variables, funciones, clases, ... (de hecho es un lenguaje muy potente. Lo mejorcito que hay ahora para mi) |
|
16. Re: Python (11/06/2004 02:34, #21850) Por: Boooring |
| Esta tambien tiene decimales, de hecho me ha sorprendido por la cantidad que saca (es scale, como muestra el ejemplo) y también tiene funciones. Creo que es muy buena... como minimo cuple con creces su función.
Saludoss |
|
17. Re: Python (14/07/2004 23:51, #22375) Por: Anónimo |
| hola este articulo es interesante pero creo que los cibert nautas necesitan mas que eso y sugiero un avance nucho mayor |
|
18. Re: Python (13/10/2004 23:43, #23812) Por: OxygeN (http://www.cepiuos.net) |
si lo suguieres pues di cual no??
por cierto para casos rapidos siempre nos kedara google que tb sabe sumar restar ... |
|
19. Re: Python (05/10/2005 00:53, #28735) Por: Locomotoro |
| google no sólo sabe sumar y restar también conoce números como irracionales y complejos. probad la fórmula (e^(i * pi)) + 1, si os contesta que es cero es que conoce los números e, i y pi. |
|
|
|
|
20. Re: bc: la calculadora en la consola (15/01/2006 19:46, #30521) Por: Anónimo |
Me ha sorprendido mucho que bc sea tan poderoso.
Yo, hasta ahora, usaba el Orpie (tipo hp-48 y con muchas funciones) y el Maxima, que es un entorno realmente bestia estilo Maple.
De todos modos, en ordenadores de penúltima generación arrancan tan rápidos que no sé si pasarme a bc o seguir matando moscas con la bomba atómica.
Los lenguajes de programación (Python es un ejemplo, pero sirve cualquier lenguaje interpretado) también son una buena alternativa.
En cualquier caso, sigo echando de menos algo parecido a una calculadora de bolsillo convencional, porque lo que busco es un programa que me permita hacer un cálculo sencillo y puntual sin tener que ir a buscar el cajón donde guardo la calculadora, y sin tener que esperar un rato a que me arranque el Openoffice o el Gnumeric.
¿Sabéis de alguno? |
|
21. Re: bc: la calculadora en la consola (24/04/2006 22:29, #32178) Por: Benjamin (http://www.fotolog.net/yoniconce) |
| oye una pregunta
como lo haces para poder elevar un numero, sacar el factorial de un numero y la raiz de un numero??
esas son cosas q tiene una calculadora y no se como acerlo
si lo sabes me podrias responder a yonipe@hotmail.com
o cualquiera q sepa
por favor
muchas gracias |
|
22. Re: bc: la calculadora en la consola (02/04/2007 16:21, #39437) Por: Anónimo |
pero alguno ha probado en serio éstos scripts?? en plan copiar y pegar?? ¿¿alguno ha visto el efecto de hacer
if (i |
|
|
|
|
|---|
|
|
|
|
Calificacion
    Vots: 42 |
Danos tu opinion:
|
|
|
|
|
|
|