Conversiones de Base / Conversiones en Sistemas de Numeración

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

Acerca de fabricioleon

Ingeniero de Sistemas
Esta entrada fue publicada en Programacion ASP.Net VB. Guarda el enlace permanente.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s