elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Simplificar Función Matematica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Simplificar Función Matematica  (Leído 3,113 veces)
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Simplificar Función Matematica
« en: 5 Enero 2012, 09:59 am »

Hola muy buenas:

me gustaría simplificar estas dos funciones a una linea sola, he estado pensando y tiene que haber algun algoritmo que engoble a todas las condiciones.El ejercicio es sencillo de entender:

Tenemos numeros que estan coprendidos en el rango 31..254

aqui os dejo las funciones:

estan en VB
Código
  1. Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
  2. If num2 + num1 > max Then
  3.    If (num1 + (num2 Mod (max - min))) Mod (max - min) < 31 Then
  4.        sumaNumSucesion = num1 - ((max - min) - num2)
  5.    Else
  6.        sumaNumSucesion = (num1 + (num2 Mod (max - min))) Mod (max - min)
  7.    End If
  8. Else
  9.    sumaNumSucesion = num1 + num2
  10. End If
  11. End Function
  12.  
  13. Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
  14. Dim numAux As Integer
  15. If num1 - (num2 Mod (max - min)) < min Then
  16.    restaNumSucesion = num1 - 31 + max - (num2 Mod (max - min))
  17.  
  18. Else
  19.    restaNumSucesion = num1 - num2 Mod (max - min)
  20. End If
  21. End Function

me gustaria dejarlas asi:

Código
  1. Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
  2. restaNumSucesion=?????????
  3. end function
  4.  
  5. Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
  6. sumaNumSucesion=?????????
  7. end function

para mi es mas un reto Matemático, no consigo el algoritmo que engoble a todas las condiciones, he estado jugando con mod y div(entera) y an asi no logro encontrar el algoritmo. Un saludo Espero haberme explicado bien. Gracias!! ::)


En línea

K@NuT0
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Simplificar Función Matematica
« Respuesta #1 en: 5 Enero 2012, 12:38 pm »

Bueno para los que os interese.... aunque solo es orgulllo propio aqui dejo la funcion Suma y mas tarde hare la de resta:

Código
  1. Function SumaNumSucesion2(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
  2.    SumaNumSucesion2 = (num2 + num1) * (1 - Int((num1 + num2) / (max + 1))) + ((num1 - (224 - num2)) * (Int((num1 + (num2 Mod 224)) / (max + 1))) + ((num1 + (num2 Mod (max - min + 1))) Mod (max - min + 1)) * (1 - Int((num1 + (num2 Mod (max - min + 1))) / ((max - min + 1) + 1)))) * Int((num1 + num2) / (max + 1))
  3. End Function


En línea

K@NuT0
[Case]


Desconectado Desconectado

Mensajes: 474



Ver Perfil WWW
Re: Simplificar Función Matematica
« Respuesta #2 en: 5 Enero 2012, 20:01 pm »

A mi me interesa este tipo de retos  ;D, pero no se nada de Visual Basc, puro Java.

La función sumaNumSucesion que es lo que hace en si?.
Supongo que con una pequeña explicación me bastaría.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Simplificar Función Matematica
« Respuesta #3 en: 6 Enero 2012, 08:36 am »

Hola muy buenas:

me gustaría simplificar estas dos funciones a una linea sola, he estado pensando y tiene que haber algun algoritmo que engoble a todas las condiciones.El ejercicio es sencillo de entender:

Tenemos numeros que estan coprendidos en el rango 31..254

aqui os dejo las funciones:

estan en VB
Código
  1. Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
  2. If num2 + num1 > max Then
  3.    If (num1 + (num2 Mod (max - min))) Mod (max - min) < 31 Then
  4.        sumaNumSucesion = num1 - ((max - min) - num2)
  5.    Else
  6.        sumaNumSucesion = (num1 + (num2 Mod (max - min))) Mod (max - min)
  7.    End If
  8. Else
  9.    sumaNumSucesion = num1 + num2
  10. End If
  11. End Function
  12.  
  13. Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
  14. Dim numAux As Integer
  15. If num1 - (num2 Mod (max - min)) < min Then
  16.    restaNumSucesion = num1 - 31 + max - (num2 Mod (max - min))
  17.  
  18. Else
  19.    restaNumSucesion = num1 - num2 Mod (max - min)
  20. End If
  21. End Function

me gustaria dejarlas asi:

Código
  1. Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
  2. restaNumSucesion=?????????
  3. end function
  4.  
  5. Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
  6. sumaNumSucesion=?????????
  7. end function

para mi es mas un reto Matemático, no consigo el algoritmo que engoble a todas las condiciones, he estado jugando con mod y div(entera) y an asi no logro encontrar el algoritmo. Un saludo Espero haberme explicado bien. Gracias!! ::)

