Buscar

Estudo de prolog [UFPI]

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

firstlist.pdf
 
 
MINISTÉRIO DA EDUCAÇÃO 
UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI 
CAMPUS SENADOR HELVÍDIO NUNES DE BARROS – PICOS 
BACHARELADO EM SISTEMAS DE INFORMAÇÃO 
PROF: THIAGO JOSÉ BARBOSA LIMA 
 
PROGRAMAÇÃO LÓGICA – LISTA NÃO AVALIATIVA 
 
01. Sabendo que um carro faz 15Km com um litro de gasolina e que serão fornecidos a 
velocidade média e o tempo gasto em uma viagem, exibir: distância percorrida e 
quantidade de gasolina necessária para a viagem. 
02. Um comerciante comprou um produto e deseja revendê-lo com um lucro de 45% se o 
valor de compra for menor do que R$ 20,00; caso contrário, o lucro será de 30%. Entrar 
com o valor de compra do produto e exibir seu valor de venda. 
 
03. A prefeitura permitiu empréstimos a seus funcionários onde o valor máximo da 
prestação não pode ultrapassar 30% do salário. Dados os valores do salário, do 
empréstimo e a quantidade de prestações, informar se o empréstimo é permitido ou não. 
Não considere acréscimo de juros. 
 
04. Entrar com o número de um mês do ano e informar seu nome. Exemplo: 02 = 
Fevereiro. 
 
05. Dada uma data no formato ddmmaa, exibir os dia, mês e ano separadamente. 
 
06. Dados três números, exibi-los em ordem crescente. 
 
07. Um endocrinologista deseja controlar a saúde de seus pacientes e, para isso, se 
utiliza do Índice de Massa Corporal (ICM). Sabendo-se que o IMC é calculado através da 
seguinte fórmula: 
 
Onde: 
 peso é dado em Kg; 
 altura é dada em metros. 
Criar um algoritmo que apresente o nome do paciente, seu IMC e sua faixa de risco, 
conforme a seguinte tabela:
 
08. Dados N números digitados pelo usuário, exibir o somatório, o maior, o menor deles e a média 
aritmética desses números, sendo que N é dado pelo usuário. 
firstlist.pl
q1():-
	write('Informe a velocidade media: '),
	read(VM),
	write('Informe o tempo: '),
	read(T),
	Dis is (VM/T),
	Gaso is (Dis/15),
	write('Distancia pecorrida': Dis),nl,
	write('Gasolina necessaria': Gaso),nl.
%------------------------------------------------------------------
q2():-
	write('Informe o valor de compra: '),
	read(VC),
	q2cond(VC),!.
q2cond(VC):-
	VC =< 20,
	Aux is VC * 0.45,
	Vend is (Aux + VC),
	write('Valor de venda': Vend),!.
q2cond(VC):-
	VC > 20,
	Aux is VC * 0.30,
	Vend is (Aux + VC),
	write('Valor de venda': Vend),!.
q2cond(_).
%----------------------------------------------------------------------
q3():-
	write('Informe o valor do salario: '),
	read(Sal),
	write('Informe o valor do emprestimo: '),
	read(Emp),
	write('Informe a quantidade de prestacoes: '),
	read(Pac),
	
	Vp is (Emp / Pac),
	Vsal is (Sal * 0.30),
	q3cond(Vp,Vsal),!.
q3cond(Vp,Vsal):-
	Vp =< Vsal,
	write('Emprestimo permitido'),!.
q3cond(Vp,Vsal):-
	Vp > Vsal,
	write('Emprestimo nao permitido'),!.
q3cond(_,_).
%--------------------------------------------------------------------
calendar(01,janeiro).
calendar(02,fevereiro).
calendar(03,março).
calendar(04,abril).
calendar(05,maio).
calendar(06,junho).
calendar(07,julho).
calendar(08,agosto).
calendar(09,setembro).
calendar(10,outubro).
calendar(11,novembro).
calendar(12,dezembro).
q4(X):-
	calendar(X,R),!,
	write(R),!.
q4(_).
%---------------------------------------------------------
q5():-
	write('Informe a data: '),
	read(Data),
	Dia is Data // 1000000,
	Mes is ((Data mod 1000000)//10000),
	Ano is ((Data mod 1000000) mod 10000),
	write(Dia),nl,
	write(Mes),nl,
	write(Ano).
%----------------------------------------------------------
q6(N1,N2,N3):-
	N1 =< N2,
	N2 =< N3,
	write(N1),nl,
	write(N2),nl,
	write(N3),!.
q6(N1,N2,N3):-
	N1 =< N3,
	N3 =< N2,
	write(N1),nl,
	write(N3),nl,
	write(N2),!.
q6(N1,N2,N3):-
	N2 =< N1,
	N1 =< N3,
	write(N2),nl,
	write(N1),nl,
	write(N3),!.
q6(N1,N2,N3):-
	N2 =< N3,
	N3 =< N1,
	write(N2),nl,
	write(N3),nl,
	write(N1),!.
q6(N1,N2,N3):-
	N3 =< N2,
	N2 =< N1,
	write(N3),nl,
	write(N2),nl,
	write(N1),!.
q6(N1,N2,N3):-
	N3 =< N1,
	N1 =< N2,
	write(N3),nl,
	write(N1),nl,
	write(N2),!.
q6(_,_,_).
%----------------------------------------------------
q7():-
	write('Informe o peso: '),
	read(P),
	write('Informe a altura: '),
	read(A),
	Alt is A *A,
	IMC is P/Alt,
	q7cond(IMC),!.
q7cond(IMC):-
	IMC < 20,
	write('Abaixo do peso'),!.
q7cond(IMC):-
	IMC >= 20,
	IMC =< 25,
	write('Normal'),!.
q7cond(IMC):-
	IMC > 25,
	IMC =< 30,
	write('Excesso de peso'),!.
q7cond(IMC):-
	IMC > 30,
	IMC =< 35,
	write('Obesidade'),!.
q7cond(IMC):-
	IMC > 35,
	write('Obesidade morbida'),!.
q7cond(_).
%------------------------------------------------------
q8():-
	write('Infomre o limite: '),
	read(Lim),
	write('Informe o primeiro Numero: '),
	read(N),
	Con is 1,	
	Menor is N,
	Maior is N,
	Soma is N,
	q8cond(Lim,Con,Maior,Menor,Soma),!.
q8cond(Lim,Con,Maior,Menor,Soma):-
	Con < Lim,
	write('Informe o Numero: '),
	read(N),
	q8maior(N,Maior,Rmaior),!,
	q8menor(N,Menor,Rmenor),!,
	Soma2 is Soma + N,	
	Cont2 is Con +1,
	q8cond(Lim,Cont2,Rmaior,Rmenor,Soma2),!.
q8cond(Lim,_,Maior,Menor,Soma):-
	Media is Soma / Lim,	
	nl,write('Maior numero': Maior),nl,
	write('Menor numero': Menor),nl,
	write('Soma': Soma),nl,
	write('Media': Media).
	
	
q8maior(N,Maior,Rmaior):-
	N >= Maior,
	Rmaior is N.
q8maior(_,Maior,Rmaior):-
	Rmaior is Maior.
q8menor(N,Menor,Rmenor):-
	N < Menor,
	Rmenor is N.
q8menor(_,Menor,Rmenor):-
	Rmenor is Menor.
	
fourlist.pl
q1([X|R]):-
	write(X),nl,
	q1(R),!.
q1([]).
%----------------------------------------------------------------
q2([X|R]):-
	L = [X|[]],
	q2cond(R,L),!.
q2cond([X|R],L):-
	
	L1 = [X|L],
	q2cond(R,L1),!.
q2cond([],[X|Y]):-
	write([X|Y]).
%-------------------------------------------------------------------
q3([X|R]):-
	A is X mod 2,
	A == 0,
	write(X),
	q3(R),!.
q3([_|R]):-
	q3(R),!.
q3([]).
%-------------------------------------------------------------------
q4([_,X|R]):-
	write(X),
	q4(R),!.
q4([]).
q4([_]).
%----------------------------------------------------------------------------
q5([X|R],A):-
	X \= A,	
	q5(R,A),!.
q5([_|_],_):-	
	write('Encontrou').
q5([],_):-
	write('O numero nao pertence a lista').
%------------------------------------------------------------------------
q6([X|R],A,S):-
	X \= A,	
	q6(R,A,S),!.
q6([_|_],_,S):-	
	S is 1.
q6([],_,S):-
	S is 0.
%---------------------------------------------------------------------
q7([X,_|R]):-
	write(X),
	q7(R),!.
q7([]).
q7([R]):-
	write(R).
%--------------------------------------------------------------
q8([X|R],H,S):-
	Aux is X mod 2,
	Aux == 0,
	H1 = [X|H],
	q8(R,H1,S),!.
q8([_|R],H,S):-
	q8(R,H,S),!.
q8([],[A|B],S):-
	Z = [A|[]],
	q8cond(Z,B,S),!.
q8([_],[A|B],S):-
	Z = [A|[]],
	q8cond(Z,B,S),!.
q8cond(Z,[X|Y],S):-
	Z1 = [X|Z],
	q8cond(Z1,Y,S),!.
q8cond(Z,[],S):-
	S = Z.
	
LISTA4.docx
MINISTÉRIO DA EDUCAÇÃO
UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI
CAMPUS SENADOR HELVÍDIO NUNES DE BARROS – PICOS
BACHARELADO EM SISTEMAS DE INFORMAÇÃO
PROF: THIAGO JOSÉ BARBOSA LIMA
PROGRAMAÇÃO LÓGICA – LISTA 4 NÃO AVALIATIVA
01. Faça um predicado em Prolog que imprimem na tela todos os elementos de uma determinada lista.
02. Faça um predicado em Prolog que imprimem na tela todos os elementos de uma determinada lista de forma invertida.
03. Faça um predicado em Prolog que receba uma lista e imprima na tela somente os elementos pares.
04. Faça um predicado em Prolog que imprimem na tela os elementos da posição pares.
05. Faça um predicado em Prolog , que dado uma lista de inteiros e um numero, verifica se o número pertence a lista, escrevendo na tela.
06. Refaça o ex04,
agora retorne 1 quando o elemento pertence a lista e 0 não pertence. Predicado não deve escrever na tela.
07. Faça um programa em Prolog que dado duas lista, imprima os elementos impares de cada lista.
08. Faça um predicado em Prolog que dado uma lista, o predicado deve retornar uma outra lista contendo os elementos pares da lista informada.
Obs: iremos trabalhar com lista de números inteiros nesta atividade… 
secondlist.pdf
 
 
MINISTÉRIO DA EDUCAÇÃO 
UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI 
CAMPUS SENADOR HELVÍDIO NUNES DE BARROS – PICOS 
BACHARELADO EM SISTEMAS DE INFORMAÇÃO 
PROF: THIAGO JOSÉ BARBOSA LIMA 
 
PROGRAMAÇÃO LÓGICA – LISTA 2 NÃO AVALIATIVA 
 
01. Faça um predicado que receba um número por parâmetro e exiba todos os seus 
divisores. 
 
02. Faça um predicado que receba dos valores inteiros por parâmetro e imprimas os 
números impares existentes neste intervalo. Considerando que o primeiro número 
informado seja menor que o segundo número. 
 
03. Faça um predicado que dados um número como base e outro como expoente seja 
calculado e exibido o resultado de uma operação de exponenciação. 
 
04. Faça um predicado que informe qual é o maior entre 50 números fornecidos por um 
usuário. 
 
05. Modifique o algoritmo anterior para que sejam digitados N números, ao invés de 50 
números. Sendo que a quantidade N é também dada pelo usuário. 
 
06. Dada uma lista de N números digitados pelo usuário, exibir a média aritmética desses 
números. 
 
 
 
 
Bons Estudos... 
 
 
secondlist.pl
q1(X):-
	C is 1,
	q1cond(C,X),!.
q1cond(C,X):-
	C =< X,
	Aux is X mod C,
	Aux == 0,
	Cont is C +1,
	write(C),nl,
	q1cond(Cont,X),!.
q1cond(C,X):-
	C =< X,
	Cont is C +1,
	q1cond(Cont,X),!.
q1cond(_,_).
%----------------------------------------------------------------------------
q2(X,Y):-
	X =< Y,
	Aux is X mod 2,
	Aux == 1,
	write(X),nl,
	Cont is X + 1,
	q2(Cont,Y),!.
q2(X,Y):-
	X =< Y,
	Cont is X + 1,
	q2(Cont,Y),!.
q2(_,_).
%---------------------------------------------------------------------------
q3():-
	write('Informe o numero: '),
	read(N),
	write('Informe o expoente: '),
	read(Exp),	
	C is 1,
	Aux is N,
	q3cond(Aux,C,N,Exp),!.
q3cond(Aux,C,N,Exp):-
	C < Exp,
	Aux2 is (N * Aux),
	Cont is C +1,
	q3cond(Aux2,Cont,N,Exp),!.
	
q3cond(Aux,_,_,_):-
	write(Aux).
%--------------------------------------------------------------
q4():-
	C is 1,
	
	write('Informe o numero: '),
	read(N),
	Maior is N,
	q4cond(C,Maior),!.
q4cond(C,Maior):-
	C < 10,
	write('Informe o numero: '),
	read(N),
	q4maior(N,Maior,Rmaior),!,
	Cont is C +1,
	q4cond(Cont,Rmaior),!.
q4cond(_,Maior):-
	nl,write(Maior).
q4maior(N,Maior,Rmaior):-
	N >= Maior,
	Rmaior is N.
q4maior(_,Maior,Rmaior):-
	Rmaior is Maior.
%--------------------------------------------------------------------------------------
q5():-
	
	write('Informe o numero limites de numeros: '),
	read(Lim),
	
	
	write('Informe o numero: '),
	read(N),
	Maior is N,
	q5cond(Lim,Maior),!.
q5cond(Lim,Maior):-
	Lim > 1,
	write('Informe o numero: '),
	read(N),
	q5maior(N,Maior,Rmaior),!,
	Lim2 is Lim -1,
	q5cond(Lim2,Rmaior),!.
q5cond(_,Maior):-
	nl,write(Maior).
q5maior(N,Maior,Rmaior):-
	N >= Maior,
	Rmaior is N.
q5maior(_,Maior,Rmaior):-
	Rmaior is Maior.
%--------------------------------------------------------------------------------
q6():-
	
	write('Informe o numero: '),
	read(C),
	C \= -1,
	Cont is 1,
	Soma is C,
	q6cond(Cont,Soma),!.
q6cond(Cont,Soma):-
	write('Informe o numero: '),	
	read(C),
	C \= -1,
	Cont2 is Cont + 1,
	Soma2 is C + Soma,
	q6cond(Cont2,Soma2),!.
q6cond(Cont,Soma):-
	Media is Soma/Cont,
	nl,write(Media).
	
tercelist.pdf
 
 
MINISTÉRIO DA EDUCAÇÃO 
UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI 
CAMPUS SENADOR HELVÍDIO NUNES DE BARROS – PICOS 
BACHARELADO EM SISTEMAS DE INFORMAÇÃO 
PROF: THIAGO JOSÉ BARBOSA LIMA 
 
PROGRAMAÇÃO LÓGICA – LISTA 3 NÃO AVALIATIVA 
 
01. Faça um predicado que receba um número por parâmetro e retorne o triplo desse 
número. 
02. Faça um predicado que receba um número por parâmetro e retorne o dobro desse 
número. 
03. Faça um predicado que receba dois números por parâmetro e retorne a soma dos 
dois números. 
04. Faça um predicado que receba dois números por parâmetro e retorne a multiplicação 
dos dois números. 
05. Faça um predicado que receba dois números por parâmetro e retorne a subtração dos 
dois números. 
06. Faça um predicado que receba dois números por parâmetro e retorne a divisão dos 
dois números. 
07. Faça um predicado que receba dois números por parâmetro e retorne o maior deles. 
08. Faça um predicado que receba dois números por parâmetro e retorne o menor deles. 
09. Faça um predicado que receba dois números por parâmetro e retorne o maior e o 
menor. 
10. Faça um predicado (operações) que receba dois números por parâmetro e retorne a 
soma, subtração, multiplicação e divisão. 
11. Faça um predicado principal, onde, o usuário irá digitar dois valores inteiros e em 
seguida chame o predicado soma(que recebe dois números por parâmetro e retorna o 
valor da soma), o valor retornado da soma deve ser impresso no predicado principal. 
Obs: Utilize o predicado soma da questão 3. 
12. Faça um predicado principal, onde, o usuário irá digitar dois valores inteiros e em 
seguida chame o predicado operações (que recebe dois números por parâmetro e 
retorna o valor da soma, subtração, multiplicação e divisão), os valores retornados devem 
ser impressos no predicado principal. Obs: Utilize o predicado operações da questão 10. 
 
 
 
Bons Estudos... 
 
 
tercelist.pl
p1(A,R):-
	R is A * 3.
p2(A,R):-
	R is A * 2.
p3(X,Y,R):-
	R is X + Y.
p4(X,Y,R):-
	R is X * Y.
p5(X,Y,R):-
	R is X - Y.
p6(X,Y,R):-
	R is X / Y.
p7(X,Y,R):-
	p7maior(X,Y,R),!.
p7maior(X,Y,R):-
	X >= Y,
	R is X.
p7maior(X,Y,R):-
	X < Y,
	R is Y.
p8(X,Y,R):-
	p8maior(X,Y,R),!.
p8maior(X,Y,R):-
	X =< Y,
	R is X.
p8maior(X,Y,R):-
	X > Y,
	R is Y.
p9(X,Y,R,S):-
	p9maior(X,Y,R,S),!.
	
p9maior(X,Y,R,S):-
	X >= Y,
	R is X,
	S is Y.
p9maior(X,Y,R,S):-
	X < Y,
	R is Y,
	S is X.
%------------------------------------------------------------------------------------------------
operacoes(X,Y,R,S,T,U):-
		
	p3(X,Y,R),nl,
	p4(X,Y,S),nl,
	p5(X,Y,T),nl,
	p6(X,Y,U),!.
p11():-
	write('Informe o primeiro numero: '),
	read(X),
	write('Informe o segundo numero: '),
	read(Y),
	p3(X,Y,R),
	write('Soma: '),
	write(R).	
%-------------------------------------------------------------------------------------------------
p12():-
	
	write('Informe o primeiro numero: '),
	read(X),
	write('Informe o segundo numero: '),
	read(Y),
	operacoes(X,Y,R,S,T,U),
	write('Soma': R),nl,
	write('Multiplicacao': S),nl,
	write('Subtracao': T),nl,
	write('Divisao': U).
leia-me.txt
						Desenvolvido por wildyson dantas,
						Graduando em sistemas de informação pela UFPI.
						Exercicios resolvidos em ambiente linux com Swipl.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando