• Sábado 16 de Octubre de 2021, 01:18

Autor Tema:  Un método que simplifique la fracción a su mínima expresión  (Leído 8795 veces)

jessica camacho

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Un método que simplifique la fracción a su mínima expresión
« en: Lunes 21 de Mayo de 2012, 04:25 »
0
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

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re:Un método que simplifique la fracción a su mínima expresión
« Respuesta #1 en: Lunes 21 de Mayo de 2012, 17:39 »
0
Hola, bienvenida al foro.
Lamentablemente no podemos ayudarte. La forma en que preguntas no es para este foro y ni en muchos otros foros.
Si durante tú programación te encuentras con un problema, lo colocas acá y de seguro alguién te dará el apoyo.
Te recomiendo que utilices google, de seguro te saldrán mucho ejemplos.

Saludos,
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re:Un método que simplifique la fracción a su mínima expresión
« Respuesta #2 en: Viernes 28 de Septiembre de 2012, 23:10 »
0
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:

Código: Visual Basic
  1. Private Sub Command1_Click()
  2.     Dim d As Long, n As Long, m As Long
  3.     Dim v() As String
  4.    
  5.     v = Split(Text1.Text, "/")
  6.     d = Val(v(0)) 'Val(Right$(Text1.Text, 1))
  7.    n = Val(v(1)) 'val(Left$(Text1.Text, 1))
  8.    
  9.     m = MCD(d, n)
  10.     Text2.Text = "MCD= " & CStr(m) & "; Reducción de la fracción: " & CStr(d) & "/" & CStr(n)
  11. End Sub
  12.  
  13.  
  14. ' Den= Denominador
  15. ' Num= Numerador
  16. ' Halla el máximo común divisor de los valores fraccionarios dados...
  17. Public Function MCD(ByRef Den As Long, ByRef Num As Long) As Long
  18.     Dim v As Long   ' contendrá temporalmente el valor MCD calculado
  19.    Dim Ix As Long  ' índice usado en el bucle.
  20.    Dim max As Long ' valor máximo que debe cabría esperar que fuera divisor, así 'a lo bruto'.
  21.        
  22.     ' Comprobamos que es menor si el denominador o el numerador.
  23.    '  para luego hallar su mitad, que entregamos en max
  24.    '   como max es un long, el valor devuelto es entero.
  25.    ' El objetivo de esto (max) es conocer el mayor valor tras el cual
  26.    '   es imposible que haya otro que divida a dichos números.
  27.    '   Si el valor es 20, es absurdo usar un número mayor de 20
  28.    '     pero incluso basta con la mitad (ya que el primo menor es 2).
  29.    If Den < Num Then
  30.         max = (Den \ 2) + 1
  31.     Else
  32.         max = (Num \ 2) + 1
  33.     End If
  34.    
  35.        
  36.     v = 1
  37.     For Ix = max To 2 Step -1       ' este  bucle recorre los números.
  38.        Do                          ' este bucle permite recoger cuantas veces esté un número...
  39.            If Den Mod Ix <> 0 Then Exit Do   ' si no es múltiplo, no lo divide
  40.            If Num Mod Ix <> 0 Then Exit Do   ' si es múltiplo del den, pero no del num, no vale.
  41.            v = v * Ix              ' calculando sobre la marcha el MCD...
  42.            Den = Den \ Ix          ' lo dividimos
  43.            Num = Num \ Ix          ' lo dividimos
  44.        Loop
  45.     Next
  46.    
  47.     MCD = v
  48. End Function
  49.  
«Ma non troppo»
----> ModoVacaciones = False<----