Visual Basic - Ayuda

Life is soft - evento anual de software empresarial
 
Vista:

Ayuda

Publicado por nahomy (4 intervenciones) el 17/11/2008 16:47:33
Hola, necesito una ayuda porfavor, .
Mi problema es el siguiente, tengo la siguente formula que pasa cualqueir numero a un numero decimal la cual es:

N=Cn X^n + Cn-1 X^n-1 + ....+ C0 X^0

Un ejemplo de esa es:

1) (1011)2 = (11)10
el numero binario 1011 en decimal es 11 segun la formula

N = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1*2^0 =

N = 8+0+2+1

N = 11

Hago todo eso para que me puedan entender y si no deberia de hacerlo disculpenme porfavor.
Bueno lo que necesito es hacer un proyecto en visual que haga eso y no puedo que tengo que poner para que cuando corra el programita en visual aplique esa formula.
Gracias de antemanos y disculpen si no era esa la forma en que tenia que explicarme pero es la primera pregunta que hago GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda

Publicado por nahomy (4 intervenciones) el 17/11/2008 18:04:54
La formula pasa cualqueir numero introducido a decimal. (En papel y lapiz lo hace)
yo quiero pasar un numero no importa q sea binario, hexadecimal, octar, etc cualquiera pero usando esa formula
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda

Publicado por pacopaz (173 intervenciones) el 18/11/2008 18:22:04
Supuestos:
Text1 es el componente que recibirá el número a ser convertido.
Text2 es la base del número que se convertirá.
Text3 es donde se mostrará el resultado
Command1 es el botón que accionará el cálculo.

Private Sub Command1_Click()

Dim Res As Long
Dim i, j As Integer

Res = 0
For i = Len(Text1.Text) To 1 Step -1
j = Len(Text1.Text) - i + 1
If IsNumeric(Mid(Text1.Text, i, 1)) Then
Res = Res + (Exp(Log(CInt(Text2.Text)) * (j - 1)) * CInt(Mid(Text1.Text, i, 1)))
Else
Res = Res + (Exp(Log(CInt(Text2.Text)) * (j - 1)) * (Asc(UCase(Mid(Text1.Text, i, 1))) - 55))
End If
Next i

Text3.Text = CStr(Res)

End Sub

Res es donde se guardará la sumatoria de las iteraciones. La combinación de Exp y Log es por que no hay una forma directa de elevara alguna potencia algún número, sin embargo, por definición matemática e(Ln(x)*y) es igual a x^y, así que se ocupa para obtener la base de cada iteración.
Para los números con bases mayores a 10 se esperan caractéres cuyo origen sea 'a' o 'A'. Para no hacer distinción, por eso se hace la convesión de UCase.

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda

Publicado por pacopaz (173 intervenciones) el 18/11/2008 18:34:58
Fe de ratas (ya sé que es fe de erratas, pero se parece tanto...)

Consultando con un par de compañeros, me aclaran que efectivamente si hay forma de potenciar un número vía ^. Así la soución quedaría:

Private Sub Command1_Click()

Dim Res As Long
Dim i, j As Integer

Res = 0
For i = Len(Text1.Text) To 1 Step -1
j = Len(Text1.Text) - i + 1
If IsNumeric(Mid(Text1.Text, i, 1)) Then
Res = Res + (CInt(Text2.Text) ^ (j - 1)) * CInt(Mid(Text1.Text, i, 1))
Else
Res = Res + (CInt(Text2.Text) ^ (j - 1)) * (Asc(UCase(Mid(Text1.Text, i, 1))) - 55)
End If
Next i

Text3.Text = CStr(Res)

End Sub

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias

Publicado por nahomy (4 intervenciones) el 20/11/2008 01:37:46
Sip, si me funciono muchas gracias. Le hago un par de cambios y esta de mil maravillas me dan los datos que deveria de darme. Hay un par de cosas q no entiendo pero con eso ya me ayudastes mucho Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar