Está en la página 1de 6

1 Ing.

SalPrezVega PROGRAMACION LOGICA





OBJETIVOS:

Entender el uso de las Expresiones aritmticas

REQUERIMIENTOS:

Visual Prolog

PROCEDIMIENTO:
Desarrollar los programas mencionados y sacar conclusiones.

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)
LABORATORIO SESIN N 4
Facultad: Ingeniera de Sistemas y Electrnica. Asignatura: Programacin Lgica.
Ciclo: Sptimo Semestre Acadmico: 2014 -II
Docente: Ing. Sal Prez Vega
Sesin 4: Expresiones Aritmticas

2 Ing.SalPrezVega PROGRAMACION LOGICA

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(_).

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),

3 Ing.SalPrezVega PROGRAMACION LOGICA

regla(B,N),
readln(_).

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 nmero 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 frmula para obtener la potencia de cualquier nmero.
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))

PROBLEMA 7

Hacer un programa que dado un X. Hallar

4 Ing.SalPrezVega PROGRAMACION LOGICA

|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),
regla(X), readln(_).

PROBLEMA 8

Hacer un programa que dado un X. Hallar

tan(X) + log5 (X)
Y = --------------------
arctan(X)

SOLUCION

5 Ing.SalPrezVega PROGRAMACION LOGICA


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).

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.

6 Ing.SalPrezVega PROGRAMACION LOGICA


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