Buscar

Lista de exercícios LP2

Prévia do material em texto

Lista de Exercícios – GCC112 
Linguagens de Programação II 
Departamento de Ciência da Computação – Universidade Federal de Lavras 
Profs. André Saúde e Rennan Marujo 
1) Com base nas linguagens de programação lógica, defina o que é um predicado, o que é uma 
clausula e o que é um argumento. 
2) Quais as vantagens e desvantagens da programação lógica? 
3) Explique o que é corte e de um exemplo de como ele pode melhorar um programa. 
4) Expresse através de fatos e regras Prolog as informações contidas na seguinte frase: 
“Loro é um pássaro. Beta é um peixe. Jonas é um inseto. Pássaros gostam de insetos. Gatos 
gostam de insetos. Gatos gostam de pássaros. Amigos gostam uns dos outros. Eu sou uma 
pessoa. Minha gata é minha amiga. Minha gata come tudo o que gosta, exceto pessoas. O 
nome da minha gata é Hina.” 
Descreva através de um predicado prolog o que Hina come. 
5) Considere a seguinte base de fatos prolog: 
a(a1,1). 
a(A,2). 
a(a3,N). 
b(1,b1). 
b(2,B). 
b(N,b3). 
c(X,Y) :- a(X,N), b(N,Y). 
d(X,Y) :- a(X,N), b(Y,N). 
d(X,Y) :- a(N,X), b(N,Y). 
Preveja quais serão as respostas às seguintes perguntas em Prolog 
5a) ?- a(X,2). 
5b) ?- b(X, zoologico). 
5c) ?- c(X,b3). 
5d) ?- c(X,Y). 
5e) ?- d(X,Y). 
 
6) Defina o programa abaixo sem utilizar igualdade. 
irmaos(X, Y) :- 
pai(X, PX), 
pai(Y, PY), 
PX = PY. 
 
7) Suponha que: 
nota(Tiago,5.0). 
nota(Giovanni,9.0). 
nota(Frida,10.0). 
nota(Marcelo,9.0). 
nota(Breno,6.0). 
nota(Matheus,8.0). 
nota(Gislaine,9.0). 
nota(Bianca,2.5). 
nota(Gustavo,3.5). 
 
Considerando que: 
Nota de 7.0 á 10.0 = Aprovado. 
Nota de 5.0 á 6.9 = Recuperação. 
Nota de 0.0 á 4.9 = Reprovado. 
 
7a) Escreva uma regra para identificar a situação de um determinado aluno. 
7b) Escreva uma regra para identificar o aluno com maior nota para ganhar um prêmio. 
 
8) Escreva um programa para determinar quais tipos sanguíneos podem doar/receber sangue 
de e para quais tipos segundo a tabela abaixo. 
Tabela: Tipos sanguíneos 
 A B AB O 
A Doa/Recebe - Doa Recebe 
B - Doa/Recebe Doa Recebe 
AB Recebe Recebe Doa/Recebe Recebe 
O Doa Doa Doa Doa/Recebe 
 
 
9) Escreva um programa que calcule o cubo de um número. 
Ex: cubo(3,27). 
 
 
10) Escreva um programa Presidente/2 que retorna o(s) nome(s) do(s) presidente(s) que 
governou(aram) o Brasil em um dado ano: 
governou(deodoro_da_fonseca,1891,1891). 
governou(floriano_peixoto,1891,1894). 
governou(prudente_de_moraes,1894,1898). 
governou(compos_sales,1898,1902). 
governou(rodrigues_alves,1902,1906). 
governou(afonso_pena,1906.1909). 
governou(nilo_pecanha,1909,1910). 
 
11) Um estudante acostumado a usar linguagens procedimentais está a desenvolver um 
compilador em Prolog. Uma das tarefas consiste em traduzir um código de erro para uma 
pseudo-descrição em português. O código por ele usado é: 
traduza(Codigo, Significado) :- 
Codigo = 1, 
Significado = integer_overflow. 
traduza(Codigo, Significado) :- 
Codigo = 2, 
Significado = divisao_por_zero. 
traduza(Codigo, Significado) :- 
Codigo = 3, 
Significado = id_desconhecido. 
Esta não é uma forma apropriada de programar em Prolog. Melhore este código. 
 
12) Escreva um predicado para calcular o Fibonacci de um número N. 
N 0 1 2 3 4 5 6 
Fib 1 1 2 3 5 8 13 
 
13) Escreva um predicado que verifica se um número é primo. 
 
14) Defina os predicados npar(Lista) e nimpar(Lista) para determinar se uma dada lista tem 
número par ou ímpar de elementos, respectivamente. 
 
15) Escreva um predicado para inserir um elemento ao final de uma lista. 
 
16) Escreva um predicado para inserir um elemento ao final de uma lista utilizando o 
predicado de inverter uma lista. 
 
17) Escreva um predicado para remover todos os elementos repetidos em uma lista. 
 
18) Escreva um programa prolog para determinar a operação de união entre duas listas. 
 
19) Escreva um programa prolog para determinar a operação de intersecção entre duas listas. 
 
20) Dados dois números inteiros N1, N2, gerar uma lista contendo todos os inteiros do 
intervalo [N1,..., N2] em ordem crescente. 
21) Dados duas listas sem repetição, verificar se a primeira é subconjunto da segunda. 
 
22) Defina o predicado ordena(Lista,ListaOrdenada) que ordena uma lista através de naive sort 
(por permutações). 
23) Missionários e Canibais: 
Na margem esquerda de um rio há três missionários e três canibais, que querem atravessá-lo 
para a outra margem. Há um bote que pode transportar no máximo duas pessoas ao mesmo 
tempo sendo que uma delas será sempre um missionário. Os missionários não podem ficar em 
menor número que os canibais em qualquer margem, caso contrário serão devorados. Como 
fazer para que todos cheguem a salvo na outra margem do rio? Dica: representar o estado por 
(Me, Ce, be) onde Me é o número de missionários na margem esquerda, Ce é o número de 
canibais na margem esquerda e be é 1 se o bote está na margem esquerda e 0 se o bote está 
na margem direita.

Outros materiais