Conversor mirpas.
Hola amigos, bienvenidos a un nuevo tutorial en el cual vamos a crear la aplicación electrónica para realizar conversiones y que nos servirá en nuestro estudio y laboratorio de electrónica ya que crearemos funciones especiales y necesarias que iremos añadiendo poco a poco.
Como siempre empieza abriendo un nuevo proyecto de Windows Form y ponle el nombre que te gustaría. Yo no me voy a esmerar y le pondré Conversor.
Empezaremos creándo la estructura básica del conversor binario. Para ello necesitarás dos TextBox y tres RadioButton ya que estableceremos las funciones de cada tipo al pulsar sobre dicho control específico.
Puedes ordenar un poco el aspecto del formulario. Yo por ejemplo he utilizado un par de Label para poner el título a los controles y también los he incluido dentro de un GroupBox, porque más tarde añadiré nuevas funciones a la aplicación
¿Qué estamos buscando en la aplicación?, pues al igual que la calculadora de Windows, realice una transformación directa de datos al seleccionar el tipo de dato.
Obviamente la calculadora de Windows es mejor que esta aplicación ya que está diseñada por expertos, pero esta aplicación no dejará indiferente a nadie.
Convertir a binario.
En el control TextBox1 vamos a introducir un número natural del tipo Integer que sobre el que realizaremos el cálculo sobre el control Radiobutton1. Programaremos el evento CheckedChanged de dicho control para que cuando pulsemos, se ejecute su bloque de código.
Pasar un código de decimal a binario significa dividir el código decimal tantas veces entre dos hasta que el módulo de la división no se pueda dividir más y el resto de las divisiones sea menor de dos (es decir uno).
Teniéndo en cuenta los restos de la división, podemos establecer el número en binario de dicho decimal:
Así como puedes ver en el ejemplo anterior, se tiene en cuenta los restos de las divisiones; y se siguen haciendo divisiones hasta que el número sea menor de 2 (que es el sistema binario).
Para obtener finalmente el número binario se invierte el número obtenido.
Pensando la estructura.
Si utilizamos la operación de dividir el número escogido entre tantos 2 como para que el dividendo sea menor de 2, VB.NET nos mostrará el primer resultado directamente y parará el proceso para mostrar la solución.
Observa que al ejecutar e introducir un número, al pulsar el RadioButton1, mostrará el resultado de la división.
En el ejemplo anterior si realizamos 36 ÷ 2 la instrucción a = Int(a / 2)
, nos devuelve 1810 (el subíndice nos indica la base en que se encuentra el número). Y como somos muy buenos en matemáticas sabemos que el resto de la operación anterior es cero. ¿Pero dónde está el cero? Pues para ver el resto, utilizamos la instrucción Mod de la forma:
Entonces no tendremos problemas en saber cuál es el número binario del digital dos siempre ya que los operadores anteriores solo indican una única operación. Pero como los números oscilan desde el ±110 hasta el ±∞10, tendremos que hacer que la operación se repita continuamente hasta que el dividendo de la operación sea menor de dos. Eso lo haré mediante un bucle.
¿Cómo elegir el bucle ideal?Teniendo en cuenta que la aplicación debe realizar los dividendos y guardar los restos para obtener el número binario, tendremos que hacer que la aplicación siga realizándo divisiones hasta que el número introducido en el control TextBox1, sea menor de dos.
Podemos utilizar un bucle While para asignar las opciones a realizar mientras el valor del dividendo sea menor de 2.
Así puedes ver que nos sale el resultado final de la operación en el mensaje, pero no el proceso lo cual es parte de lo que queríamos hacer.
Si abrimos el código y utilizamos un punto de ruptura para el bucle While, podemos ver en cada sentencia que se cumple hasta que el valor de a no se pueda dividir más y nos dé un resto de 1.
Y este bucle es buen bucle pero necesitamos que cada valor del resto se guarde en el textbox2 para que podamos establecer el número binario en longitud de unos y ceros de acuerdo a las operaciones. Por eso mientras se aplique el bucle, vamos a repetir la operación mientras devuelva un false. Por eso, añadiremos que el valor de a sea añadido a otra variable que utilizaremos junto a la primera.
Con esto conseguimos que hasta el valor de la variable a sea mayor de dos, se repita el bucle y se asigne el valor a la variable b, todavía sin uso y se pueden dar avisos de precaución.
Así que solo nos queda asignar el valor y mostrarlo dentro del control del textbox2 para que podamos ver el número transformado en binario.
Codificación BCD.
Hasta ahora estamos representando los números como ristras de 1 y 0 sin importar la codificación. Pero todos los sistemas informáticos requieren de un sistema de codificación establecido para que el valor de los bits binarios tengan significados y puedan ser interpretados correctamente por la máquina.
En electrónica y comunicaciones es muy usado el código BCD (Binary Coded Decimal). Es una secuencia de código en donde todos los números binarios se representan agrupados en paquetes de 4 bits. Esto es importante en electrónica pues así las operaciones básicas del algebra de Boole, se pueden llevar a cabo correctamente sin que se produzcan perdida de información por inexactitudes en que normalmente se incurren con las conversiones de decimal a binario puro y de binario puro a decimal.
Si ejecutamos e introducimos un número y lo convertimos en binario, por ejemplo el número 3610, el resultado mostrado en el TextBox2 será del número 1001002 que es la traducción exacta del número decimal.
Pero ocurrirá que si ese valor lo introducimos en un ordenador, y lo procesamos para que nos devuelva la información, dicho número representará otra cosa diferente al número decimal 3610, porque precisamente, el ordenador se basa en unas reglas y codificación asociadas para el tratamiento de dicho número binario.
La codificación.La mayoría de los sistemas de numeración actuales son ponderados, es decir, cada posición de una secuencia de dígitos tiene asociado un peso. El sistema binario es, de hecho, un sistema de numeración posicional ponderado. Sin embargo, algunos códigos binarios, como el código Gray, no son ponderados, es decir, no tienen un peso asociado a cada posición. Otros, como el mismo código binario natural o el BCD natural sí lo son.
De ahí la necesidad de crear agrupaciones de bits para representar un número decimal ya que, se podría representar el número natural 110 y su binario natural sería 12, que para una máquina requeriría de mayor número de instrucciones y por tanto mayor complejidad en el hardware para saber si dicho número es un 12.
El BCD es muy común en sistemas electrónicos donde se debe mostrar un valor numérico, especialmente en los sistemas digitales no programados. Utilizando el código BCD, se simplifica la manipulación de los datos numéricos que deben ser mostrados por ejemplo en un visualizador de siete segmentos.
Así que, en el código BCD, cada dígito decimal tiene una representación binaria de un código de 4 bits. Por ejemplo el número 710 tendrá una representación natural de 1112 de tres dígitos. Mientras que en el código BCD se aplicaría un número a la izquierda del anterior (teniendo en cuenta el acarreo), para que dicho número estuviera formado por 4 bits, y daría como resultado el número 01112.
Manipulación de cadenas.
La forma más rápida de crear un código BCD y aplicarlo a la cadena obtenida en el TextBox2, es primero comprobando la longitud de contenido del propio control con la propiedad TextLength.
Dicha propiedad te devuelve el número de espacios ocupados en el control TextBox2. Y de eso nos vamos a aprovechar para saber si el número es un binario natural de cierta cantidad de espacios gracias a un condicional simple y anidando condicionales ElseIf.
Sabemos que el código ASCII se basa en 255 caracteres y una longitud de 8 bits, es decir un byte por cada caracter. Así si ponemos el número 255 en nuestro programa conversor, podremos ver como el número de bits que aparecen en binario natural son 8.
Por eso mismo podemos representar códigos ASCII en binario y cada código tendrá una longitud de 8 bits.
Así que como el número de longitud del TextBox2 depende del número de restos de divisiones por lo que se pueden dar bastantes longitudes en el control. En ete tutorial vamos a crear hasta el primer byte, es decir 8 espacios y así el programa rellenará con ceros si falta números a las izquierda.
Condicionales para la longitud.
Está claro que utilizando longitudes diferentes de manera automática, el programa debe de establecer si le faltan ceros a la izquierda para rellenarlos automáticamente. Por eso utilizamos un condicional If para el caso de que el resultado sea menor que una longitud específica. Asi en el caso de que el número ocupe solo un espacio como el decimal uno, por ejemplo, rellene con 3 ceros a la izquierda:
Entonces cuando el programa detecte que la longitud del texto es solo de un número, se insertarán tres ceros más a la izquierda para que se asemeje el código al BCD.
Como alternativa, a la longitud de un espacio, si el número devuelto fuese de dos espacios, habría que añadir dos ceros en lugar de tres. Como no quiero cerrar la condición, utilizo una instrucción ElseIf para seguir añadiendo condiciones en nuestro programa.
Para la siguiente condición, necesitaremos añadir un único cero y en la cuarta condición (en la que el TextBox2 ocupa cuatro espacios, no se necesitan añadir más ceros.
Este primer código afecta hasta el número 1510ya que se rellenan los números con ceros a la izquierda en grupos de cuatro bits.
Pero, ¿qué pasa cuando la longitud del control llega a los cuatros dígitos? pues que hay que especificarselo al programa, porque para las siguientes condiciones como cuando ocupe, cinco, seis o siete espacios
Se pueden hacer todas las acciones que se deseen y poner tantos números como quieras y separaciones de código BCD o por cada byte de números o cada doce grupos. Eso será algo que te dejo a tu elección. Yo por mi parte ya te he puesto en rumbo a crear una buena aplicación y podrás terminarla y ajustarla a tus deseos técnicos.
Espero que te haya servido de algo y espero volver a verte en siguientes vídeos y tutoriales. Gracias.