domingo, 24 de mayo de 2015

Separar números y letras de una cadena | Visual Basic 6

Muy buenas a todos! 
En esta ocasión os traigo un pequeño reto sacado de un foro de hacking llamado elhacker.net.
Al ver un post con una serie de retos, algunos bastante interesantes, decidí llevarlos a cabo, al menos la mayoría, ya que nos proporcionará unos conceptos básicos de programación en Visual Basic 6.

Los requisitos para poder entender que estamos haciendo es tener unos conceptos previos sobre programarción en Visual Basic 6.

Por último, antes de empezar con el reto número 1, decir que llevaré a cabo una serie de retos sacados de este mismo post ( Los más interesantes), también trataré de resolver y explicar aquellos retos que me propongáis en los comentarios tanto de esta entrada como comentarios en el Canal de youtube, pasando por los privados, entre otros. Y también aquellos retos que se me pasen por la cabeza y me resulten interesantes de resolver. 

Sin más, ¡comencemos con este reto!

Primero explicaré en que consiste este reto: 
Necesitamos un programa que nos separe los números de los demás caracteres y que ademas, nos cuente cuantos caracteres en total tiene nuestra cadena. 

Comencemos por hacer una interfaz gráfica bastante simple con un simple Text, varios Label y un Command. De tal forma:


Los nombres de los Labels, del Text y del Command es el por defecto. El Label1 es el que pone "Cadena" Y el Label6 el que está justo encima del botón, donde aparecería el número de caracteres de nuestra cadena.

Antes de comenzar con el código debemos tener claro algunas funciones a utilizar, funciones como lo son: 

Len()
Mid()

Podemos clickar encima de cada una y nos llevará al msdn de Microsoft donde nos explicarán como usar cada una. Una breve explicación sería:
IsNumeric() ---> Nos devuelve un valor Boolean indicándonos si la cadena o carácter es númerico.
Len() ---> Nos devuelve el número de caracteres de una cadena.
Mid() ---> Obtenemos, de una cadena, el o los valores que queramos indicando posición y número de caracteres que queremos.

Con esta breve explicación y teniendo nociones básicas de Visual Basic 6 podremos entender perfectamente el siguiente código: 




Podemos ver que se utilizan la variable "index" para conseguir saber cuando hemos recorrido toda la cadena. 
Si os quedan dudas tras leer este post, siempre pueden ver la versión vídeo subida en mi canal de youtube
Espero os guste y os sea de ayuda el post! :D 
Si quieres puedes ayudarme compartiendo este post con tus contactos y redes sociales! Sería una gran ayuda! :D 
Si tienes algún reto que no puedes resolver o que simplemente te gustaría ver alguna otra explicación para llevarlo a cabo, no dudes en comentarlo o mandármelo por privado y tendrás un post y un vídeo dedicado a ello! :D 
¡Un saludo y nos vemos pronto! 

viernes, 8 de mayo de 2015

Sucesión Fibonacci en Visual Basic 6.

Hola muy buenas a todos!
En esta ocasión postearé una de las formas para conseguir obtener
la Sucesión de Fibonnacci (Wikipedia) en el lenguaje de programación
Visual Basic 6.
Primero comenzaré a explicar como poder obtenerla y más adelante os dejaré el código,
si eres una persona bastante impaciente y solo buscas que te lo den todo hecho puedes ir al final 
del post y encontrarás dicho código.
Si por lo contrario, eres una persona que lo que pretende es entender como se hace cada cosa
y prefiere valerse por si mismo dentro de "x" años, te aconsejaría leer el post entero. 
Sin más rodeos, comencemos.

Lo primero que debemos pensar y saber es como es la Sucesión de Fibonacci, en que se basa,
tal y como hemos comprobado al leer Wikipedia, espero que le hayáis echado un ojo, dicha
Sucesión se consigue al hacer la suma de los dos números anteriores para conseguir el próximo número. 
¿Cómo conseguiríamos esto? 
Bueno, si se busca por la red, hay múltiples formas de hacerlo aunque si nos fijamos, la gran  mayoría lo realizan usando un bucle "FOR".
Inciso: Yo antes de buscar como obtenerla, pensé en como podría conseguirla por mi mismo por ello no lo realizaré con el bucle "FOR" si no con el bucle "WHILE". Obviamente al ser otro camino, tiene diferentes cosas. Pero vamos a ello! ;) 
Primero lo que haremos será crear nuestro formulario: 


Quedaría algo como lo de arriba. 
Como vemos, tenemos un TextBox que nos indica añadir una secuencia, en este caso vamos a conseguir obtener todos los números de la sucesión  que nosotros queramos! Por ejemplo imagina que solo quieres 20 números, pues pones solo 20 y si quieres 10 pues 10..! ;)  (De todas formas, en cuanto al número de secuencias hay un error que os explicaré abajo como forma de "reto" para que busquéis la forma de arreglarlo y así os comáis un poco el coco. Será muy fácil! ;))
A los objetos los llamaremos de la siguiente manera: 

TexBox grande -------------> Text1
TextBox de la secuencia -------------> Text2
Al boton "Fibonacciar." -------------> Command1

Al Text1 tendremos que añadirle las siguientes propiedades en la zona de "propiedades" 

MultiLine -------------> True
ScrollBars -------------> Vertical



Tras realizar la interfaz gráfica, vamos a ponernos vamos a la obra con el código que es lo que nos interesa. Primero debemos crear una matriz, ¿Porqué? Bueno, nosotros lo que queremos hacer es ir cogiendo los dos últimos números que van quedando tras la suma de los dos anteriores, por tanto, la mejor opción, pese a que hay otras, es creando una matriz y comenzar a manejarla (Si no sabes como manejar una matriz, busca en la red y lee sobre Matrices en VB6 dinámicas y estáticas). En este caso utilizaremos una matriz dinámica que le cambiaremos el valor según nos convengan más o menos números.
Pensad en como podría ser un código primitivo que nos de al menos la suma de dos números y lo almacene en una matriz o en un TextBox, en algún sitio, donde sea...
Recordad que para ello usaremos variables. Se nos hará mas cómoda la existencia... ;)
Vale, una vez ahí, pensad que deberíais hacer para conseguir que la matriz o el TextBox donde se almacenó el resultado, se sume con el segundo número utilizado en la suma...

¡Correcto! 
Lo que debemos hacer es sumar las variables que contengan al segundo número y al resultado de la suma de los dos primeros números. 
Hasta aquí perfecto, pero y una vez que tenemos el trabajo hecho, ¿como podemos obtener todos los resultados de la Sucesión de Fibonacci sin tener que crear, manualmente, una variable para cada resultado?
Si pensamos un poco, las variables son datos almacenados en memoria en tiempo de ejecución, nosotros podemos cambiar el valor de estas. Pues vamos a ello, lo que debemos hacer es que cada vez que se sumen dos números, a la variable del primero se le añada el valor del segundo y a la variable del segundo el valor del resultado de la suma anterior.. Y así sucesivamente! 
Yo para hacerlo utilicé el bucle "WHILE" Como podemos ver acontinuación.
 Aunque está un poco cambiado con respecto a la explicación pues que en esta, yo me he centrado en explicarlo en el caso de usar cualquier cosa y en la aplicación me centré en hacerlo con matrices. 
Al hacerlo con matrices, como se puede comprobar, lo único que hice fue incrementar en 1 el valor de cada "variable" para conseguir que cada vez que pasase por ahí, cogiesen los números correctos. Para incrementarlos, como se puede comprobar, utilicé un bucle "WHILE". 
Y por último, solo debemos hacer que cada resultado se muestre uno tras otro en el Text1 y así, conseguir la Sucesión de Fibonacci! 
El código tiene algunos comentarios para poder ser mejor entendido.
Código: 
































El resultado sería algo parecido a esto:



Espero que entendáis la idea principal de la aplicación y podáis modificarlo a vuestro gusto consiguiendo de manera similar otro tipo de retos que tendréis que solucionar por vuestra cuenta! ;) 
Por cierto, hablando de retos, como os dije antes, el programa tiene un "Error" que produce un desbordamiento, esto se debe a que si introducimos un número mayor al soportado, la memoria se desborda. Por ejemplo, intentad introducir 47 de secuencia y veréis que todo está correcto, sin embargo, si tratáis de obtener una secuencia de 48, ocurre un desbordamiento. Esto se debe a que algo en las variables está mal. Espero que encontréis el error! Es un reto bastante fácil si tenemos unos conocimientos mínimos sobre Visual Basic 6 
Espero vuestras soluciones!! :D 
Si tenéis alguna duda no dudéis en comentar! 
¡Un saludo a todos!