Está en la página 1de 3

%

%
%

+-----------------------------------+
| EJERCICIOS. CICLOS EN PROLOG
|
+-----------------------------------+

%-------------------------------------------------------------------------------+
% 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),!.

% predicado nl=V y salta de linea

divisores(I,N):-I1 is I+1,
divisores(I1,N).

% 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),!.