Pero dinos que es lo que haces realmente...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
W0lFy


Desconectado Desconectado

Mensajes: 551



Ver Perfil WWW
Re: Simplificar Función Matematica
« Respuesta #4 en: 3 Febrero 2012, 10:31 am »

Perdon por retrasarme. Siento revivir temas antiguos no he tenido mucho tiempo de pasarme por el foro. Os pongo la función y os digo que hace:


Código
  1. Function SumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
  2.    Dim condicion As Integer
  3.    Dim condicion2 As Integer
  4.    Dim condicion3 As Integer
  5.    Dim condicion4 As Integer
  6.    Dim condicion5 As Integer
  7.    Dim calculo As Integer
  8.    Dim calculo2 As Integer
  9.    Dim calculo3 As Integer
  10.    Dim calculo4 As Integer
  11.    condicion = Int(num1 / (max - min + 1)) ' 0 si num1 es mayor de 224
  12.    condicion2 = Int(num2 / (max - min + 1)) ' 0 si num2 es mayor de 224
  13.    condicion3 = Int((num1 + num2) / (max + 1)) '0 si num2+num1 es mayor de 255
  14.    condicion4 = Int((num1 + (num2 Mod (max - min + 1))) / (max + 1)) '
  15.    condicion5 = ((1 - Int(num1 / (max - min + 1))) * (Int(num2 / (max - min + 1))) + (Int(num1 / (max - min + 1))) * (1 - Int(num2 / (max - min + 1))))
  16.    calculo = num1 + num2
  17.    calculo2 = num1 - (max - min + 1 - num2)
  18.    calculo3 = (num1 + (num2 Mod (max - min + 1))) Mod (max - min + 1)
  19.    calculo4 = num1 + (num2 Mod (max - min + 1))
  20.    SumaNumSucesion = (calculo) * (1 - condicion3) + ((calculo2) * (condicion5) + ((calculo3) * (condicion4) + (calculo4) * (1 - condicion4)) * (1 - condicion5)) * (condicion3)
  21. End Function
  22.  

Código:

Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
    Dim condicion As Integer
    Dim condicion2 As Integer
    Dim condicion3 As Integer
    Dim condicion4 As Integer
    Dim calculo As Integer
    Dim calculo2 As Integer
    Dim calculo3 As Integer
    Dim calculo4 As Integer
    condicion = Int((num1 - num2 + (max - min + 1)) / (max + 1)) 'num 1 - num2 >31 = 1 si cierto
    condicion2 = Int(num2 / (max - min + 1)) ' 0 si es menor de 224
    condicion3 = Int(((num1 - (num2 Mod (max - min + 1)) + (max - min + 1))) / (max + 1))
    calculo = num1 - num2
    calculo2 = max + 1 - (num2 - (num1 - min))
    calculo3 = num1 - (num2 Mod (max - min + 1))
    calculo4 = max + 1 - (num2 Mod (max - min + 1) - (num1 - min))
    restaNumSucesion = (1 - condicion2) * ((calculo) * (condicion) + (calculo2) * (1 - condicion)) + (condicion2) * ((condicion3) * (calculo3) + (1 - condicion3) * (calculo4))
End Function


Bueno Decidí meterlo en variables para que el código fuera mas legible.
Estuve realizando un algoritmo de cifrado de cadenas de texto y se me ocurrio la idea de realizar los siguiente( no se si ya existirá en la actualidad, supongo que si...)


