25. Máquinas de cálculo rápido
Al tratar de las ecuaciones, Algebra Recreativa no puede desentenderse de la solución de ecuaciones en máquinas de calcular. Ya se ha dicho que las calculadoras pueden “jugar” al ajedrez (ó a las damas). Además pueden realizar también otras funciones; por ejemplo, la traducción, la orquestación de melodías, etc. Basta con elaborar el “programa” correspondiente, con arreglo al cual debe actuar la máquina.
Claro que no vamos a examinar aquí “programas” para el ajedrez, o para la traducción, que son difíciles en extremo. Examinaremos tan sólo dos “programas” sencillos. Más en principio hay que decir algunas palabras sobre la construcción de la máquina de cálculo.
En el capítulo primero se ha tratado de dispositivos que permiten hacer miles y decenas de miles de operaciones por segundo. La parte de la máquina que sirve para la ejecución directa de operaciones se llama aritmómetro. Además, la máquina tiene un dispositivo de dirección (que regula el trabajo de toda la máquina) y el dispositivo de memoria. La “memoria”, es un depósito de números y signos convencionales. Por último, la máquina está equipada con dispositivos de entrada y de salida destinados a introducir nuevos datos numéricos y ofrecer los resultados definitivos. La máquina registra estos resultados (ahora ya en el sistema decimal) en tarjetas especiales.
Es notorio que el sonido puede ser registrado en discos o en cinta, y después reproducido.

Figura 9
Pero la grabación del sonido en un disco puede hacerse tan sólo una vez: para realizar una nueva grabación se precisa otro disco. La impresión de sonidos en magnetófono tiene lugar de forma un tanto distinta, mediante el imantado de una cinta especial. El sonido registrado puede reproducirse las veces que sean precisas y, si la impresión resulta ya innecesaria, puede “desimantarse” y efectuar en ella una nueva grabación. Una misma cinta puede grabarse varias veces, con la particularidad de que cada nueva grabación “borra” la anterior.
El funcionamiento de la “memoria” se basa en un principio análogo. Los números y signos convencionales se registran eléctrica, magnética o mecánicamente en un tambor, una cinta u otro dispositivo. El número grabado puede ser “leído” en el momento oportuno; si no se necesita más puede ser borrado, grabándose otro en su lugar. La “extracción” y la “lectura” del número o el signo convencional dura sólo algunas millonésimas de segundo. La “memoria” puede constar de algunos miles de celdas y, cada celda, de varias decenas de elementos magnéticos, por ejemplo. Convengamos en que para registrar los números por medio del sistema de base dos, cada elemento imantado expresa el 1, y los no imantados, el 0. Supongamos, por ejemplo, que cada celda retentiva contiene 25 elementos (o como dicen 25 órdenes del sistema de base dos) y, además, el primer elemento de la celda sirve para expresar el signo del número (+ ó -), los siguientes 14 elementos sirven para imprimir la parte entera del número y, los últimos 10, para registrar la parte decimal.
En la fig. 9 se presentan esquemáticamente dos celdas de memoria, con 25 elementos en cada una, los imantados se expresan con el signo +; los desimantados, con el -. Examinemos la celda superior (la coma indica el lugar donde empieza la parte decimal, y la línea punteada separa el primer elemento - que sirve para fijar el signo - de los demás). En esa celda hay escrito (en el sistema de base dos) el número + 1011,01, equivalente en el sistema decimal, al que estamos acostumbrados, al 11,25.
Además de los números, en las celdas retentivas se conservan las órdenes que componen el “programa”. Veamos en qué consiste el sistema de órdenes a tres direcciones. En este caso, al escribir la orden, la celda retentiva se divide en 4 partes (las líneas de puntos en la celda inferior, fig. 9). La primera parte sirve para indicar el signo de operación, que va cifrado. Por ejemplo:
Las órdenes se descifran así: la primera parte de la celda es el número de la operación; la segunda y la tercera, los números de las celdas (direcciones), de las cuales hay que extraer las cifras para las operaciones; la parte cuarta es el número de la celda (dirección) adonde debe enviarse el resultado obtenido. Por ejemplo, en la fig. 9 (fila inferior) hay escritos por el sistema binario los números 11, 11, 111,1011, en el sistema decimal, 3, 3, 7, 11, lo que significa la siguiente orden: la operación III (multiplicación) debe efectuarse con los números de las celdas tercera y séptima y almacenar el resultado (es decir, registrarlo) en la celda undécima.
En lo sucesivo inscribiremos números y órdenes, no con signos convencionales, como en la fig. 9, sino directamente en el sistema decimal. Por ejemplo; la orden expuesta en la serie inferior de la fig. 9, se escribe así: multiplicación 3 7 11
Examinemos ahora dos sencillos ejemplos de programa.
1. Suma 4 5 4
2. Multiplicación 4 4
3. OD 1 ( [4])
4. 0
5. 1
Veamos cómo funciona una máquina en cuyas cinco primeras celdas están almacenados los siguientes datos:
1ª orden: sumar los números de las celdas 4 y 5 y enviar el resultado a la celda 4 (en sustitución de lo que figuraba anteriormente). Por consiguiente, la máquina escribe el número 0 + 1=1 en la celda 4. Después de cumplida la orden, en las celdas 4 y 5 se encontrarán los siguientes números:
4. 1
5. 1
2ª orden: multiplicar el número de la celda 4 por sí mismo (esto es, elevarlo al cuadrado) y registrar en la tarjeta el resultado, es decir, 12 (la flecha significa la salida de un resultado obtenido).
3ª orden: operación de dirección a la celda 1. En otras palabras la orden OD significa la repetición de todas las órdenes, empezando desde la primera. De forma que se ejecuta la primera orden.
1ª orden: sumar los números de las celdas 4 y 5, y fijar la suma de nuevo en la celda 4. En consecuencia, en la celda 4 estará el número 1 + 1 = 2:
4. 2
5. 1
2ª orden: elevar al cuadrado el número de la celda 4 y el resultado, 22, registrarlo en la tarjeta (la flecha indica la salida del resultado).
3ª orden: operación de dirección a la celda 1 (es decir, volver de nuevo a la primera orden).
1ª orden: el número 2 + 1 = 3 enviarlo a la celda 4:
4. 3
5. 1
2ª orden: registrar en la tarjeta el valor de 32.
3ª orden: operación de dirección a la celda 1, etc.
Hemos visto cómo la máquina calcula sucesivamente los cuadrados de números enteros y los registra en la tarjeta. Obsérvese que no es preciso elegir cada vez el nuevo número: la máquina misma escoge uno tras otro los números enteros y los eleva al cuadrado. Actuando de acuerdo con este programa la máquina obtiene el cuadrado de todos los números enteros desde 1 hasta el 10 000, en algunos segundos (o en partes de segundo). Debe hacerse notar que, en realidad, el programa para el cálculo de los cuadrados de números enteros debe ser algo más complejo que el mencionado más arriba. Esto se refiere, en particular, a la 2ª orden. Para registrar el resultado en tarjeta se requiere mucho más tiempo que el que precisa la máquina para ejecutar una operación. Por eso, los resultados se almacenan primero en las celdas libres de la “memoria”, y sólo después (“sin precipitarse”) se registran en las tarjetas. De esta suerte, el primer resultado definitivo se almacena en la celda la de la “memoria” que se encuentra libre; el segundo en la celda 2ª; el tercero, en la 3ª, etc. En el programa simplificado expuesto anteriormente, todo ello había sido omitido.
Por añadidura, la máquina no puede dedicarse durante largo tiempo al cálculo de cuadrados pues no bastan las celdas de la “memoria”, y es imposible “adivinar” cuándo ha obtenido la máquina los cuadrados que necesitamos, a fin de desconectarla, (ya que la máquina ejecuta miles de operaciones por segundo). Por esa razón se prevén órdenes especiales para detener la máquina en el momento oportuno. Por ejemplo, el programa puede ser compuesto de tal manera que la máquina calcule los cuadrados de todos los números enteros, del 1 al 10 000, y después se pare automáticamente.
Hay también otra clase de órdenes más complicadas, de las cuales no nos ocuparemos.
He aquí qué aspecto tiene el programa para el cálculo de cuadrados del 1 al 10 000:
1) suma 8 9 8
2) multiplicación 8 8 10
3) suma 2 6 2
4) OC 8 7 1 ( [5])
5) stop
6) 0 0 1
7) 10 000
8) 0
9) 1
10) 0
11) 0
12) 0
Las dos primeras órdenes se diferencian poco de las que se han expuesto en el programa simplificado. Después de cumplir estas dos órdenes, en las celdas 8, 9 y 10 habrá los siguientes números:
8) 1
9) 1
10) 12
La tercera orden es muy interesante: hay que sumar el contenido de las celdas 2 y 6, registrar otra vez el resultado en la celda 2, después de lo cual, ofrecerá el siguiente aspecto:
2) multiplicación 8 8 11.
De aquí que, después de cumplida la 3ª orden, cambia la segunda orden, mejor dicho, cambia una de las direcciones de la 2ª orden. A continuación aclararemos las razones a que obedece esto.
La cuarta es la operación de comparación (en sustitución de la tercera orden del programa examinado anteriormente). Esta se cumple así: si el número almacenado en la celda 8 es menor que el de la 7, la operación de dirección la transmite a la celda l; en caso contrario, se efectúa la orden siguiente, (la 5). En nuestro caso como 1 ‹10 000, la operación de dirección se le encarga a la celda 1.
Por consiguiente, volvemos otra vez a la orden primera. Una vez cumplida ésta en la celda 8 se encontrará el número 2. La segunda orden, que se presentará como
2) multiplicación 8 8 11, consiste en que 22 se envía a la celda 11. Ahora queda claro para qué fue cumplida anteriormente la 3ª orden: el nuevo 22 no puede ir a parar a la celda 10 que ya está ocupada, sino a la siguiente. Una vez cumplidas las órdenes lª y 2ª, tendremos los siguientes números:
8) 2
9) 1
10) 12
11) 22
Después de ejecutada la orden 3ª, la celda 2, aparecerá así:
2) multiplicación 8 8 12
es decir, la máquina “se preparó” para anotar el nuevo resultado en la celda 12. Y como en la celda 8 sigue habiendo un número menor que en la 9, la 4ª orden significa que se encarga a la celda 1 la operación de dirección.
Ahora, cumplidas ya las órdenes lª y 2ª, obtendremos:
8) 3
9) 1
10) 12
11) 2
12) 3
¿Hasta cuándo continuará la máquina calculando los cuadrados según el programa? Hasta que en la celda 8 aparezca el número 10 000, es decir, mientras no hayan sido obtenidos los cuadrados de los números comprendidos entre el 1 y el 10 000. Después, la 4ª orden ya no transmite la operación de dirección a la celda 1 (por cuanto en la celda 8 habrá un número no menor, sino igual al almacenado en la celda 7), es decir, después de la 4ª orden, la máquina cumple la 5ª orden: cesa de funcionar (se desconecta).

Figura 10
Examinemos ahora un proceso más complicado de programación para resolver sistemas de ecuaciones. Veamos un programa simplificado. Si se desea puede imaginarse el aspecto completo del programa.
Supongamos el siguiente sistema de ecuaciones:
ax + by=c
dx + ey=f
Este sistema es fácil de resolver:
x = (ce - bf)/(ae - bd)
y = (af - cd)/(ae - bd)
Este sistema (con los valores numéricos de los coeficientes a, b, c, d, e, f) podría resolverse en menos de un minuto. La máquina, en cambio, puede dar en un segundo la solución de miles de tales sistemas de ecuaciones. Examinemos el programa correspondiente.
Consideremos que han sido dados simultáneamente varios sistemas: con valores numéricos para los coeficientes a, b, c, d, e, f, a', b',…
He aquí el correspondiente programa:
1ª orden: plantear la multiplicación de los números almacenados en las celdas 28 y 30, y enviar el resultado a la celda 20. Dicho en otras palabras: en la celda 20 se almacenará el número ce.
De manera análoga serán realizadas las órdenes desde la 2ª hasta la 6ª. Después de ejecutarlas, desde la celda 20 hasta la 25 encontraremos los siguientes números:
20) ce
21) bf
22) ae
23) bd
24) af
25) cd
7ª orden: del número de la celda 20, restar el de la 21, y el resultado, (es decir, ce - bf), volver a almacenarlo en la celda 20.
De la misma forma se cumplen las órdenes 8ª y 9ª. En consecuencia, en las celdas 20, 21 y 22 aparecerán los siguientes números:
20) ce - bf
21) ae - bd
22) af - cd
Ordenes 10ª y 11ª: se forman los siguientes quebrados:
(ce - bf)/(ae - bd)
(af - cd)/(ae - bd)
que se registran en la tarjeta (es decir, se presentan como resultados definitivos). Estos son los valores de las incógnitas obtenidas del primer sistema de ecuaciones.
Como vemos, el primer sistema ha sido resuelto. ¿Para qué hacen falta nuevas órdenes? La parte siguiente del programa (desde la celda 12 hasta la 19) está destinada a obligar a la máquina a “pasar” al segundo sistema de ecuaciones. Veamos su proceso.
Las órdenes desde la 10 hasta 17 consisten en agregar al contenido desde la celda 1 hasta la 6 lo almacenado en la celda 19, y los resultados vuelven otra vez a las celdas desde la 1 hasta la 6. De tal manera, después de cumplir la orden 17ª, las primeras seis celdas tendrán el siguiente contenido:
1) *34 36 20
2) *33 37 21
3) *32 36 22
4) *33 35 23
5) *32 37 24
6) *34 35 25
Orden 18ª: operación de dirección a la primera celda.
¿En qué se diferencian las nuevas anotaciones de las primeras seis celdas de las anteriores?
En que las dos direcciones primeras tienen en estas celdas los números que van del 32 al 37 y no del 26 al 31, como antes. En otras palabras, la máquina realizará de nuevo las mismas operaciones, pero las cifras no serán tomadas, de las celdas 26 a la 31, sino de la 32 a la 37 donde están los coeficientes del segundo sistema de ecuaciones. Después de resolver éste, la máquina pasa al tercero, etc.
Lo dicho hasta aquí patentiza la importancia de “programar” con acierto. La máquina, “de por sí”, no “sabe” hacer nada. Sólo puede cumplir el programa que se la encomiende. Hay programas para calcular raíces, logaritmos y senos, para resolver ecuaciones de grados superiores, etc. Se ha indicado ya que existen programas para jugar al ajedrez, para la traducción de un idioma a otro, etc. Es claro que cuanto más difícil sea el problema a resolver, tanto más complejo será el programa correspondiente.
Añadamos, como conclusión, que existe la programación de programas, es decir, aquélla con ayuda de la cual la misma máquina puede componer el programa para resolver el problema.
Esto facilita en gran medida la programación, que con frecuencia es bastante laboriosa.
Notas: