miércoles, 24 de noviembre de 2010

Aprender comprobando

Tanto Internet como los libros de divulgación matemática están llenos de listas de números que se caracterizan por ser los únicos que cumplen algún requisito. La página http://oeis.org/A084687 nos presenta la siguiente lista como la de los números enteros positivos que son múltiplos de los números formados por sus mismas cifras ordenadas en orden creciente:

9513, 81816, 93513, 94143, 95193, 816816, 888216, 933513, 934143, 935193, 941493, 951993, 2491578, 8166816, 8868216, 9333513, 9334143, 9335193, 9341493, 9351993, 9414993, 9519993, 24915798, 49827156, 81666816, 87127446, 88668216, 93333513

Este requisito ha de cumplirse en sentido estricto:
* No pueden contener cifras nulas.
* No pueden poseer ellos mismos las cifras ya ordenadas.

El primer ejemplo de la lista es el número 9513, que no contiene cifras nulas y es múltiplo de 1359, formado por las cifras 9, 5, 1 y 3 ordenadas de forma creciente.

Los cocientes que se forman son “casi todos” iguales a 7. Investiga este hecho si quieres.

Un ejercicio muy formativo es el de obtener esa misma lista con nuestros propios instrumentos, que aquí será la hoja de cálculo. Para ello debemos organizar muy bien el proceso, y en esta tarea aprenderemos de Matemáticas y de programación mucho más de lo que nos creemos. Presentamos una organización del proceso de obtención de la lista presentada, aunque sería deseable que nuestros lectores no siguieran leyendo y pasaran a su propia organización. Así también ellos, como nosotros, aprenderían probando.

Un posible esquema sería el siguiente:

Obtención de la lista de números
* Se recorren todos los números A desde un inicio hasta un número final.
* Para cada uno se realizan estas operaciones:

  •  Calcular el número de cifras de A
  •  Extraer todas las cifras de A. Si alguna es cero se rechaza el número.
  •  Ordenar las cifras
  •  Formar con esas cifras un nuevo número B
* Si A=B se rechaza el número.
* Si A es múltiplo de B se incorpora A a la lista.
* Se pasa al siguiente número

Si te interesa la programación en Basic, puedes estudiar el siguiente código comentado para OpenOffice.org Calc:

Funciones auxiliares

Para saber si m es múltiplo de n. Devuelve 1 si lo es, y 0 si no lo es

Public function esmultiplo(m,n)
if m=int(m/n)*n then esmultiplo=1 else esmultiplo=0
end function


Para contar el número de cifras

Public function numcifras(n)
numcifras=int(log(n)/log(10))+1
end function

Extrae la cifra de orden n de un número m

Public function cifra(m,n)
dim a,b
a=10^(n-1)
b=int(m/a)-10*int(m/a/10)
cifra=b
end function

Algoritmo de búsqueda

Sub busquedas
dim n,m,i,j,k,l,a,b,fila,p,q
dim ci(12)

Lee el inicio (celda G7) y el final (celda H7)

n=StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(6,6).value
m=StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(7,6).value
fila=8

Recorre los numeros

for i=n to m

Extrae cifras y las ordena

Extrae cifras

k=numcifras(i)
for l=1 to k
ci(l)=cifra(i,l):if ci(l)=0 then exit sub   'no se admiten cifras nulas
next l

Las ordena

if k>=1 then

for j=1 to k-1
for p=2 to k
if ci(p-1)next p
next j

end if

Construye el número con cifras ordenadas

q=0
for j=1 to k
q=q+ci(j)*10^(j-1)
next j

‘si es múltiplo, lo presenta en columna

if esmultiplo(i,q)=1 and i<>q then
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(6,fila).value=i
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(7,fila).value=q
fila=fila+1
end if

next i

end sub


Ánimo y a estudiarlo, que contiene bastante información valiosa.