You are on page 1of 8

PROLOG -Funciones Matemticas

1
Ing. Sal Prez Vega

OBJETIVOS: Poner en prctica el uso de funciones matemticas para la resolucin de ejercicios.

PROBLEMA 1
Muestra en pantalla el uso de todas las funciones matemticas de prolog.
SOLUCION

goal
Y1 = sin(90*3.141516/180), % Seno 90 = 0.9999999993
writef("Seno 90 = %f",Y1),
Y2 = cos(90*3.141516/180),nl,
writef("Cos 90 = %f",Y2),nl, % Cos 90 = 0.0000383268
Y3 = arctan(1)*180/3.141516,
writef("ArcoTangente de 1 = %f",Y3),nl, % ArcoTangente de 1 = 45.0010980086
Y4 = ln(2.718281),/*logaritmo natural de e en base e*/
writef("Ln 2.718281 = %f",Y4),/*1*/nl,
Y5 = log(10),/*logaritmo en base 10 de 10*/
writef("log 10 = %f",Y5),/*1*/nl,
Y6 = exp(1),/*e elevado a 1*/
writef("Exp 1 = %f",Y6),/*1*/nl,
Y7 = sqrt(2),
writef("Raiz cuadrado de 2 = %f",Y7),/*1.414213*/nl,
Y8 = round(16.5),
writef("Redondear al entero 16.5 = %f",Y8),/*17*/nl,
Y9 = trunc(16.5),
writef("Truncar 16.5 a la parte entera = %f",Y9),/*16*/nl,
Y10 = abs(-15),
writef("Valor absoluto de -15 = %d",Y10),/*15*/nl,
readln(_).

PROBLEMA 2

Convertir una coordenada cartesiana a coordenada polar.

SOLUCION

domains
r=real
predicates
convertir(r,r)
clauses
convertir(X,Y):- W=Y/X, A=arctan(W),
Z=X*X+Y*Y, R=sqrt(Z),
write(R),nl, write(A).
goal
write("ingrese X="),readreal(X),
write("Ingrese Y="),readreal(Y),
convertir(X,Y),
readln(_).
PROLOG -Funciones Matemticas

2
Ing. Sal Prez Vega


domains
r = real
predicates
regla(r,r)
clauses
regla(X,Y):- X <> 0,
D = X * X + Y * Y,
R = round(sqrt(D)),
A = round(arctan(Y/X) * 180 / 3.141516),
write("RADIO = ",R),nl,
write("ANGULO = ",A),!.
regla(_,_):- write("X TIENE QUE SER DIFERENTE CERO"),!.
goal
write("INGRESE X = "), readreal(X),
write("INGRESE Y = "), readreal(Y),
regla(X,Y),
readln(_).

PROBLEMA 3
Hallar la potencia Y = X
N
donde X = 2, N = 5.
SOLUCION

goal
X = 2,
N = 5,
A = N * ln(X),
Y = exp(A),
write("Potencia = ",Y),
readln(_).

domains
r = real

predicates
regla(r,r)

clauses
regla(B,N):- B >= 0,
Y = exp(N * ln(B)),
write("Y = ",Y),!.
regla(_,_):- write("LA BASE TIENE QUE SER POSITIVOS MAYORES QUE CERO"),!.
goal
write("INGRESE BASE = "), readreal(B),
write("INGRESE EXPONENTE = "), readreal(N),
regla(B,N),
readln(_).

PROLOG -Funciones Matemticas

3
Ing. Sal Prez Vega

PROBLEMA 4
N
Hallar la potencia Y = X donde X = 2 , N = 0.5.

SOLUCION

goal
X = 2,
N = 0.5,
A = N * ln(X),
Y = exp(A),
write("Potencia = ",Y),
readln(_).

PROBLEMA 5
Hacer una regla que halle la potencia de un numero real cualquiera elevado a un exponente tambin real
cualquiera. La regla tendr 3 argumentos en 2 de ellos recibe la base y el exponente y en el tercer argumento
regresa la potencia.
SOLUCION

domains
r = real
predicates
potencia(r,r,r)
clauses
potencia(P,X,N):- Z = N * ln(X),
P = exp(Z).
goal
write("Ingrese X = "),readreal(X),
write("Ingrese N = "),readreal(N),
potencia(P,X,N),
write("Potencia = ",P),
readln(_).

PROBLEMA 6
Hacer la deduccin de la formula para obtener la potencia de cualquier numero.
SOLUCION

Y = X
N


LN(Y) = LN(X
N
)

LN(Y) = N * LN(X)

Y = E
N * LN(X)


ENTONCES Y = EXP(N*LN(X))

PROLOG -Funciones Matemticas

4
Ing. Sal Prez Vega

PROBLEMA 7
Hacer un programa que dado un X. Hallar
|X| + log(10)
Y = ---------------
3 ___
\/ X

SOLUCION

domains
r = real

predicates
funcion(r)
calculo(r,r)
potencia(r,r,r)

clauses
funcion(X):- X<>0,X>0, % La interseccin es X>0
calculo(X,Y),
write("Y = ",Y),!.

funcion(_):- write("NO EXISTE"),!.

calculo(X,Y):- Aux = 1/3,
potencia(X,Aux,R),
Y = (abs(X)+log(10))/R.

potencia(B,E,Y):- Aux = E * ln(B),
Y = exp(Aux).

goal
write("Ingresar X = "),
readreal(X),
funcion(X),
readln(_).

domains
r = real
predicates
regla(r)
clauses
regla(X):- X > 0,
Y = (abs(X)+log(10))/exp(1/3*ln(X)),
write("Y = ",Y),!.
regla(_):- write("X TIENE QUE SER POSITIVO"),!.
goal
write("INGRESE X = "), readreal(X),
PROLOG -Funciones Matemticas

5
Ing. Sal Prez Vega

regla(X), readln(_).

PROBLEMA 8

Hacer un programa que dado un X. Hallar

tan(X) + log
5
(X)
Y = --------------------
arctan(X)

SOLUCION

sen(X)/cos(X) + Ln(X)/Ln(5)
Y = --------------------------------
arctan(X)

Para los siguientes ngulos no estn permitidos 90, 270, 450 es decir los valores (2n-1) * 90 osea 1 * 90, 3 * 90, 5
* 90...
Tampoco para los valores X = 0 en arctan(0).
Tampoco para los X<0 en Ln(X)

Esto quiere decir que para los siguientes valores da como resultado.
X = 90 NO EXISTE
X = 270 NO EXISTE
X = 450 NO EXISTE
X = 0 NO EXISTE
X = -5 NO EXISTE
X = 90.01 -4705.5899287

domains
r = real
i = integer

predicates
funcion(r)
calculo(r,r)
filtro(r)
entero(r,i)

clauses
funcion(X):-filtro(X),
calculo(X,Y),
write("Y = ",Y),!.

funcion(_):- write("NO EXISTE"),!.

calculo(X,Y):- Ang = X * 3.141516 / 180,
Y = (sin(Ang)/cos(Ang) + ln(X)/ln(5))/arctan(X).

PROLOG -Funciones Matemticas

6
Ing. Sal Prez Vega

filtro(X):- A1 = trunc(X),
A2 = X - A1,
A2 <> 0, %Residuo es diferente de 0 entonces es real.
X <> 0,
X > 0,!.

filtro(X):- entero(X,E), E<>0, E>0, % E es un entero
A = E div 90,%Valido son A = 2,4,6,8 mas no 1,3,5,7....
A <> 0,
0 = A mod 2,!.

entero(R,E):- E = R.

goal
write("Ingresar X = "),
readreal(X),
funcion(X),
readln(_).

PROBLEMA 8

Hacer una regla que redondee un numero real cualquiera a 2 cifras decimales.

SOLUCION

domains
r = real
predicates
regla(r,r)
clauses
/*
regla(X,Y):- X1 = X + 0.005,
X2 = X1 * 100,
X3 = trunc(X2),
Y = X3 / 100.
*/
regla(X,Y):- Y = trunc((X + 0.005) * 100) / 100.

goal
write("INGRESAR NUMERO REAL = "), readreal(X),
regla(X,Y),
write("Y = ",Y), readln(_).

PROBLEMA 9

Hacer una regla que haga la funcin de redondear un nmero real a una cantidad de decimales dado.

PROLOG -Funciones Matemticas

7
Ing. Sal Prez Vega

SOLUCION

VERSIN 1: Caso especfico para redondear a 2 cifras decimales.

domains
r = real
i = integer

predicates
funcion(r)
calculo(r,r)
filtro(r)
entero(r,i)

clauses
evaluar(N,D,R):- A = N * 100,
B = round(A),
R = B / 100.
goal
write("Ingresar un nmero real = "),
readreal(N),
evaluar(N,D,R),
write("R = ",R),
readln(_).

VERSIN 2: Caso general para cualquier cantidad de cifras decimales.

domains
r = real
i = integer

predicates
evaluar(r,i,r)
potencia(r,i,r)

clauses
evaluar(N,D,R):- potencia(10,D,R1),
A = N * R1,
B = round(A),
R = B / R1.

potencia(B,E,R):- A = E * ln(B),
R = exp(A).
goal
write("Ingresar un nmero real = "),readreal(N),
write("Ingresar el nmero de decimales = "), readint(D),
evaluar(N,D,R),
write("R = ",R),
PROLOG -Funciones Matemticas

8
Ing. Sal Prez Vega

readln(_).

You might also like