|
Semanas 2º Semestre |
|||||
| 20 Fevereiro | 27 Fevereiro | 6 Março | 13 Março | 20 Março | 27 Março |
| 3 Abril | 10 Abril | 17 Abril | 24 Abril | 1 Maio | 8 Maio |
| 15 Maio | 22 Maio | 29 Maio | |||
Horário especial de início do segundo semestre da LIG: não há aulas excepto apresentação da disciplina 5ª feira (EE 0.10, 10 às 13h).
Ajustes de turnos, apresentação do laboratório. Resolução de exercício sobre interfaces gráficas em Java (Swing): construção de um tabuleiro de jogo de cartas. Exploração de janelas, painéis e gestores de apresentação (layout managers)
Continuação da resolução do exercício sobre interfaces gráficas em Java da semana passada: o modelo de eventos Swing.
Continuação da resolução de exercícios sobre interfaces gráficas em Java (Swing): exploração de novos componentes e gestores de apresentação.
Conclusão da resolução de exercícios sobre interfaces gráficas em Java e apresentação dos resultados. Apresentação do enunciado do trabalho prático.
Introdução ao ambiente de programação em PROLOG - o SWI. Comandos básicos do SWI. Resolução de exercícios. Tracing de predicados.
Tendo em conta a existência de uma base de conhecimento com factos do tipo progenitor(pai, filho) do género dos apresentados nas aulas teóricas e no capítulo 1 do livro, escreva regras que descrevam as situações abaixo apresentadas. Teste convenientemente as novas regras através de questões (com e sem opção de trace).
Predicado feliz, sendo que uma pessoa é considerada feliz no caso de ter pelo menos um filho.
Predicado temcasalfilhos, verdade sempre que uma pessoa tem um filho e uma filha.
Predicado tia, indicando se uma pessoa é tia de outra.
Resolução de exercícios introdutórios à Programação em Lógica em PROLOG. Tracing de predicados (continuação).
Considere a existência dos predicado linha (seg do capítulo 2),
definido à base do predicado ponto (point do capítulo 2).
Utilizando o predicado linha, escreva um termo que represente qualquer linha
vertical na coordenada x=5.
Assuma que um rectângulo é representado pelo termo rectangulo(P1, P2, P3, P4) em que os pontos P representam os vértices do rectângulo. Defina a relação
regular(R)
que é verdade se R for um rectângulo em que cada dos seus lados ou é vertical ou horizontal.
Reescreva a seguinte regra sem usar a notação do ponto e vírgula (ou):
traduzir(Numero, Palavra) :-
Numero = 1,
Palavra = um;
Numero = 2,
Palavra = dois;
Numero = 3,
Palavra = tres.
Considere o seguinte programa em PROLOG (adaptado da fig. 10 do livro)
% inicio do programa
grande(urso). % clausula 1
grande(elefante). % clausula 2
pequeno(gato). % clausula 3
castanho(urso). % clausula 4
preto(gato). %
clausula 5
cinzento(elefante). % clausula 6
escuro(Z) :- preto(Z). % clausula 7
escuro(Z) :- castanho(Z). % clausula 8
% fim do programa
Simule a execução das seguintes questões:
? - escuro(X), grande(X).
e
? - grande(X), escuro(X).
Para encontrar as respostas, qual das questões é mais trabalhosa (em termos procedimentais)?.
Férias de Páscoa.
Resolução de exercícios com aritmética, comparação e listas em PROLOG.
Definir o predicado maxList(List,Max), tal que Max seja o maior valor da lista de números List.
Definir o predicado sumList(List,Sum), tal que Sum seja a soma dos elementos contidos na lista List.
Defina o predicado mylast(Item, List) em que Item é o último elemento da lista List. Escreva-o de duas formas:
a) utilizando o predicado append(L1,L2,L3) para concatenar duas listas
b) sem utilização do predicado append.
Defina o predicado myreverse(List, ReversedList) que inverte a ordem dos elementos de uma lista. Por exemplo, a questão
?- myreverse([a,b,c,d],[d,c,b,a]).
deverá ter sucesso.
Uso de termos estruturados.
Considere o exemplo de termos estruturados sobre relações familiares (ver p. 98 livro e aula teórica semana 10 Abril), nomeadamente nas relações familia/3, pessoa/4, criança/1, etc. Escreva questões (golos) que lhe permitam encontrar a seguinte informação na base de dados familiar:
a) Os apelidos das famílias sem filhos.
b) Todas as crianças empregadas.
c) Os apelidos das famílias com mãe empregada e pai desempregado.
d) Todas as crianças cujos pais diferem em idade pelo menos 15 anos.
Estudo e exploração da ferramenta Interprolog.
Considere os seguintes exemplos de utilização do Interprolog:
Exemplo 1
Hello User, que concatena a string "Hello," com a do nome do utilizador do sistema e apresenta-a na consola. A contatenação é feita utilizando SWI-Prolog
Código fonte: TesteInterProlog.java (ver comentários e alterar código para a situação em concreto. Por exemplo, a localização do SWI-Prolog na máquina onde o programa é executado)
Utilizando os comandos abaixo apresentados, compile e execute o programa.
Comando compilação: javac -classpath interprolog.jar TesteInterProlog.java
Comando execução: java -cp .;interprolog.jar TesteInterProlog
Exemplo 2
Exemplo que apresenta a lista de cartas de um determinado jogador. A informação sobre o jogador está descrita no seguinte ficheiro Prolog - jogadoresv2.pl
Código fonte: TesteInterPrologListas2.java (ver comentários e alterar código para a situação em concreto. Por exemplo, a localização do SWI-Prolog na máquina onde o programa é executado)
Utilizando os comandos abaixo apresentados, compile e execute o programa.
Comando compilação: javac -classpath interprolog.jar TesteInterPrologListas2.java
Comando execução: java -cp .;interprolog.jar TesteInterPrologListas2
Exercício [resolução]
Tendo em conta os exemplos apresentados, desenvolva uma aplicação que solicite o número de jogador e apresente o seu nome bem como a lista de cartas. A informação sobre os jogadores está armazenada no seguinte ficheiro jogadores.pl
Controlo de retrocesso. Negação como falhanço. Input / Output em Prolog
Considere o seguinte programa:
p(1).
p(2):-!.
p(3).
Escreva as respostas às seguintes questões (depois teste-as no SWI e confronte com a resposta dada):
a) ?- p(X).
b) ?- p(X), p(Y).
c) ?- p(X), !, p(Y).
Defina o predicado
separa(Numeros, Positivos, Negativos)
que separa uma lista de números em duas listas: uma com os números positivos (incluindo o zero) e outra com os números negativos. Por exemplo:
separa([3, -1, 0, 5, -2], [3, 0, 5], [-1, -2])
Pense em duas versões: com e sem utilização de cut.
Seja f um ficheiro de termos. Defina o predicado
procuraTodosTermos(Term)
que apresenta no terminal e acrescenta à base de conhecimento todos os termos em f que unificam com Term. Certifique-se que Term não é instanciado durante o processo de procura (o que poderia impedir a sua unificação com termos posteriores que existam no ficheiro).
Tolerância de Ponto: Enterro da Gata 2006
Alterações à base de conhecimento. Resolução de exercícios utilizando predicados para obtenção de múltiplas soluções: bagof, setof e findall.
Considere o predicado maketable (cf. p.180 do livro) que acrescenta à base de conhecimento uma tabela de multiplicações (product):
maketable:-
L = [0, 1, 2, 3, 4, 5 , 6, 7, 8, 9],
member(X, L),
member(Y, L),
Z is X*Y,
assert(product(X, Y, Z)),
fail.
a) Escreva em Prolog a questão que remove toda a tabela de multiplicações (product) da base de conhecimento.
b) Escreva em Prolog a questão que apenas remove as multiplicações cujo resultado é zero.
c) Escreva em Prolog a questão que apenas remove as multiplicações cujo resultado é superior ou igual a dez.
Considere o seguinte conjunto de factos que registam a participação de pessoas em vários eventos:
% formato: evento(nome pessoa, nome evento, tipo evento, local evento, data(dia,mês,ano))
evento('Rui','O Último Destino 3',cinema,'Guimarães',data(29,4,2006)).
evento('Rui','O Último Destino 3',cinema,'Braga',data(30,4,2006)).
evento('Rui','Art
Déco - Colecção Berardo',exposicao, 'Museu Serralves',data(26,5,2006)).
evento('Ana','Art Déco - Colecção Berardo',exposicao,'Museu Serralves',data(23,5,2006)).
evento('Ana','Missão Impossível 3',cinema,'Porto',
data(30,5,2006)).
evento('Carlos','O Último Destino 3',cinema,'Braga',data(21,5,2006)).
evento('Carlos','Missão Impossível 3',cinema,'Braga',data(30,5,2006)).
evento('Carlos','Turandot',opera,'Coliseu Lisboa', data(1,5,2006)).
Utilizando os predicados para obtenção de múltiplas soluções, escreva as
questões Prolog que permitam responder ao que é solicitado nas seguintes alíneas
a) Quem foi ao cinema?
b) Quantos bilhetes de cinema foram vendidos em Maio?
c) Apresente uma lista ordenada de elementos do tipo NomePessoa/[lista dos nomes dos eventos que participou]
Apresentação e defesa oral dos trabalhos práticos.