Saludos estimados programeros, A continuación les posteo un pequeño sistema que hace conversiones entre bases en el sistema de numeración. Básicamente lo que hace es transformar un numero de cualquier base a cualquier base. Es posible que alguien pueda interesarse. Aquí os dejo el fuente del sistema y un link para descarga. Está desarrollado en Visual Basic .NET 2008. Saludos. ======================================== El ejecutable: Descargar El fuente: Descargar ======================================== Public Class Form1 Dim Result As String Dim Enterprise As String = "Totem Software Developers" Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click Try Result = "" If ValidateBases(Me.txtBaseOrigen.Text.Trim) And ValidateBases(Me.txtBaseDestine.Text.Trim) Then If ValidateNumber(CInt(Me.txtBaseOrigen.Text.Trim), Me.txtNumberToConvert.Text.Trim) Then If CInt(txtBaseOrigen.Text) = 10 Then Me.lblResult.Text = ConvertToAnotherBase(CInt(Me.txtNumberToConvert.Text.Trim), CInt(Me.txtBaseDestine.Text.Trim)) ElseIf CInt(txtBaseDestine.Text) = 10 Then Me.lblResult.Text = ConvertToBase10(Me.txtNumberToConvert.Text.Trim, CInt(Me.txtBaseOrigen.Text.Trim)) Else Me.lblResult.Text = ConvertToAnotherBase(CInt(ConvertToBase10(Me.txtNumberToConvert.Text.Trim, CInt(Me.txtBaseOrigen.Text.Trim))), CInt(Me.txtBaseDestine.Text.Trim)) End If Else MsgBox("El numero a convertir no pertenece a la base origen. Por favor, verifíquelo.", MsgBoxStyle.Information, Enterprise) End If Else Me.lblResult.Text = "" End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Information, Enterprise) End Try End Sub Function ValidateNumber(ByRef BaseOrigen As Integer, ByRef Numero As String) As Boolean For i As Integer = 0 To Numero.Length - 1 If CInt(GetDecimalEqual(Numero.Substring(Numero.Length - 1 - i, 1), BaseOrigen)) >= BaseOrigen Then Return False End If Next Return True End Function Function ValidateBases(ByRef Itm As Object, Optional ByVal TextToShowOnError As String = "Verifique los valores ingresados") As Boolean Try Dim vl As Integer = CInt(Itm) Catch ex As Exception MsgBox(TextToShowOnError, MsgBoxStyle.Information, Enterprise) Return False End Try Return True End Function Function ConvertToBase10(ByRef Numero As String, ByRef BaseOrigen As Integer) As String Dim Acumula As Integer = 0 If BaseOrigen >= 2 And BaseOrigen <= 16 Then For i As Integer = 0 To Numero.Length - 1 Acumula += CInt(GetDecimalEqual(Numero.Substring(Numero.Length - 1 - i, 1), BaseOrigen)) * (BaseOrigen ^ i) Next Else MsgBox("Base no soportada", MsgBoxStyle.Exclamation, Enterprise) Return "" End If Return Acumula.ToString End Function Function ConvertToAnotherBase(ByRef Dividendo As Integer, ByRef Divisor As Integer) As String If Divisor >= 2 And Divisor <= 16 Then Dim Cociente As Integer = Dividendo \ Divisor Dim Resto As String = (Dividendo - (Cociente * Divisor)).ToString GetHexaEqual(Resto, Divisor) If Cociente >= Divisor Then ConvertToAnotherBase(Cociente, Divisor) Else GetHexaEqual(Cociente, Divisor) End If Else MsgBox("Base no soportada", MsgBoxStyle.Exclamation, Enterprise) End If Return Result End Function Sub GetHexaEqual(ByRef Number As String, ByRef Base As Integer) If Base > 9 And CInt(Number) > 9 Then Select Case CInt(Number) Case 10 Result = "A" & Result Case 11 Result = "B" & Result Case 12 Result = "C" & Result Case 13 Result = "D" & Result Case 14 Result = "E" & Result Case 15 Result = "F" & Result End Select Else Result = Number & Result End If End Sub Function GetDecimalEqual(ByRef Number As String, ByRef Base As Integer) As String If Base > 9 Then Select Case Number Case "A" Return "10" Case "B" Return "11" Case "C" Return "12" Case "D" Return "13" Case "E" Return "14" Case "F" Return "15" End Select End If Return Number End Function End Class
Advertisement
