hola a todos ..!
Para encontrar un metodo de simplificar ya sea:
(6 / 8) ambos dividiendo entre 2 para poder simplificar a una minima expresion
calculos
(6 / 2) = 3
(8 / 2) = 4
dando resultado como 3/4
Como seria el codigo en visual basic
Aunque no te hayas expresado muy correctamente, yo te he entendido...
Lo que pides, es lo que se conoce como hallar el 'Máximo común divisor', que te enseñaron seguramente de niño, y que por lo visto has olvidado...
Yo te muestro un método 'lento de cálculo', pero rápido de programar, puede ser optimizado de varias maneras, la 1ª mirando si el bucle debe ser creciente o decreciente y la más óptima es usando una tabla de primos (para recorrer sólo esos valores, no el resto).
El código es susceptible de ser optimizado. Una vez comprendas lo que hace, puedes modificar el cómo lo hace... eso ya queda a tu esfuerzo....
Al final del bucle se obtiene el MCD que devuelve la función y las fracciones reducidas que se devuelven por referencia a través de los parámetros.
Para ejecutar el proyecto, añade al formulario 1 botón 1 dos controles de texto, luego copia el código (está comentado) y pégalo en la ventana de código:
Private Sub Command1_Click()
Dim d As Long, n As Long, m As Long
Dim v() As String
v = Split(Text1.Text, "/")
d = Val(v(0)) 'Val(Right$(Text1.Text, 1))
n = Val(v(1)) 'val(Left$(Text1.Text, 1))
m = MCD(d, n)
Text2.Text = "MCD= " & CStr(m) & "; Reducción de la fracción: " & CStr(d) & "/" & CStr(n)
End Sub
' Den= Denominador
' Num= Numerador
' Halla el máximo común divisor de los valores fraccionarios dados...
Public Function MCD(ByRef Den As Long, ByRef Num As Long) As Long
Dim v As Long ' contendrá temporalmente el valor MCD calculado
Dim Ix As Long ' índice usado en el bucle.
Dim max As Long ' valor máximo que debe cabría esperar que fuera divisor, así 'a lo bruto'.
' Comprobamos que es menor si el denominador o el numerador.
' para luego hallar su mitad, que entregamos en max
' como max es un long, el valor devuelto es entero.
' El objetivo de esto (max) es conocer el mayor valor tras el cual
' es imposible que haya otro que divida a dichos números.
' Si el valor es 20, es absurdo usar un número mayor de 20
' pero incluso basta con la mitad (ya que el primo menor es 2).
If Den < Num Then
max = (Den \ 2) + 1
Else
max = (Num \ 2) + 1
End If
v = 1
For Ix = max To 2 Step -1 ' este bucle recorre los números.
Do ' este bucle permite recoger cuantas veces esté un número...
If Den Mod Ix <> 0 Then Exit Do ' si no es múltiplo, no lo divide
If Num Mod Ix <> 0 Then Exit Do ' si es múltiplo del den, pero no del num, no vale.
v = v * Ix ' calculando sobre la marcha el MCD...
Den = Den \ Ix ' lo dividimos
Num = Num \ Ix ' lo dividimos
Loop
Next
MCD = v
End Function