martes, 8 de noviembre de 2016

VBA: El algoritmo de Euclides y el Máximo Común Divisor

Nos adentramos un poco más en la mente de los grandes matemáticos de la historia.
Hoy desarrollaremos en VBA el algoritmo de Euclides para calcular el Máximo Común Divisor.
Puedes leer algo más en Wikipedia.


Básicamente este algoritmo de cálculo representa la idea siguiente: el máximo común dívisor (M.C.D) de dos enteros positivos A y B es el mayor entero C que divide exactamente a A y B.

Si, existe la función estándar de Excel en la hoja de cálculo:
=M.C.D(numero1;numero2)
Esta función realiza el cálculo...
La idea es aprender a interpretar conceptos y aplicarlos con la lógica de programación concreta de VBA para Excel.


En un módulo estándar de nuestro proyecto de VB insertamos la siguiente función personalizada - UDF:

Function MaximoComunDivisor(a As Long, b As Long)
Dim intermedio As Long
'nos aseguramos que se trabaja sobre números positivos
a = Abs(a): b = Abs(b)

'iniciamos el proceso asignando valores iniciales
'a partir de los datos dados como argumentos
Min = Application.Min(a, b)
Max = Application.Max(a, b)

'comenzamos la iteración con un bucle Do...Loop
Do
    intermedio = Min    'trabajamos sobre el divisor
    Min = Max Mod intermedio    'Min   'el resto lo pasamos a divisor
    Max = intermedio    'el divisor pasa a dividendo

Loop While Min <> 0

'recuperamos como MCD el último resto no nulo
MaximoComunDivisor = Max
End Function



Podemos ver la resolución en la imagen:

VBA: El algoritmo de Euclides y el Máximo Común Divisor



Comprobamos que el proceso iterativo que describe el algoritmo se replica en nuestra función (Do..Loop), viendo como la sucesión de residuos o restos va disminuyendo, finalmente un resto tiene que ser cero,momento en el que el algoritmo termina.
El Máximo Común Divisor es precisamente el último residuo que no es cero.

3 comentarios: