| Dispõe de 3:00 horas para realizar este exame |
| Leia as questões com toda a atenção |
| e Responda com calma e clareza em folha convencional |
Para construir um Sistema de Informação para uma Biblioteca, foram identificados as
seguintes Entidades e Relações:
o Livro (descrito pelo ISBN, titulo, assunto e editora) que é
escrito por um Autor (caracterizado por um nome, o
país de onde é natural, e o estilo principal) e o Utente
(descrito por um código, o nome, a classe (docente, aluno, externo), e o telefone) que requisita
um livro numa data para leitura interna, ou domiciliária.
Antes de se criar a Base de Dados Relacional, que servirá de suporte ao sistema informático final, está-se a pensar fazer um protótipo do sistema num ambiente de programação declarativo, lógico.
Responda, então, às alíneas seguintes:
%-------------------------
Pretende-se a implementação em Prolog de
um codificador de mensagens (e de um descodificador de mensagens encriptadas), pela
substituição simples de uma letra (ou dígito), de a-z (ou 0-9), por outra, também de
a-z (ou 0-9). Uma das formas mais simples de substituição é deslocar o alfabeto de uma
quantidade específica (chamemos-lhe um delta).
Por exemplo, se cada letra e cada dígito fôr deslocada de 3, então
a b c d e f g h i j k l m n o p q r s t u v w x y z 0123456789
ficaria
d e f g h i j k l m n o p q r s t u v w x y z a b c 3456789012
e a mensagem 'encontra-me ao anoitecer' ficaria 'hqfrqwud-ph dr dqrlwhfhu'.
Usando o algoritmo acima descrito e o predicado pré-definido name/2
(recorde-se que este predicado transforma uma frase (1\bo argumento) numa lista
(2\bo argumento) com os códigos ASCII dos seus caracteres), implemente o
predicado code( F,FCode,Delta ) que recebe a frase F e a devolve
codificada em FCode usando um deslocamento Delta para rodar as letras e
os dígitos.
Exemplo:
?- code('encontra-me ao anoitecer',C,3).
C = 'hqfrqwud-ph dr dqrlwhfhu'
%-------------------------
Considere as frases seguintes, que são estruturalmente (isto é, sintacticamente) idênticas:
e responda às questões:
%-------------------------
Observe com cuidado a seguinte Base de Factos (BC)
% profRisco(P) :- a profissao P 'e de alto-risco.
profRisco(professor) .
profRisco(fuzileiro) .
profRisco(bombeiro) .
% exerceProf(S,P) :- a pessoa S exerce a profissao P.
exerceProf(ana,professor) . exerceProf(rui,professor) .
exerceProf(to,metalurgico) . exerceProf(xico,bombeiro) .
exerceProf(marta,bombeiro) . exerceProf(hugo,fuzileiro) .
% dorme(S,H) :- a pessoa S dorme em media H horas por noite.
dorme(tita,7) . dorme(pedro,5) .
dorme(joao,4) . dorme(ze,5) .
dorme(sofia,6) . dorme(mariana,8) .
Responda, então, às alíneas seguintes:
exerceProf( QUEM,professor ) .
dormeDemais(tita) .
dormeDemais(joana) .
admitindo que existia na BC um predicado dormeDemais/1 assim definido
dormeDemais(P) :- dorme(P,H), H > 9.
%-------------------------
No livro 100 Jogos Lógicos da colecção O Prazer da Matemática da Gradiva, pode ser encontrado o jogo que se segue.
Um motorista exprime as suas impressões sobre automóveis da seguinte forma:
- Uma tracção à frente dá boa estabilidade;
- Uma viatura pesada deve ter bons travões;
- Todas as viaturas de motor muito potente são caras;
- As viaturas ligeiras não têm boa estabilidade;
- Uma viatura de motor pouco potente não pode ter bons travões.
Admitirá ele a existência de uma viatura de tracção à frente que seja cara?
Responda, então, às alíneas seguintes:
%-------------------------
Escreva em Prolog cláusulas adequadas (podendo recorrer, se necessário a predicados pré-definidos) para definir:
? profundidade(7,[3,[5,7],[4,[7,0]]],N).
N = 2
?- dobra([1,2,3],[1,1,2,2,3,3])
yes
?- separa([b,d,2,a,5,b],R).
R = ([2,5],[d,a,b])
?- separa([4,d,5,4,q],R).
R = ([5,4],[d,q])
%-------------------------