elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 23:34  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderador: Littlehorse)
| | |-+  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 389 veces)
W0lFy


Desconectado Desconectado

Mensajes: 543



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

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
Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
If num2 + num1 > max Then
   If (num1 + (num2 Mod (max - min))) Mod (max - min) < 31 Then
       sumaNumSucesion = num1 - ((max - min) - num2)
   Else
       sumaNumSucesion = (num1 + (num2 Mod (max - min))) Mod (max - min)
   End If
Else
   sumaNumSucesion = num1 + num2
End If
End Function
 
Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
Dim numAux As Integer
If num1 - (num2 Mod (max - min)) < min Then
   restaNumSucesion = num1 - 31 + max - (num2 Mod (max - min))
 
Else
   restaNumSucesion = num1 - num2 Mod (max - min)
End If
End Function

me gustaria dejarlas asi:

Código
Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
restaNumSucesion=?????????
end function
 
Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
sumaNumSucesion=?????????
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: 543



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

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
Function SumaNumSucesion2(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
   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))
End Function


En línea

K@NuT0
[Case]


Desconectado Desconectado

Mensajes: 385



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

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 (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


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

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
Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
If num2 + num1 > max Then
   If (num1 + (num2 Mod (max - min))) Mod (max - min) < 31 Then
       sumaNumSucesion = num1 - ((max - min) - num2)
   Else
       sumaNumSucesion = (num1 + (num2 Mod (max - min))) Mod (max - min)
   End If
Else
   sumaNumSucesion = num1 + num2
End If
End Function
 
Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer, max As Integer) As Integer
Dim numAux As Integer
If num1 - (num2 Mod (max - min)) < min Then
   restaNumSucesion = num1 - 31 + max - (num2 Mod (max - min))
 
Else
   restaNumSucesion = num1 - num2 Mod (max - min)
End If
End Function

me gustaria dejarlas asi:

Código
Function restaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
restaNumSucesion=?????????
end function
 
Function sumaNumSucesion(num1 As Integer, num2 As Integer, min As Integer,max as integer)
sumaNumSucesion=?????????
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

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
W0lFy


Desconectado Desconectado

Mensajes: 543



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

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
Function SumaNumSucesion(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 condicion5 As Integer
   Dim calculo As Integer
   Dim calculo2 As Integer
   Dim calculo3 As Integer
   Dim calculo4 As Integer
   condicion = Int(num1 / (max - min + 1)) ' 0 si num1 es mayor de 224
   condicion2 = Int(num2 / (max - min + 1)) ' 0 si num2 es mayor de 224
   condicion3 = Int((num1 + num2) / (max + 1)) '0 si num2+num1 es mayor de 255
   condicion4 = Int((num1 + (num2 Mod (max - min + 1))) / (max + 1)) '
   condicion5 = ((1 - Int(num1 / (max - min + 1))) * (Int(num2 / (max - min + 1))) + (Int(num1 / (max - min + 1))) * (1 - Int(num2 / (max - min + 1))))
   calculo = num1 + num2
   calculo2 = num1 - (max - min + 1 - num2)
   calculo3 = (num1 + (num2 Mod (max - min + 1))) Mod (max - min + 1)
   calculo4 = num1 + (num2 Mod (max - min + 1))
   SumaNumSucesion = (calculo) * (1 - condicion3) + ((calculo2) * (condicion5) + ((calculo3) * (condicion4) + (calculo4) * (1 - condicion4)) * (1 - condicion5)) * (condicion3)
End Function
 

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
Public Function jrgStringToString(cadena As String) As String
   Dim i As Integer
   cadenaAux = ""
   Dim num1 As Integer
   Dim num2 As Integer
   Dim min As Integer
   Dim max As Integer
   min = 31
   max = 254
   Dim caracter1, caracter2 As String
   Dim mitad As Long
   mitad = Len(cadena) / 2
   For i = 1 To mitad Step 1
       caracter1 = Mid(cadena, i, 1)
       caracter2 = Mid(cadena, i + Len(cadena) / 2, 1)
       num1 = Asc(caracter1)
       num2 = Asc(caracter2)
       cadenaAux = cadenaAux & Chr(restaNumSucesion(num1, num2, min, max))
   Next
   jrgStringToString = cadenaAux
End Function
 

Código
 
Public Function stringToJrgString(cadena As String) As String
Dim i As Long
Dim max As Integer
Dim min As Integer
Dim num1 As Integer
Dim num2 As Integer
Dim cadenaAux As String
Dim cadenaAux2 As String
Dim NumAleatorio As Integer
min = 31
max = 254
cadenaAux = ""
cadenaAux2 = ""
For i = 1 To Len(cadena)
    NumAleatorio = aleatorio(Mid(cadena, i, 1))
    num1 = Asc(Mid(cadena, i, 1))
    cadenaAux = cadenaAux & Chr(SumaNumSucesion(num1, NumAleatorio, min, max))
    cadenaAux2 = cadenaAux2 & Chr(NumAleatorio)
Next
stringToJrgString = cadenaAux & cadenaAux2
End Function
 
 

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 285 Último mensaje 9 Mayo 2006, 20:46
por Ironhorse
simplificar condiciones anidadas ???
Programación General
skan 10 4,121 Último mensaje 11 Noviembre 2007, 18:28
por skan
Simplificar este codigo...
Programación C/C++
eipock 2 389 Último mensaje 11 Noviembre 2008, 11:37
por eipock
sacar funcion matematica de un exe
Ingeniería Inversa
mscofield 3 1,461 Último mensaje 28 Marzo 2010, 16:25
por mscofield
Algoritmo para simplificar el hacker a wpa2-psk
Hacking Linux/Unix
diverticulitis 2 511 Último mensaje 22 Mayo 2012, 16:23
por Saberuneko
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines