Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Convertir Decimal A Fracción
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Convertir Decimal A Fracción 
 
Hola colegas,

se me presento un caso en una pequeña fabrica en la que se necesitaba
expresar los resultados de algunos cálculos en formato de fracción, pero
como sabemos gambas no escribe en facción y creo que ningún otro lenguaje,
así que escribí una función que permite introducir EJ: 0.8125 y devuelve 13/16

adjunto la función. espero a alguien le sea de utilidad

PUBLIC FUNCTION Cfraccion(Cadena AS String) AS String 'Convierte decimal a fraccion
    DIM tm AS Byte   'tamaño del decimal
    DIM m AS Single  'maximo comun divisor
    DIM k AS Single  'multiplicador
    DIM n AS Single  'numerador
    DIM d AS Single  'denominador
    DIM n1 AS Single  'numerador experimental
    DIM d1 AS Single  'denominador experimental
    DIM f AS String
    DIM final AS String
    
    f = Frac(Cadena)
    tm = Len(f) - 2
    
    IF tm = 1 THEN k = 10
    IF tm = 2 THEN k = 100
    IF tm = 3 THEN k = 1000
    IF tm = 4 THEN k = 10000
    
    n = k * Frac(Cadena)
    d = k * 1
    
    FOR m = k TO 1 STEP -1
        n1 = n / m
        d1 = d / m
        
        IF Len(CStr(Frac(n1))) <= 1 AND Len(CStr(Frac(d1))) <= 1 THEN
            m = 1
            final = n1 & "/" & d1
        ENDIF
    NEXT

    RETURN final
END

 



 
alessandri - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Decimal A Fracción 
 
Interesante ... gracias por la aportacion  
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Decimal A Fracción 
 
Hola Alessandri:

Podrías ahorrar un poco de código:
Yo lo hice así.Fíjate en la conversión que hace en la variable denominador.

PUBLIC FUNCTION DecAFrac(decimal AS Float) AS String
DIM numerador AS Float
DIM denominador AS Float
DIM mcd AS Integer
DIM n AS Integer

'Añadimos detras de 1 tantos ceros como decimales tenga el número
denominador = "1" & String$(Len(CStr(Frac(decimal))) - 2, "0")

numerador = decimal * denominador

FOR n = 2 TO numerador
    IF (CInt(numerador) MOD n = 0) AND (CInt(denominador) MOD n = 0) THEN mcd = n
NEXT

IF mcd <> 0 THEN
  numerador = numerador / mcd
  denominador = denominador / mcd
ELSE
  PRINT "No se puede simplificar"
ENDIF
RETURN (numerador & "/" & denominador)

END
 


Pero, no hemos pensado cuando un número es periódico puro.Imagina el caso de 0,33

0,33/1
Multiplicamos por 3
0,99/3

¿ No podríamos decir que 0,99 es casi 1 ?
Osea:
1/3

Seria discutible.

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Decimal A Fracción 
 
Hola!.

Aun se puede mejorar un poco más el algoritmo para encontrar su mcd en menos pasos que hacer un bucle hasta el número mayor.

El algoritmo de Euclides dice:

mcd de (dividendo y divisor) = mcd de (divisor y resto)



PUBLIC FUNCTION mcd(a AS Integer, b AS Integer) AS Integer
DIM r AS Integer
DIM aux AS Integer

IF a < b THEN
  aux = a
  a = b
  b = aux
ENDIF  

DO WHILE b <> 0
  r = a MOD b
  a = b
  b = r
LOOP
RETURN a

END
 


Tenemos que tener en cuenta que el valor devuelto pudiera ser 1 con lo que no tendría un mcd.

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 13 Abril 2012, 09:59; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Decimal A Fracción 
 
hola,
gracias colegas, voy a integrar todas esas mejoras que me han propuesto

gracias.
 



 
alessandri - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Convertir Hexadecimal A Decimal (SOLUCIONADO) MiguelVelandia Aplicaciones/Fragmentos de Código 16 Viernes, 19 Octobre 2012, 18:43 Ver último mensaje
jsbsan
No hay nuevos mensajes Decimal Y Binario Shell General 2 Domingo, 03 Abril 2016, 18:38 Ver último mensaje
Shell
No hay nuevos mensajes Convertir Una Coordenada Geográfica De Fo... vuott Aplicaciones/Fragmentos de Código 7 Miercoles, 07 Febrero 2018, 21:19 Ver último mensaje
Grandamakulo
No hay nuevos mensajes Convertir Hexadecimal En Decimal tincho Aplicaciones/Fragmentos de Código 5 Lunes, 11 May 2020, 21:50 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron