INSTITUTO TECNOLGICO DE TEPIC
MATERIA: PROGRAMACIN LGICA Y FUNCIONAL
Unidad 3 y 4: Programacin Funcional
ACTIVIDAD 4. PF en Java, Python y Haskell
INTEGRANTES DE EQUIPO:
RODRGUEZ HERNNDEZ JOS
ANTONIO
NO.
CONTROL:
13400484
CARRERA: ING. SISTEMAS COMPUTACIONALES
MAESTRO: VIZCANO GARCA JORGE HONORIO.
HORA: 19:00 20:00 HRS.
TEPIC, NAYARIT A 22 DE NOVIEMBRE DE 2016.
Actividad 4 de la Unidad/Tema 2y3 (21
puntos)
Escribir el cdigo en Python, Java y Haskell (el cdigo en
Python y Java debe de ajustarse en lo posible a
fundamentos/conceptos de PF) para los siguientes ejercicios:
1. Funcin que reciba un nmero n entero y retorne el ltimo
dgito de n.
Python:
#1.- Funcin que reciba un nmero n entero y retorne el ltimo dgito de
n.
def P1(n):
return n%10
Java:
//1.- Funcin que reciba un nmero n entero y retorne el ltimo dgito de
n.
public static int P1(int n){
System.out.println("El nmero ingresado es: "+n+"\nEl ltimo dgito
es: "+(n%10));
return n%10;
}
*Ejecutando en el main:
P1(123123121);
Haskell:
--1.- Funcin que reciba un nmero n entero y retorne el ltimo dgito de
n.
p1 x= mod x 10
2. Funcin que reciba un nmero entero n y una lista de
nmeros enteros; y que determine si n se encuentra en la
lista o no.
Python:
#2.- Funcin que reciba un nmero entero n y una lista
enteros; y que determine si n se encuentra en la lista o no.
de
nmeros
def P2(n,list):
print (any(x=n for x in list))
Java:
//2.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros; y que determine si n se encuentra en la lista o no.
public static boolean P2(int n, List<Integer> l){
System.out.println("Lista: "+l);
System.out.println("Numero: "+n);
return l.contains(n);
}
Ejecutando en el main:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
System.out.println("El nmero est en la lista? " + P2(82,l));
Haskell:
--2.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros y que determine si n se encuentra en la lista o no.
p2 n l = or(map (==n)l)
3. Funcin que reciba un nmero entero n y una lista de
nmeros enteros; y que rote n elementos de dicha lista y
regrese la lista rotada.
Python:
#3.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros; y que rote n elementos de dicha lista y regrese la lista
rotada.
def P3(n,lista):
return lista[-n:] + lista[:-n]
Java:
//3.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros; y que 'rote' n elementos de dicha lista y regrese la lista
'rotada'.
public static List<Integer> P3(int n, List<Integer> l){
List<Integer> nueva= new ArrayList<Integer>();
nueva.addAll(l.subList(n, l.size()));
nueva.addAll(l.subList(0,n));
System.out.println("Matriz original: "+l);
return nueva;
}
Ejecutando en el main:
4
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
System.out.println("Matriz rotada: "+ P3(3,l));
Haskell:
--3.- Funcin que reciba un nmero entero n y una lista de nmeros
enteros y que 'rote' n elementos de dicha lista y regrese la
4. Funcin que reciba una lista de nmeros enteros, que eleve
al cubo los nmeros pares de la lista y al cuadrado los
nmeros impares; y regrese nueva lista.
Python:
#4.- Funcin que reciba una lista de nmeros enteros, que eleve al cubo
los nmeros pares de la lista y al cuadrado los nmeros impares; y
regrese nueva lista.
def P4(lista):
return [] if lista==[] else [lista[0]**2]
lista[0]%2==0 else [lista[0]**3] + P4(lista[1:])
P4(lista[1:])
if
Java:
// 4.- Funcin que reciba una lista de nmeros enteros, que eleve al cubo
los nmeros pares de la lista y al cuadrado los nmeros impares; y
regrese nueva lista.
public static Object[] P4(List<Integer> l){
System.out.println(l);
return l.stream().map(num
2):Math.pow(num, 3)).toArray();
->
(num%2==0)?Math.pow(num,
OJO: SE CRE UNA FUNCION PARA IMPRIMIR EL ARRAY
public static void imprimirOb(Object[] array){
String cad="[";
for (int i=0;i<=array.length-1;i++){
cad+=array[i];
if(i<array.length-1)cad+=",";
}
System.out.println(cad+"]");
}
Ejecutando en el main:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
imprimirOb(P4(l));
Haskell:
--4.- Funcin que reciba una lista de nmeros enteros, que eleve al cubo
los nmeros pares de la lista y al cuadrado los nmeros
pot num= if even num then num^2 else num^3
p4 n = [pot num | num<- n]
5. Funcin que reciba una lista de nmeros enteros y regrese
una lista slo con los primos de la primer lista.
Python:
#5.- Funcin que reciba una lista de nmeros enteros y regrese una lista
slo con los primos de la primer lista.
def P5(l):
return [] if l==[] else [l[0]]+P5(l[1:]) if P5Val(l[0],0,1) else
P5(l[1:])
def P5Val(num,n,i):
return False if n>2 else P5Val(num,n+1,i+1)
P5Val(num,n,i+1) if num>i else True
if
num%i==0
else
Java:
//5.- Funcin que reciba una lista de nmeros enteros y regrese una lista
slo con los primos de la primer lista.
public static List<Integer> P5(List<Integer> l){
List<Integer> nueva= new ArrayList<Integer>();
if(l.size()==0) return nueva;
else if(P5Val(l.get(0),0,1)){
nueva.add(l.get(0));
nueva.addAll(P5(l.subList(1,l.size())));
return
nueva;
}
else return P5(l.subList(1,l.size()));
}
public static boolean P5Val(int num,int
n,int i){
if(n>2) return false;
else if(num%i==0) return P5Val(num,n+1,i+1);
else if (num>i) P5Val(num,n,i+1);
return true;
}
Ejecutando en el main:
List<Integer> l = new ArrayList<Integer>();
l.add(4);
l.add(5);
l.add(6);
l.add(2);
l.add(45);
l.add(7);
l.add(73);
l.add(82);
System.out.println(P5(l));
Haskell:
--5.- Funcin que reciba una lista de nmeros enteros y regrese una lista
slo con los primos de la primer lista.
6. Funcin que reciba un nmero entero (positivo) y retorne
una lista de nmeros enteros entre 1 y n que sean
divisores "exactos" de n.
Python:
#6.- Funcin que reciba un nmero entero (positivo) y retorne una lista
de nmeros enteros entre 1 y n que sean divisores "exactos" de n.
def P6(n):
lista=[]
print(P6Val(n,1,lista))
def P6Val(n,i,l):
return l+[n]
P6Val(n,i+1,l)
if
n==i
else
(P6Val(n,i+1,l+[i]))
if
n%i==0
else
Java:
//6.- Funcin que reciba un nmero entero (positivo) y retorne una lista
de nmeros enteros entre 1 y n que sean divisores "exactos" de n.
public static List<Integer> P6(int n){
List<Integer> l = new ArrayList<Integer>();
return P6Val(n,l,1);
}
public static List<Integer> P6Val(int n,List<Integer> lista, int i){
if(i==n){
lista.add(n);
return lista;
}
if(n%i==0)lista.add(i);
return P6Val(n,lista,++i);
}
Ejecutando en el main:
System.out.println(P6(5000));
Haskell:
--6.- Funcin que reciba un nmero entero (positivo) y retorne una lista
de nmeros enteros entre 1 y n que sean divisores "exactos" de n.
7. Funcin que reciba una lista de nmeros enteros,
implemente el ordenamiento Quick Sort y que retorne la
lista ordenada.
9
Python:
#7.- Funcin que reciba una lista de nmeros enteros, implemente el
ordenamiento Quick Sort y que retorne la lista ordenada.
def quicksort(A,izq,der):
pivote=A[izq]
i=izq
j=der
while(i<j):
while (A[i]<=pivote and i<j):
i+=1
while (A[j]>pivote):
j-=1
if(i<j):
aux=A[i]
A[i]=A[j]
A[j]=aux
A[izq]=A[j]
A[j]=pivote
if(izq<j-1):
quicksort(A,izq,j-1)
if(j+1<der):
quicksort(A,j+1,der)
return A
def P7(l):
return quicksort(l,0,len(l)-1)
Java:
10
//7.- Funcin que reciba una lista de nmeros enteros, implemente el
ordenamiento Quick Sort y que retorne la lista ordenada.
public static int[] P7(int num[]){
quicksort(num,0,num.length-1);
return num;
}
public static void quicksort(int A[], int izq, int der) {
int pivote=A[izq];
int i=izq;
int j=der;
int aux;
while(i<j){
while(A[i]<=pivote && i<j) i++;
while(A[j]>pivote) j--;
if (i<j) {
aux= A[i];
A[i]=A[j];
A[j]=aux;
}
}
A[izq]=A[j];
A[j]=pivote;
if(izq<j-1) quicksort(A,izq,j-1);
if(j+1 <der) quicksort(A,j+1,der);
}
OJO: SE CRE UNA FUNCION PARA IMPRIMIR EL ARRAY
public static void imprimirInt(int[] array){
String cad="[";
for (int i=0;i<=array.length-1;i++){
cad+=array[i];
if(i<array.length-1)cad+=",";
}
System.out.println(cad+"]");
11
Ejecutando en el main:
int Array[]={2,35,6,8,54,17,33,4,5};
System.out.println("Matriz Original: ");
imprimirInt(Array);
System.out.println("Matriz Ordenada: ");
imprimirInt(P7(Array));
Haskell:
--7.- Funcin que reciba una lista de nmeros enteros, implemente el
ordenamiento Quick Sort y que retorne la lista ordenada.
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted = quicksort [a | a <- xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted
12