duda con calculos en vb y porcentaje

Iniciado por Tengu, 18 Mayo 2009, 21:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

Tengu

hola a todos.., tengo una duda de calculo en vb,...

resulta que estoy desarrollando una aplicacion y me faltaria la forma de sacar el porcentaje de parecido de un numero a otro. es decir:


supongamos que tengo un numero "marcador" que puede ser un numero entero desde  cero (incluido) en adelante.
el cual llamaremos "A"

Y como regla repetitiva el programa generaria numeros al azar (tambien 0 o positivos enteros) , y a este valor lo llamaremos "B"


entonces como hariamos para saber en Porcentaje del acercamiento de este numero B  a mi marcador A ????


si alguien tiene un razonamiento logico , funcional que pueda llevarse a vb, se los agradezco.. xk yo ya me enrede jaj. y a veces cuando miras tanto una cosa terminas por no ver absolutamente nada..


Gracias




Encuentros por Video y Chat !!

Karcrack

Porcentaje de acercamiento?

Que pretendes obtener teniendo solo dos números?...

Puedes saber cuantas veces A es mas grande que B o viceversa..

Pero no entiendo que es el porcentaje que quieres...

:-\
Citar(A/B)*100

Tengu

mira, el temas es asi.

A se genera al cargarce la aplicacion(o sea que yo no conozco el valor)

y B se genera despues aleatoriamente

Suponiendo que A= 18

entonces... lo que quisiera saber es si B fuera (19) como podria yo saber si estoy cerca y como podria adaptarlos datos para mostrarlos a modo de porcentaje. por ejemplo si


A=18 y b = 19 => los numeros se parecen en un %v 99.999  ya que A es casi = a B...


Seria algo como calcular la distancia entre dos puntes en la ordenada X y cada vez que B este mas cerca de A entonces estara siendo mas parecido, hasta llegar a ocupar el mismo punto cunado A = B.


Se entiende??
Es que toy complicado para explicarlo...   :P

Encuentros por Video y Chat !!

Tengu

Dim a As String
Dim b As String
Dim distanciaayb As String
Private Sub Command1_Click()
If a < b Then
distanciaayb = Val(b) - Val(a)
Else
distanciaayb = Val(a) - Val(b)
End If
MsgBox distanciaayb
End Sub


de esta manera sale la distancia ente A y B  pero como puedo aumentar el porcentaje proporcianolmente a medida que la distancia disminuye hasta llegar a distancia CERO porcentaje CIEN ???

Encuentros por Video y Chat !!

BlackZeroX

#4
NO SE SI LE ATINE O NO PERO AUN ASI TE DIGO LO QUE TE ENTIENDO

supongamos que se genero un numero en "X" y uno "Y"

rectifico cual es el mayor y con base a esto lo mando a una funcion donde el mayor el es 100% y el menor es una parte de ese porcentaje

es decir

A=19
B=50

por decir algo

Código (vb) [Seleccionar]

Private Sub Form_Load()
'juega con estos valores
a = 50
b = 49
'Fin valores
If a > b Then
res = Porcentaje(a, b)
ElseIf b > a Then
res = Porcentaje(b, a)
Else
res = 100
End If
MsgBox res
End Sub
Function Porcentaje(ByVal ValMax As Integer, ByVal valMin As Integer) As Long
     Porcentaje = (valMin * 100) / ValMax
End Function



Edito-------------------------


Código (vb) [Seleccionar]

Option Explicit
Private Sub Form_Load()
Dim a As Integer
Dim b As Integer
Dim res As String
a = 19
b = 50
res = IIf(a > b, Porcentaje(a, b), IIf(b > a, Porcentaje(b, a), 100))
MsgBox res
End Sub
Function Porcentaje(ByVal ValMax As Integer, ByVal valMin As Integer) As Long
     Porcentaje = (valMin * 100) / ValMax
End Function
The Dark Shadow is my passion.

Tengu

sisi, es eso lo que busco, aunk tu code tiene un pekeño fallo

ya que cuando

A= 19
B = 1

daun resultado de "5", siende que la distancia entre A y B = 18, y en iguales condiciones cuando

A=19
B = 37 .............  Distancia tambien es 18

pero arroja un resultado de 51 el cual es diferente y no confitrma la formula.

Pero igualmente me ayudo a razonar y lo solucione de una manera un pco sucia y chapucera pero solucion al fin. Dios bendiga a nuestro amado IF

Private Sub Form_Load()
a = "18"
b = "6"
End Sub


Private Sub Command1_Click()
If Not a < b Then
distanciaayb = Val(a) - Val(b)
Else
distanciaayb = Val(b) - Val(a)
End If

MsgBox distanciaayb

If distanciaayb < 100 Then

If Not distanciaayb = "0" Then
Porcentaje = Val("100") - Val(distanciaayb)
Else
Porcentaje = "0"
End If

MsgBox "porcentaje   %  " + Porcentaje
Else
MsgBox "la Distancia es muy Grande .,el resultado no es alentador"
End If

End Sub



aunk  se puede mejorar pero lalogica ya esta plsmada.


Muchas Gracias.!!!

Encuentros por Video y Chat !!

BlackZeroX

#6
no hay fallo en el trozo que plasme en si lo que hice fue tomar en consideración de 0 a X siendo 0 = 0% y X = 100% jamas tome diferencial alguno

graficamente hablando tome como referencia el Numero mayor como 100% y el numero cero como 0% entonces


0------------------18
0------------------------------------------------------------100

= 18% casi igual y de diferencia solo se restaria ese 18% el 100% que seria 82% pero da igual no es lo que pedias...!¡


A=19
B=1

1= 5% de 19 por ende es 5% igual de 19 y 95% diferente

P.D.: creo que deberias tranajar con regla de 3 en lugar de siempre esperar un numero menor a 100,

Si el la diferencia de A y B = 100 dice que es un numero grande?...¡!

Saludos, Dulces Lunas
The Dark Shadow is my passion.

Tengu

exacto. es que para mi proyecto una diferencia entre punto y punto que supere los 60 es gigante y ya no sirve , y en una regla de tres


a............................100 %
b............................X %

no funcionaria pues los numeros se generan aleatoriamente y supongamos que


A = 18

si B fuera 75 , seria inaceptable para mi proyecto que fuera un % 416.66  se mejante.

xk por logica si es un % 100 significa que a = B . entonces la regla de tres simple es inaceptable

y ni hablemos Si A = 0 xk hay seria un % 75.000 ja.


Gracias por toda tu coolaboracion Saludos Buenas noches

Encuentros por Video y Chat !!

‭‭‭‭jackl007

#8
El codigo seria asi:
Código (vb) [Seleccionar]
Dim A, B As Integer

A = 15 'Nmero al azar
B = 12 'Numero con el que se compara
'Tienes dos puntos y quieres saber que tanto se parecen los valores de los mismos: A, B; asi que comparamos A con respecto a B

MsgBox Str((A * 100) / B) & "%"
'El resultado es 125%, y tiene logica, pues el numero 15 se aleja de 12, es como aumentar o disminuir un zoom
' a un documento PDF (salvo que aqui es inverso)
'Si el numero A fuese menor que B, entonces da el porcentaja de aproximacion o acercamiento (que tanto se parece A a B)



Por cierto si vas a hacer esto:

If Not A < B Then
distanciaayb = Val(A) - Val(B)
Else
distanciaayb = Val(B) - Val(A)
End If


Para eso existe la funcion ABS: Valor absoluto
Código (vb) [Seleccionar]
distanciaayb =  Abs(A - B)


Explica un poco más del problema, a lo mejor lo correcto es otra cosa...