Este es otro ejemplo de uso de un lenguaje de programación para producir automáticamente una tabla de referencia útil.
En la escuela se nos enseña cómo encontrar los factores primos de un número. Ese procedimiento puede expresarse en un lenguaje formal (lenguaje de programación Logo) de la siguiente manera:
para factores :num [:encontrado busca.factor :num]
si :encontrado = :num [devuelve ponprimero :encontrado []]
devuelve ponprimero :encontrado factores :num / :encontrado
fin
para busca.factor :num [:posible.factor 2]
si :num = 1 [devuelve 1]
si :num = :posible.factor [devuelve :num]
si 0 = resto :num :posible.factor [devuelve :posible.factor]
devuelve (busca.factor :num :posible.factor + 1)
fin
Bastantes menos palabras que las que utilizaríamos en lenguaje natural para explicar el procedimiento, y bastante más precisas, ya que podemos utilizar esta descripción formal y verificar si funciona:
muestra factores 12
[2 2 3]
muestra factores 360
[2 2 2 3 3 5]
muestra factores 2
[2]
muestra factores 1
[1]
muestra factores 329
[7 47]
De la misma manera, podemos definir una procedimiento llamado divisores que nos devuelva los divisores de un número dado. Este procedimiento es aún más sencillo:
para divisores :num [:posible.divisor 1]
si :posible.divisor > :num [devuelve []]
devuelve frase ~
sisino 0 = resto :num :posible.divisor [:posible.divisor] [[]] ~
(divisores :num :posible.divisor + 1)
fin
muestra divisores 12
[1 2 3 4 6 12]
muestra divisores 30
[1 2 3 5 6 10 15 30]
muestra divisores 43
[1 43]
muestra divisores 360
[1 2 3 4 5 6 8 9 10 12 15 18 20 24 30 36 40 45 60 72 90 120 180 360]
Usando estas definiciones podemos calcular los factores primos y los divisores para una secuencia de números enteros. Para crear la secuencia usamos SecEnt. Y para trabajar con cada número de la secuencia utilizamos ParaCada:
paracada secent 1 20 [(escribe [Factores Primos de] ? [:] factores ?)]
Factores Primos de 1 : 1
Factores Primos de 2 : 2
Factores Primos de 3 : 3
Factores Primos de 4 : 2 2
Factores Primos de 5 : 5
Factores Primos de 6 : 2 3
Factores Primos de 7 : 7
Factores Primos de 8 : 2 2 2
Factores Primos de 9 : 3 3
Factores Primos de 10 : 2 5
Factores Primos de 11 : 11
Factores Primos de 12 : 2 2 3
Factores Primos de 13 : 13
Factores Primos de 14 : 2 7
Factores Primos de 15 : 3 5
Factores Primos de 16 : 2 2 2 2
Factores Primos de 17 : 17
Factores Primos de 18 : 2 3 3
Factores Primos de 19 : 19
Factores Primos de 20 : 2 2 5
paracada secent 1 20 [(escribe [Divisores de] ? [:] divisores ?)]
Divisores de 1 : 1
Divisores de 2 : 1 2
Divisores de 3 : 1 3
Divisores de 4 : 1 2 4
Divisores de 5 : 1 5
Divisores de 6 : 1 2 3 6
Divisores de 7 : 1 7
Divisores de 8 : 1 2 4 8
Divisores de 9 : 1 3 9
Divisores de 10 : 1 2 5 10
Divisores de 11 : 1 11
Divisores de 12 : 1 2 3 4 6 12
Divisores de 13 : 1 13
Divisores de 14 : 1 2 7 14
Divisores de 15 : 1 3 5 15
Divisores de 16 : 1 2 4 8 16
Divisores de 17 : 1 17
Divisores de 18 : 1 2 3 6 9 18
Divisores de 19 : 1 19
Divisores de 20 : 1 2 4 5 10 20
Creación de Tablas de Multiplicación para Imprimir
Ejercicios de las Operaciones Básicas para Imprimir