(Lo voy a resubir al foro público cuando esté algo más "rellenito")
Problema de la Calculadora
AbstractEn este artículo resolveremos
el problema de la calculadora en cada uno de los lenguajes de programación más populares.
Es común que aparezca como ejercicio el problema de
hacer un programa que simule una calculadora.
Este problema en general es de fácil solución, sin embargo depende obviamente del lenguaje de programación en que debe implementarse.
¿Para qué?
Las operaciones aritméticas y las funciones matemáticas son el modo más sencillo de sumergirse en el mundo de la programación. Uno tiene un cálculo que hacer, y para ello utiliza las herramientas matemáticas del lenguaje a fin de resolverlo.
Al hacer esto intervienen varios factores sutiles e importantes, que merecen discusión, y a los que prestaremos debida atención:
- La computadora no tiene a su disposición infinitos dígitos, ni infinita precisión. Luego los números enteros tienen un máximo valor posible, y los números decimales están limitados a un rango muy limitado de números racionales (ni hablar de los irracionales, que no tienen representación directa).
- La falta de rango y/o de precisión de la computadora hace que inmediatamente obtengamos resultados "erróneos" en los cálculos, y tengamos que ajustar parámetros o dar rodeos para dar con la solución matemática correcta.
- También está el problema de cómo introducir o mostrar los datos numéricos. Para ello se deben atender distintos formatos posibles, y todos ellos a su vez limitados por las capacidades de representación de las computadoras.
- Una complicación adicional es que diferentes entornos de computación, o diferentes computadoras, tienen distintos rangos y/o grados de precisión aritmética. Esto trae, pues, una complicación adicional.
El mero intento, pues, de querer utilizar una computadora para resolver problemas matemáticos, está rodeado de variadas complicaciones, cuyo entendimiento nos hará comprender mejor cómo funcionan las máquinas, y cómo se distinguen del pensamiento matemático.
Sistemas numéricos en la matemática.En la
matemática tenemos los siguientes típicos
conjuntos de números:
- \( \color{blue}\mathbb{N} \): Conjunto de números naturales:
\( \color{blue}\mathbb{N}=\{0,1,2,3,\ldots\}. \)
- \( \color{blue}\mathbb{Z} \): Conjunto de números enteros:
\( \color{blue}\mathbb{Z}=\{\ldots,-3,-2,-1,0,1,2,3,\ldots\}. \)
- \( \color{blue}\mathbb{Q} \): Conjunto de números racionales:
\( \color{blue}\mathbb{Q}=\{\dfrac pq:\quad p\in\mathbb{Z},\quad q\in\mathbb{N}\}. \)
- \( \color{blue}\mathbb{R} \): Conjunto de números reales:
\( \displaystyle\color{blue}\mathbb{R}=\{\sum_{k=-\infty}^n d_k\cdot 10^{k}:\quad n\in\mathbb{Z},\quad \forall k\leq n: \, d_k=0,1,\ldots,9\}. \)
- \( \color{blue}\mathbb{C} \): Conjunto de números complejos:
\( \color{blue}\mathbb{C}=\{a+ib:\quad a,b\in\mathbb R\}. \)
Cada conjunto puede pensarse como un subconjunto del que le sigue, así:
\( \mathbb{N}\subset\mathbb{Z}\subset\mathbb{Q}\subset\mathbb{R}\subset\mathbb{C} \)
Aritmética y funciones matemáticas en la computadora.En los sistemas computacionales no tenemos acceso a estos conjuntos infinitos y maravillosos de números. Tenemos que conformarnos con subconjuntos reducidos, y con aproximaciones.La principal diferencia entre una computadora y una mente humana es la distintición entre lo finito y lo infinito. Nuestra mente intuye lo
infinito al parecer sin dificultad alguna.
Pero para una máquina el concepto de
infinito es un sinsentido.
No es físicamente posible escribir infinitos dígitos, ni hacer cálculos con un grado de precisión arbitrariamente grande en forma directa.
Se logra también distinguir el infinito "real" del infinito "potencial".Las computadoras permiten aproximarnos a la versión "iterativa" del infinito: yendo un paso a la vez, siempre hacia adelante. Mientras que con la imaginación de nuestra mente podemos imaginar un conjunto infinito "de un solo golpe". Esto computacionalmente no es posible.
Así pues, de un problema sencillo, podemos toparnos en el camino con muchos asuntos de interés teórico.
A continuación damos un listado de los lenguajes (de programación) en los que deseamos abordar el problema de la calculadora.
- Python
- C
- C++
- Pascal
- Ruby
- Matlab
- Maple
- Java
- C#
- ¿Algún otro?
En caso de que ocurran muchos comentarios, se abrirá un hilo adicional para los mismos.