Código
  1. Public Function jrgStringToString(cadena As String) As String
  2.    Dim i As Integer
  3.    cadenaAux = ""
  4.    Dim num1 As Integer
  5.    Dim num2 As Integer
  6.    Dim min As Integer
  7.    Dim max As Integer
  8.    min = 31
  9.    max = 254
  10.    Dim caracter1, caracter2 As String
  11.    Dim mitad As Long
  12.    mitad = Len(cadena) / 2
  13.    For i = 1 To mitad Step 1
  14.        caracter1 = Mid(cadena, i, 1)
  15.        caracter2 = Mid(cadena, i + Len(cadena) / 2, 1)
  16.        num1 = Asc(caracter1)
  17.        num2 = Asc(caracter2)
  18.        cadenaAux = cadenaAux & Chr(restaNumSucesion(num1, num2, min, max))
  19.    Next
  20.    jrgStringToString = cadenaAux
  21. End Function
  22.  

Código
  1.  
  2. Public Function stringToJrgString(cadena As String) As String
  3. Dim i As Long
  4. Dim max As Integer
  5. Dim min As Integer
  6. Dim num1 As Integer
  7. Dim num2 As Integer
  8. Dim cadenaAux As String
  9. Dim cadenaAux2 As String
  10. Dim NumAleatorio As Integer
  11. min = 31
  12. max = 254
  13. cadenaAux = ""
  14. cadenaAux2 = ""
  15. For i = 1 To Len(cadena)
  16.     NumAleatorio = aleatorio(Mid(cadena, i, 1))
  17.     num1 = Asc(Mid(cadena, i, 1))
  18.     cadenaAux = cadenaAux & Chr(SumaNumSucesion(num1, NumAleatorio, min, max))
  19.     cadenaAux2 = cadenaAux2 & Chr(NumAleatorio)
  20. Next
  21. stringToJrgString = cadenaAux & cadenaAux2
  22. End Function
  23.  
  24.  

Código:
Public Function aleatorio(caracter As String) As Integer
    Call Randomize
    Dim NumAleatorio As Integer
    NumAleatorio = Int((254 - 31) * Rnd() + 31)
    aleatorio = NumAleatorio
End Function

El código es simple lo que hace es que una cadena ya sea "hola que tal".
Recorre la cadena por caracter y va haciendo lo siguiente:

stringtoJRGstring():
cadena1resultado=asc(h) & asc(o) & asc(l) &....asc(l)
cadena2resultado=chr(asc(h)+ numAleatorio)
stringtoJRGstring=cadena1resultado & cadena2resultado


jrgstringtoString():  divide la cadena en 2 cadenas ya que será par. la primera cadena son los caracteres y la segunda cadena  pasada a ascci son los numeros que le tenemos que restar a su caracter, para que nos devuelva su verdadero valor en caracter.

PD. No se si ya existiría por algún lado, se me ocurrio y lo programe. Si teneis alguna duda preguntarme no se si me habré explicado bien. Un saludo



En línea

K@NuT0
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
simplificar dos numeros
Programación Visual Basic
erick185 2 2,038 Último mensaje 9 Mayo 2006, 20:46 pm
por Ironhorse
sacar funcion matematica de un exe
Ingeniería Inversa
mscofield 3 3,939 Último mensaje 28 Marzo 2010, 16:25 pm
por mscofield
limite de una funcion en matematica, me ayudarian?
Foro Libre
MRx86 8 3,686 Último mensaje 12 Noviembre 2016, 16:30 pm
por engel lex
control para graficar funcion matematica
Programación Visual Basic
horacio_b92 1 2,322 Último mensaje 29 Mayo 2017, 22:34 pm
por horacio_b92
Leer una función matemática [Visual Basic o C#]
Programación General
S4ms3pi0l__ 0 2,197 Último mensaje 28 Agosto 2019, 20:15 pm
por S4ms3pi0l__
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines