Programación General > Visual Basic 6.0 e inferiores
simplificar una fraccion y una raiz en vb
zero_kool:
--- Cita de: "m0skit0" ---No se calienten. A ver, el tema es que si te ponemos código en VB6 dudo que te funcione en una calculadora programable, porque VB6 no es BASIC tal cual, sino una versión de Microsoft para Windows de 32 bits.
--- Fin de la cita ---
Bueno en realidad me moleste con el usuario de mas arriba , "por favor" si eres tan amable podrias postear un fragmento de codigo que realice lo que exprese mas arriba " , gracias de antemano, yo me encargo de trasformarlo a lo que necesito.
saludos
zero_kool:
--- Cita de: "Nebire" ---
--- Cita de: "zero_kool" ---holas
como podria ser el codigo que me simplifique 2 expresiones en vb
necesito un framento de codigo que haga esto , lo mas sencillo posible , pues es para
implementarlo en una calculadora programable que usa un tipo de basic
--- Fin de la cita ---
Con Notación Polaca Inversa, estos problemas suelen solucionarse bien y en genral todos los de álgebra. Apenas si necesitas 2 o 3 pilas y quizás alguna matriz para mayor comodidad.
La NPI te permite cambiar una expresión tal que (A+B) * 2 en esta otra AB + 2 * es importante el orden de prioridad de las operaciones, que puedes usar una tabla o matriz para la misma.
El proceso suele ser simple, pero dependiendo de tu nivel te uedes complicar las barbas porque haces algo que casi se parece pero...
Hay que examinar carácter a carácter la expresión, si es un operando se extrae si es un signo de operación se coloca en la pila de operaciones. La operación en curso la que está en lo alto de la pila, se compara con la anterior usando la tabla de prioridades (la tabla de prioridades es una tabla de elementos tantos como operaciones aritméticas vayas a usar, por fila y los mismos por columnas, se les da un valor en base a su prioridad.
Si tú nivel de basic no es el adecuado quizás te interese más partirte el pecho con 200-2000 líneas de código. Si en cambio se te da bien las mates, quizás prefieras resolverlo usando el método de trasposición, la regla de los trapecios y/o el método de Gauss.
--- Fin de la cita ---
interesante, pero lo que necesito es un resultado donde no se reduzca todo a decimal , sino se muestren los pasos intermedios que llegaron a ese decimal,(no me interesa todo el codigo) solo el que simplifica una raiz y simplifica una fraccion( ejem 33/66 =1/2 , rc(288) =rc(144*2) =12rc(2) me acomoda el vb para hacer cosas y despues veo como transformarlas .
gracias de antemano si se te ocurre algo
m0skit0:
Para simplificar una fracción, como ya sabrás del colegio, primero hay que hallar el máximo común divisor del numerador y denominador, lo que podemos hacer usando el algoritmo de Euclides:
--- Código: Visual Basic --- Public Function MaxComunDivisor(ByVal A As Integer, ByVal B As Integer) As Integer If B = 0 Then MaxComunDivisor = A Else MaxComunDivisor = MaxComunDivisor(B, A Mod B) End IfEnd Function
Una vez hallado el MCD, basta con dividir tanto numerador como denominador por éste.
Para poder sacar factores en una raíz cuadrada, hay que factorizar el parámetro interno. Factorizar es un problema más complejo que el MCD puesto que implica el uso de números primos. Suponiendo rc(A), para factorizar A podemos hacer:
--- Código: Visual Basic --- 'Para poder devolver potenciasPrivate Type tPotencia Base As Integer Exponente As IntegerEnd Type 'Lista global de números primos que vamos a necesitar para factorizarPublic ListaPrimos(MaxPrimos) As Integer 'Rellenamos con un elemento inicial superfluo, la factorizacion comienza en el índice 1Dim Factorizacion(0) As tPotencia Public Sub Factorizar(ByVal A as Integer, ByRef Factorizacion() As tPotencia, ByRef NumFactores As Integer) Dim i As Integer i = 0 NumFactores = 0 'Mientras A pueda descomponerse y no hayamos llegado al máximo de los primos Do (While A > 1) And (i<=MaxPrimos) 'A es divisible por ListaPrimos(i) If (A Mod ListaPrimos(i)) = 0 Then A = A / ListaPrimos(i) If Factorizacion(NumFactores).Base <> ListaPrimos(i) Then 'Nuevo factor NumFactores = NumFactores + 1 ReDim Factorizacion(NumFactores) Factorizacion(NumFactores).Base = ListaPrimos(i) Factorizacion(NumFactores).Exponente = 1 Else 'Factor ya existe Factorizacion(NumFactores).Exponente = Factorizacion(NumFactores).Exponente + 1 End If 'Pasamos al siguiente primo Else i = i + 1 End If Loop If i > MaxPrimos Then MsgBox "ListaPrimos insuficiente para factorizar A" End If End Sub
Para poder sacar factores fuera de la raíz cuadrada su exponente debe ser mayor o igual que 2. Lo que se sacaría sería Base ^ (Exponente / 2) y lo que quedaría dentro de la raíz sería Base ^ (Exponente Mod 2), para cada factor.
P.D: Disculpa pero no he tenido tiempo para probar el código. Cualquier problema o duda, me comentas.
zero_kool:
holas , apenas he tenido tiempo de ver el código de la raiz
al tratar de implementarlo me da un error de variable no declarada
o algo se me olvida o hay un bug
no pensé que estuviese tan oxidado
si lo puedes revisar con un ejemplo te lo agradeceria, cuando tengas tiempo, gracias
m0skit0:
Supongo que te referirás a MaxPrimos, que no está declarada.
--- Código: Visual Basic --- Global Const MaxPrimos = 20 'Por ejemplo, 20 números primos
Y aparte te recuerdo que hay que rellenar ListaPrimos() con números primos...
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa