martes, 27 de abril de 2010

APLICACION PARA INVERTIT NUMEROS (NO CADENAS) USANDO PRG

Hola blogers!


Hace tiempo que no escribo, pero que buena manera de empezar ayudando a mis compañeros programadores de la universidad, y para gusto de ustedes tambien se los pongo aca, una aplicación para invertir números!.





Para emepzar, yo he publicado un articulo para poder invertir cadenas en este mismo blog. Esto tambien lo usamos para invertir numeros (el numero es transformado a cadena, y listo!) Sin embargo, una vez un Ingeniero me dijo que "invirtiera el número sin pasarlo a String".

Entonces me puse a pensar "¿De que manera podría separar los números para que pueda extraer cada digito e invertirlo"

Con cadena unicamente agarrabas por medio de un indice y luego ibas aggarando cada caracter, es decir que si tenemos "1234" como String, el indice de la cadena empieza con "0" hasta "3" entonces tenemos que

indice 0 =  1
inidice 1 = 2
etc...

Y luego solo se sumaba como cadena según el orden que quieres... al final te quedaba "4321". Da click AQUI para ver el articulo completo.

Ya que con un número entero no se puede obtener indices, entonces tendremos que recurrir a la herramienta poderosa por naturaleza de un programador y que muchos dejamos a un lado..... las matemáticas.

Si, así como lo leen.... LAS MATEÁTICAS ES LA SOLUCIÓN.

Emprendamos con nuestra aplicación de FoxPro 9.0, y creamos un nuevo programa o "program" y tendremos esto:



Una vez que tengamos nuestra ventana, guardemolo con el nombre "invertir.prg"

Ahora, lo que necesitamos primero es que nos capture el número, para eso utilizaremos la funcion "INPUTBOX" y para que pase el valor caputarado utilizaremos la funcion "VAL". Por lo tanto nuestra primera linea sera la siguiente:



original = VAL(ALLTRIM(INPUTBOX("Introduzca el numero a invertir")))
resultado = 0
n = original 


Notaran que agregue dos lineas mas:

Variable resultado: es donde guardaremos el resultado, sumando cada número que vayamos obteniendo al ir invirtiendo el número. Es necesario que se inicialice en este momento y que tenga valor = 0 para que no de error al querer agregar el primer número.

Variable n: aquí almacenaremos en primera instancia el número original y poder trabajar sobre el.

Luego de haber definido esto, tenemos que definir un bloque DO WHILE para poder efectuar nuestros calculos. la variable n, se le ira quitando el número ya utilizado y almacenado cada vez que haga un ciclo el DO WHILE, es decir que ira "1234", luego "123" y asi hasta llegar a 0 que es cuando ya no se pueda seguir extrayendo números enteros por medio de division. Por lo tanto el ciclo terminara cuando n = 0. El bloque DO WHILE es:


DO WHILE n > 0
cosciente = INT(n /10)
restante = n % 10
resultado = (resultado*10) + restante
n = cosciente
ENDDO


Explicando:
primero en cosciente almacenaremos el valor entero de la division n entre 10, ejemplo:
si n = 1234


entonces
cosciente = INT(1234 / 10) = 123


Realmente 1234 / 10 es igual a 123.4, pero como le estamos diciendo al programa que solo necesitamos la parte entera, entonces el 0.4 no lo agrega. Esta es la manera de extraer el ultimo número del número original.

Luego, hacemos lo mismo, pero sacaremos el restante de la division que hicimos anteriormente, es decir, el 4 y lo almacenaremos en la variable restante.


si n = 1234
restante = 1234 % 10 = 4


Este es el 0.4 que nos sobro la ultima vez, pero lo estamos haciendo con la operación "restante" o "residuo de" que se representa con "%".

NOTA: date cuenta que en esta ocasión no usamos la funcion INT, esto es porq todos los restos de cualquier número entre 10 (es decir, n%10), solo nos daran un numero que es el ultimo digito de n.

Luego, sumamos a resultado el valor de restante. Pero notece que para ir sumando, sin perder el orden ni que nos de otro número, al valor almacenado de resultado lo multiplicamos por 10 y luego sumamos restante. Ejemplo:


.....
restante = 4
resultado = 0


entonces


resultado = (resultado * 10) + restante = (0 * 10) + 4 = 4


Luego, cuando vuelva a repetir el ciclo:


restante = 3
resultado = 4


resultado = (4 * 10 ) + 3 = 40 + 3 = 43


.....
Y así hasta obtener el valor de 4321.
.....


Esta es la manera para invertir un número, sumando el "número anterior por 10 más el nuevo digito"


Luego que termine el DO WHILE, solo nos queda mostrarlo y LISTO!.

El codigo completo es:


original = VAL(ALLTRIM(INPUTBOX("Introduzca el numero a invertir","INVERTIR NUMEROS")))
resultado = 0
n = original
DO WHILE n > 0
cosciente = INT(n /10)
restante = n % 10
resultado = (resultado*10) + restante
n = cosciente
ENDDO
MESSAGEBOX("El número que introdujo fue el: "+ALLTRIM(STR(original)) + ", y su numero invertido es: " + ALLTRIM(STR(resultado)),64,"RESULTADO")


IMAGENES:


Capura del número





Resultado de 1234 y su invertido 4321



Bueno espero haber ayudado un poco, y gracias de antemano por haber leido este articulo. Esperen mucho más pronto y bendiciones.

DUDAS; PREGUNTAS? NO OLVIDES COMENTAR

Saludos

No hay comentarios: