You are on page 1of 5

Alumno:

Ramos Melchor Ivan de Jesus


Materia:
Programacion Logica y Funcional
Maestro:
Juarez martinez Ulises
Hora: 7:00 8:00

Introduccin.
En el siguiente documento se explicaran las distintas soluciones que se
realizaron en la creacin de las funciones para resolver el proyecto de la
materia programacin lgica y funcional. En el proyecto se tiene que
realizar un programa que valide tarjetas de crdito.
Como se explic en el documento que nos proporcion el profesor cada
paso del algoritmo es simplificado con el siguiente ejemplo. Se considera
el nmero 4012888888881881.
Hay que realizar lo siguiente:
Doblar el valor de cada segundo dgito iniciando por la derecha.

[1,16,8,2,8,16,8,16,8,16,8,16,2,2,0,8]

Sumar los dgitos tanto de los valores doblados como de los no doblados.
Considerar que los nmeros como:

16, deben sumarse (16 se convierte en [1,6]).


El resultado de la suma es 90.

Calcular el mdulo 10 de la suma.

90 mod 10.
El resultado es cero, por lo que el nmero 4012888888881881
es un nmero vlido de tarjeta de crdito.

Con los pasos a seguir dentro del algoritmo procedemos a definir el


proceso de la validacin de la tarjeta de crdito. Por lo cual se construir
lo siguiente.
1. Funcin que convierta el nmero de la tarjeta de crdito a una lista
de dgitos.
2. Funcin que convierta el nmero de la tarjeta de crdito a una lista
invertida de dgitos
3. Funcin que doble el segundo nmero de un alista de nmeros.
4. Funcin que valide si un nmero de tarjeta de crdito es vlido.
Esta funcin debe utilizar las funciones anteriores para obtener el
resultado.

Desarrollo.
Para las funciones el tipo de dato ya est dado. Para la primera funcin
que se llamara toDigits el tipo de dato ser Integer -> [Integer], esto
quiere decir que recibir un entero y como salida tendr una lista de
enteros. A continuacin se muestra la funcin terminada.

Como se puede observar la funcin utiliza la recursividad, la funcin


recibe un argumento x y tiene dos casos. El primero es que si el
argumento que llega es igual cero regrese una lista vaca y en el
siguiente caso se hace el proceso de convertir la numero en la lista.
Primero se llama a la misma funcin para que se aplique la recursividad,
lo siguiente se le aplica el nmero el mod 10 y lo concatena con el
resultado de un div 10 que esta entre corchetes para que se genere la
lista.

Para la siguiente funcin el nombre es toDigitsRev y el tipo de dato


ser el mismo Integer -> [Integer], ya que al igual que la primera
funcin recibir un entero y devolver una lista de enteros. Esta funcin
convierte el nmero en una lista invertida. Al contrario de la funcin
anterior primero se aplica el mod 10 para que los dgitos se inviertan,
se llama a la funcin para que aplique la recursividad y por ltimo el div
para que se le concatenes los dems dgitos.

Esta funcin tiene por nombre doubleSecond y su tipo de dato es


[Integer] -> [Integer], esto quiere decir que recibir una lista de
enteros y regresara una lista de enteros. Si la lista no tiene nada la
regresa vaca que es el primer caso. El segundo caso es que si hay un
elemento, regrese la lista original. Y por ltimo se realiza el proceso de
sacar el doble de cada dos nmeros.

La funcin sumDigits tiene el tipo de dato [Integer] -> Integer, o sea


que recibe un lista de enteros y como salida habr un entero. Esta
funcin tiene que sumar todos los dgitos de la lista pero si un nmero
posee dos dgitos, este se tendr que separar en dos dgitos y sumarlos.
Por ejemplo llega [1, 2, 3, 4, 10, 12, 18], se convertir en 1 + 2 + 3 +
4 + (1 + 0) + (1 + 2) + (1 + 8), y as se obtendr la suma de todos los
dgitos en este caso la suma seria 23.
El proceso de la funcin comienza con un if, que es la condicin. La
condicin es que si un nmero es de dos dgitos se separe, entonces
para sabes si un nmero es de dos dgitos comparamos que si x que es
lo que recibe es mayor a 10 que es cuando un numero puede ser de dos
dgitos. Si esto llega a ser cierto al nmero se le aplica el mod 10 y div
10 que hace que se separen los dgitos. Luego los suma, lo siguiente es
que lo haga para toda la suma. Por ltimo se le aplica la funcin sum
que ya es una funcin dada en haskell que permite sumar todos lo
numero de una lista y as acaba el proceso.

Por ltimo la funcin isValid que tiene tipo Integer -> Bool que recibe
un entero y devuelve un booleano esto quiere decir que puede ser un
True o un False. En esta funcin simplemente se reutilizan las dems
funciones que ya elaboramos, para esto usamos la concatenacin entre
funciones. Para comenzar el proceso de manera correcta se colocan de
derecha a izquierda las funciones, porque es por donde comienza dicho
proceso. Para saber si es vlida la tarjeta, a la suma de sus nmeros se
le tiene que aplicar mod 10 si el resultado es 0 quiere decir que es
vlida y entonces regresa el True que es el tipo bool.

Referencias.

http://zvon.org/other/haskell/Outputlist/findIndices_f.html
http://stackoverflow.com/questions/919937/convert-string-list-to-int-list
http://stackoverflow.com/questions/5679797/haskell-string-to-list
https://github.com/Capelare/ejercicios-haskell/blob/master/ejercicios.hs

You might also like