% % %
+-----------------------------------+ EJER EJERCI CICI CIOS OS. . CICL CICLOS OS EN PROL PROLOG OG +-----------------------------------+
%-------------------------------------------------------------------------------+ % Desarrollar los sgtes predicados que manipulen sumatorias y ciclos diversos %-------------------------------------------------------------------------------+ % #1)----------------------------------------------+ % Encuentra la suma de los primeros n numeros %--------------------------------------------------+ sumaEnteros(N,Sum):-sumaEnteros(N,0,Sum). sumaEnteros(N,I,0):-I>=N,!. sumaEnteros(N,I,Sum):-I1 is I+1,sumaEnteros(N,I1,Sum1),Sum is Sum1+I1. % #2)-------------------------------------------------+ % Encuentra la suma de los primeros n numeros pares %-----------------------------------------------------+ sumaPares(N,Sum):-sumaPares(N,0,Sum). sumaPares(N,I,0):-I>=N,!. sumaPares(N,I,Sum):-I1 is I+1,sumaPares(N,I1,Sum1),Sum is Sum1+(I1*2). % #3)--------------------------------------------------+ % Encuentra la suma de los primeros n numeros impares %------------------------------------------------------+ sumaImpares(N,Sum):-sumaImpares(N,0,Sum). sumaImpares(N,I,0):-I>=N,!. sumaImpares(N,I,Sum):-I1 is I+1,sumaImpares(N,I1,Sum1),Sum is (Sum1+(I1*2))-1. % #4)--------------------------------------+ % Encuentra el factorial de un numero n %------------------------------------------+ factorial(N,Fac):-factorial(N,1,Fac). factorial(N,I,1):-I>=N,!. factorial(N,I,Fac):-I1 is I+1, factorial(N,I1,Fac1), Fac is Fac1*I1. % #5)-----------------------------------------------+ % Encuntra el numero combinatorio de N elementos %---------------------------------------------------+ combi(N,R,Com):-factorial(N,X),factorial(R,Y),factorial((N-R),Z), Com is (X//(Y* Z)).
% #6)-----------------------------------------------+ % Encuentra la suma de los coeficientes binomiales %---------------------------------------------------+ sumaCoef(N,Sum):-sumaCoef(N,0,Sum). sumaCoef(N,I,1):-I>=N,!. sumaCoef(N,I,Sum):-I1 is I+1,sumaCoef(N,I1,Sum1),combi(N,I1,X), Sum is Sum1+X. % #7)-------------------------------------+ % Encuentra la potencia de X a la N %-----------------------------------------+ potencia(X,N,Pot):-potencia(X,N,0,Pot). potencia(_,N,I,1):-I>=N,!. potencia(X,N,I,Pot):-I1 is I+1,potencia(X,N,I1,Pot1), Pot is X*Pot1. % #8)------------------------------------+ % Encuentra la suma de las potencias %----------------------------------------+ sumaPotencia(X,N,Sum):-sumaPotencia(X,N,0,Sum). sumaPotencia(_,N,I,1):-I>=N,!. sumaPotencia(X,N,I,Sum):-I1 is I+1,sumaPotencia(X,N,I1,Sum1),potencia(X,I1,Z),Su m is Sum1+Z. % #9)-----------------------------------------+ % Muestra la tabla de multiplicar de 1 a N %---------------------------------------------+ mostrarTabla(N):-mostrarTabla(N,1). mostrarTabla(N,A):-A>N,!. mostrarTabla(N,A):-mostrarTabla(N,A,1),A1 is A+1, mostrarTabla(N,A1). mostrarTabla(N,_,B):-B>N,!. mostrarTabla(N,A,B):-write(A),write('x'),write(B),write('='),Z is A*B,write(Z),n l, B1 is B+1,mostrarTabla(N,A,B1). % #10)---------------------------------------------------------+ % Muestra pares de factores que multiplicados sean igual a N %--------------------------------------------------------------+ mostrarFactores(N):-write(1),write('x'),write(N),write('='),write(N),nl,mostrarF actores(N,2). mostrarFactores(N,A):-A>N//A,!. mostrarFactores(N,A):-mostrarFactores(N,A,1),A1 is A+1,mostrarFactores(N,A1). mostrarFactores(N,A,B):-B>N//A,!. mostrarFactores(N,A,B):-A*B=:=N,write(A),write('x'),write(B),write('='),write(N) ,nl, B1 is B+1,mostrarFactores(N,A,B1). mostrarFactores(N,A,B):-B1 is B+1,mostrarFactores(N,A,B1),!.
%------------------------------------------------------------------+ % #10) Hacer un programa para mostrar los divisores de un entero N %------------------------------------------------------------------+ comenzar1:-read(N), write('Divisores :'),nl, divisores(1,N). divisores(I,N):-I>N,!. divisores(I,N):-N mod I =:=0, write(I),nl, I1 is I+1, divisores(I1,N),!. divisores(I,N):-I1 is I+1, divisores(I1,N).
% predicado nl=V y salta de linea
% se sigue hasta finalizar el ciclo
%--------------------------------------------------------------------------+ % #11) Hacer un programa para vereficar si un entero es un numero perfecto %--------------------------------------------------------------------------+ perfecto(N):-perfecto(1,N,P),N is P-N. perfecto(I,N,0):-I>N,!. perfecto(I,N,P):-N mod I =:=0, I1 is I+1, perfecto(I1,N,P1), P is P1+I,!. perfecto(I,N,P):-I1 is I+1, perfecto(I1,N,P). %-----------------------------------------------------------------------% #12 Pitagoras: Predicado que le un entero N, y encuentra los valores % enteros a, b y c menores iguales a n tales que se verifique el % teorema de pitagoras. %-----------------------------------------------------------------------% Solucion: pitagoras(N):-pitagoras(N,1). pitagoras(N,A):-A>=N,!. pitagoras(N,A):-pitagoras(N,A,1),A1 is A+1,pitagoras(N,A1). pitagoras(N,_,B):-B>=N,!. pitagoras(N,A,B):-pitagoras(N,A,B,1), B1 is B+1,pitagoras(N,A,B1). pitagoras(N,_,_,C):-C>=N,!. pitagoras(N,A,B,C):-A*A+B*B=:=C*C,write(A),write(','),write(B),write(','),write( C),write(','),write(N),nl, C1 is C+1,pitagoras(N,A,B,C1). pitagoras(N,A,B,C):-C1 is C+1,pitagoras(N,A,B,C1),!.