Laburo España: 250.000 ofertas de empleo

swemG

La tierra da vueltas y yo doy vueltas sobre la tierra

Adios Smallworld. Adios Magik.

5, 03 de 2006-05-03 de 2006
Tras un periodo de entrenamiento bastante intenso en lo que se refiere a Smallworld, que ha incluido 2 meses desarrollando código y trabajando con Spatial Intelligence en las oficinas de GE Enery en Freiburg(Alemania) empiezo a asumir que no utilizaré esta tecnología en mi trabajo ni su lenguaje de programación, MAGIK ya que me han destinado como Analista onSite para proyectos .NET hasta el 31 de diciembre.

Como recuerdo, ahí va un método para hallar números perfectos y su relación con números primos:

_method integer.n_perfectos
_for i _over 2.upto(15) # 31 es un valor de prueba para correr el bucle
_loop
_if i _mod 2 <> 0 _or i=2 # sólo nos interesan los números impares
# excepto el 2, único par primo.
_then
# Fórmula de Euclides para hallar números perfectos
x << 2.to_power(i-1)*(2.to_power(i)-1)

#inicializamos la suma de divisores propios
suma_partes<<0

# dividimos "x entre 2" con _div(para no obtener un valor
# flotante) y nos ahorramos la mitad del bucle. Evidentemente
# ningún número tiene un divisor propio mayor que su mitad.
_for j _over (x _div 2).downto(1)
_loop
_if x _mod j =0 # es divisor propio.
_then
# lo añadimos a la suma de divisores propios
suma_partes << suma_partes + j

# si la suma de divisores propios es mayor que el propio número
# no se trata de un número perfecto por lo que salimos del
# bucle.
_if suma_partes > x
_then
# salimos del bucle
# no es un número perfecto!!!
_leave
_endif
_endif
_endloop

# si la suma de divisores propios es igual que el número lo
# pintamos por pantalla.
_if x = suma_partes
_then
write(i, "-->",x," es un número perfecto!!!","Primo 2º->",
(2.to_power(i)-1).prime?)
_endif
_endif
_endloop
_endmethod
$

Hasta siempre Magik.

Comentarios

Agregar un comentario


Recordar datos
¡Un solo click vale!

LaInformacion.com lainformacion.com - Medio Oficial de los Premios Bitacoras 2009