====== Desktop Calculator ====== El comando **dc** ejecuta la "Calculadora de Escritorio" en la [[terminal de computadora|terminal]]. Esta emplea una notación //sufija// conocida como //notación polaca inversa//. dc te permitirá realizar gran cantidad de [[tutorial de cálculo numérico|operaciones matemáticas y algebraicas]]. =====Tutorial de dc===== ====Uso de dc ==== Ejecuta dc en la terminal ingresando el comando: dc También se puede especificar un nombre de archivo en la línea de comandos, que dc lee en su totalidad antes de leer cualquier comando contenido en la entrada estándar. dc fichero_con_instrucciones Inicialmente, dc será parco y no mostrará nada en la terminal, pero estará a la espera de tus instrucciones. Para salir de dc, puedes ingresar el comando ''q'' (//salir//). ===Entrada de datos en dc=== Durante su ejecución, //dc// interpreta las instrucciones en su lenguaje interno recibidos de la entrada estándar de terminal o el fichero con instrucciones suministrado. Para la interpretación de dc, es indistinto si las operaciones se encuentran en un archivo o en la entrada estándar, pero podrás detener la ejecución de cálculos mediante **Ctrl+D**. En dc las instrucciones puede ser una //cifra//, que se coloca en la //pila de cálculo// de dc, o un //comando de dc//. ===Cifras=== Las cifras pueden ser números expresados en notación decimal; __los números negativos no se preceden del signo menos ''-'', sino que en dc se usa el guión bajo ''_''__. Por ejemplo, las siguientes cifras son cálidas en dc: 123 123.5 123.45678901234455 _23.4 ==Operadores aritméticos de //dc//: == ^Operador^Operación^ | ''+'' |Suma | | ''-'' |Resta | | ''/'' |División | | ''*'' |Multiplicación | | ''%'' |Porcentaje | | ''^'' |Potenciación o exponente | Estos operadores aritméticos especifican la operación que se realizará con los dos operadores situados en la parte superior de la pila de cálculo; al despejar, el resultado de la operación se almacenará en las posiciones de la pila ocupada anteriormente por los dos operandos. ==Comandos de Control de Pila en dc: == Los comandos de control permiten realizar mas funciones con la calculadora. ^Comandos de Control^Resultado^ | ''p'' | **presentar** el valor en la parte superior de la pila, sin modificarlo. | |''c'' |**vaciar** todo el contenido de la pila de cálculos | |''d'' |**duplicar** el elemento superior de la pila | |''f'' |**presenta ordenados** todos los elementos de la pila. | |''k'' |Indica la cantidad de decimales para ''*'' y ''/'' | |''q'' |**Salir de dc** | ===Notación de dc=== En la notación polaca inversa empleada por dc, los operandos preceden al operador. Por ejemplo, planteemos la suma 2+5 a dc y despejemos: $ dc 2 3 + p 5 Para despejar el problema, introduce los números ''2'' y ''3'' desde el teclado (cada uno seguido de la **tecla Intro**, para asentar dichos operandos en respectivos escalones de la pila de cálculo), y luego introduce el operador aritmético ''+''. Finaliza con el comando ''p'' para presentar el resultado. //dc// calculará el valor del resultado (''5''). Sal de la calculadora ingresando **q**. Resolvamos ahora 3x4: $ dc 3 4 * p 12 q $ En estos ejemplos, cada comando ocupa una línea de entrada independiente, pero dc acepta líneas que contengan varios comandos. En tal formato, mientras que las cifras numéricas se separen con espacio en blanco, se permitirán otras combinaciones de comandos. Veamos una sintaxis alternativa //horizontalizada//, que obtiene los mismos resultados: $ dc 3 4*pq 12 $ //dc// puede además realizar múltiples operaciones secuencialmente (si la pila de cálculo contiene suficientes valores para ello). Puesto que cada operación almacena su resultado en las mismas posiciones de la pila que los números utilizados, la operación posterior utilizará dicho resultado y el número inferior de la pila. Por ejemplo: $ dc 3 4 7 +-p -8 El operador ''+'' ha sumado los dos números en la parte superior de la pila (el ''7'' y el ''4'' por caso) y almacena el resultado ("11") en la pila, mientras que el operador ''-'' resta ''11'' de ''3'' para obtener el resultado (''-8''). > //dc// emplea una precisión de cálculo (número de decimales) dependiente de las necesidades reales de uso. La página del manual especifica que todos los cálculos se efectúan con números enteros a menos que se utilice el comando ''k'' para cambiar el factor de escala, pero esta afirmación no es del todo correcta. Los operadores de suma y resta operan sobre todos los dígitos de los números de entrada, y solo los operadores de multiplicación y división devuelven un resultado dependiente del factor de escala. ===Variables en dc=== No existe ninguna operación que extraiga el elemento superior de la pila y lo descarte. Sin embargo, //dc// define variables de registro que pueden contener un valor, por lo que es posible extraer un elemento de la pila y almacenarlo en un //registro//; de igual forma, es posible insertar el contenido de las variables de registro en la pila. Los nombres de los registros se declaran usando __letras minúsculas__ (por lo que es posible definir hasta 26 variables de registro). | ''s'' | (//store//) toma el nombre de un registro como argumento y transfiere el contenido de la parte superior de la pila al registro especificado. | | ''l'' | (//load//) mueve el contenido del registro indicado a la parte superior de la pila | Por ejemplo: $dc 2.34 4.56 p 4.56 st p 2.34 lt p 4.56 Para eliminar un valor de la parte superior de la pila, utilice el comando ''s'', que lo mueve a un registro no utilizado. Este registro intermedio también permite invertir el orden de los elementos contenidos en la pila, si es necesario. Los comandos ''s'' y ''l'' también pueden operar con //pilas auxiliares//. Al usar __letras mayúsculas__ para nombrar un registro, éste se considerará una pila auxiliar, por lo que el comando ''s'' moverá entonces el valor contenido en la parte superior de la pila principal a la pila auxiliar (pudiendo haber hasta 26 de ellas). Por ejemplo: 2.34 sT p dc:pila vacía 5.44 sT p dc:pila vacía IT p 5.44 IT p 2.34 Si la pila de cálculo se encuentra vacía o no contiene suficientes elementos para completar una operación, aparecerá el mensaje ''pila vacía'' en la pantalla. Una secuencia de caracteres encorchetados por "[" y "]" se considera una //cadena ASCII//, y se inserta en la pila de cálculo: [Hola a todos] p Hola a todos Esta capacidad de almacenar cadenas ASCII resulta inusual en una calculadora. Estas cadenas no pueden usarse para operaciones numéricas, pero el comando ''x'' (//ejecutar//) extrae una cadena de la parte superior de la pila de cálculo y la ejecuta como un comando dc; tras dicha ejecución, debe eliminarse explícitamente la cadena de la pila de cálculo. El operador ''!'' invoca a la shell y permite a dc ejecutar el resto de la línea en un intérprete de comandos anidado; tras la ejecución, dc recupera el control. ===Comandos adicionales de dc === | ''v'' |realiza la operación de raíz cuadrada del elemento superior de la pila y almacena el resultado en su lugar | | ''i'' |(//entrada//) hace que dc emplee el valor en la parte superior de la pila como raíz para representar los números especificados en la entrada | | ''o'' | (//salida//) define el valor en la parte superior de la pila como la nueva raíz para representar los números de salida. | Estos comandos permiten realizar conversiones de base y cálculos numéricos con una base distinta a la base 10 predeterminada; por ejemplo: 2 i 1001 p 9 2 o p 1001 Dado que se altera la base de entrada, todas las entradas posteriores deben realizarse según la nueva base. Los usuarios experimentados de calculadoras de bolsillo Hewlett-Packard o de los lenguajes de programación FORTH o PostScript reconocerán que este conjunto relativamente limitado de comandos es más que suficiente para cálculos numéricos rutinarios, e incluso para soluciones iterativas de integrales y funciones trascendentales. Sin embargo, si no está familiarizado con la notación sufija, dc puede resultar confuso, mientras que el programa bc puede proporcionar un entorno más familiar. __Ver también:__ [[bc]] __Ver también__: [[tutorial de cálculo numérico|tutorial de calculo numerico en la terminal]]