• Nenhum resultado encontrado

Projecto de Lógica para Programação. Videoteca em Prolog. ( º semestre)

N/A
N/A
Protected

Academic year: 2021

Share "Projecto de Lógica para Programação. Videoteca em Prolog. ( º semestre)"

Copied!
7
0
0

Texto

(1)

Projecto de Lógica para Programação

Videoteca em Prolog

(2007-2008 – 2º semestre)

1. Introdução

A base de dados BDvip.pl contém informação sobre cinema - nomeadamente informação relativa a actores/realizadores, filmes e Óscares, retirada da IMDB e OSCAR.com1 -

codificada em factos em Prolog. Essa informação pode ser cruzada permitindo descobrir que actores contracenam num dado filme, para quantos Óscares foi nomeado um dado actor, etc. O projecto VIP (VIdeoteca em Prolog) tem como objectivo a implementação de um programa em Prolog que permite obter informação variada sobre cinema com base na BDvip.pl2.

2. A base de dados BDvip.pl

2.1 Informação sobre pessoas e suas actividades

A base de dados contém informação básica sobre pessoas com a seguinte estrutura: pessoa(id, nome, ano_nascimento, ano_morte).

em que:

− id: inteiro que identifica univocamente a pessoa (no conjunto das pessoas) − nome: string que representa o nome pelo qual é conhecida a pessoa

− ano_nascimento e ano_morte são, respectivamente, o ano de nascimento/morte da pessoa (0000 se as datas são desconhecidas).

Exemplo:

% A pessoa Alfred Hitchcock:

% é identificada pelo número 831998, nasceu em 1899 e morreu em 1980. pessoa(831998, ‘Alfred Hitchcock’, 1899, 1980).

Dado que várias actividades podem ser associadas a uma pessoa em cinema (actor, argumentista, produtor, etc.), existe a seguinte estrutura de dados:

actividade(id, nome). em que:

(2)

− id: inteiro que identifica univocamente uma actividade (no conjunto das actividades);

− nome: string que representa o nome da actividade. Exemplo:

% O número 5 representa a actividade de ‘realizador’ actividade(5, ‘realizador’).

2.2 Informação sobre filmes

A base de dados contém informação genérica sobre filmes, com a seguinte estrutura: filme(id, nome, ano_estreia, lugar_top_250).

em que:

− id: inteiro que identifica univocamente o filme (no conjunto dos filmes) − nome: string que representa o nome do filme

− ano_estreia: ano de lançamento do filme

− lugar_top_250: número que indica o lugar que o filme ocupa no top-250 da IMDB (0, se não está no top).

Exemplo:

% O filme Rear Window:

% é identificado pelo número 249003; % estreou em 1954;

% está no 14º lugar no top-250 da IMDB. filme(249003, ‘Rear Window’, 1954, 14).

2.3 Informação sobre as relações entre filmes, pessoas e actividades

Um realizador pode fazer vários filmes; um actor pode entrar em vários filmes; um filme pode ter vários realizadores; um filme pode ter vários actores; uma pessoa pode entrar num filme como actor, realizador, etc. Desde modo, existe na base dados a estrutura que se segue, que permite captar essas relações:

participa(p_id, f_id, a_id). em que:

− p_id: id de uma pessoa − f_id: id de um filme − a_id: id de uma actividade. Exemplo:

%A pessoa 831998 tem a actividade 5 no filme 249003 participa(831998, 249003, 5).

(3)

2.4 Informação sobre os Óscares

A base de dados contém informação sobre os Óscares, que é representada pela estrutura que se segue:

oscar(id, a_id, nome). em que:

− id: número que identifica univocamente o tipo do Óscar (no conjunto dos óscares)

− a_id: id da actividade associada

− nome: string que representa o nome do Óscar. Exemplo:

% O Óscar de Melhor Realizador: % é identificado pelo número 6; % está associado à actividade 5.

oscar(6, 5, ‘Oscar de Melhor Realizador’).

Os Óscares podem ser relacionados com as pessoas do seguinte modo: nomeada(p_id, f_id, a_id, ganhou?).

em que:

− p_id: id de uma pessoa − f_id: id de um filme

− a_id: id da actividade pela qual a pessoa foi nomeada para um Óscar

− ganhou?: booleano que indica se o Óscar foi ganho ou não (0 se não; 1 se sim). Exemplo:

% A pessoa 831998:

% foi nomeada no filme 249003; % pela sua actividade como 5; % mas não ganhou o Óscar.

nomeado(831998, 249003, 5, 0).

3. Funcionalidades a implementar

No projecto deverão ser implementadas um conjunto de funcionalidades. Segue-se uma breve descrição das funcionalidades a implementar, bem como a cabeça das cláusulas que deverão implementar essa funcionalidade:

(1) Quais os filmes em que participou uma dada pessoa como actor/realizador/...? filmes(P_id, A_id): devolve uma lista contendo os nomes dos filmes em que participou a pessoa P_id com a actividade A_id (0 se a lista for vazia);

(4)

filmes(P_id): devolve uma lista contendo os nomes dos filmes em que participou a pessoa P_id (0 se a lista for vazia). Se uma pessoa participou com actividades diferentes no mesmo filme, o nome do filme deve aparecer repetido tantas vezes quanto essas participações;

(3) Qual o elenco de um dado filme?

elenco(F_id): devolve uma lista contendo os nomes dos actores e actrizes participantes no filme F_id (0 se a lista for vazia);

(4) Quais as nomeações de uma pessoa com uma data actividade (independentemente de os ter ganho ou não)?

nomeacao(P_id, A_id): devolve uma lista de pares que têm no primeiro argumento o nome do filme para o qual a pessoa foi nomeada com a actividade A_id e no segundo o tipo de Óscar em causa;

(5) Para quantos Óscares foi nomeada uma dada pessoa (independentemente da actividade que desempenha e de os ter ganho ou não)?

nomeacoes(P_id): devolve o número de Óscares para os quais foi nomeada a pessoa P_id (independentemente de os ter ganho ou não);

(6) Qual o número de Óscares ganhos por um dado filme?

num_oscares_f(F_id): devolve o número de Óscares, efectivamente ganhos pelo filme F_id; (7) Qual a pessoa que entrou em mais filmes como actor/realizador/...?

participou_em_mais_filmes(A_id): devolve o par que tem no primeiro argumento o nome da pessoa que participou em mais filmes como A_id e no segundo o número de filmes em que participou. Em caso de empate, devolve um qualquer dos pares empatados;

(8) Quais os filmes em que contracenam um ou mais actores?

contracenam(Lista_P_ids): devolve uma lista contendo os Ids dos filmes em que participaram todas as pessoas cujas P_ids estão na lista não vazia Lista_P_ids (0 se não existe tal filme);

(9) Qual a pessoa mais bem cotada no top-250?

bem_cotado: devolve um par que tem no primeiro argumento o nome da pessoa mais bem cotada no top-250 e no segundo a sua cotação. Este cálculo é feito somando, para cada posição ocupada na tabela, (250 – posição ocupada), independentemente da actividade da pessoa no filme. Se uma pessoa não entrou em nenhum filme do top-250, tem -1. Em caso de empate, é devolvida a pessoa mais nova.

(10) Qual o par actor/realizador mais bem cotado no top-250?

bem_cotados: devolve o triplo contendo no primeiro argumento o nome do actor mais bem cotado no top-250, no segundo argumento o nome do realizador mais bem cotado no top-250 e no terceiro a soma das respectiva cotações. O cálculo das cotações é o

(5)

mesmo que o implementado na funcionalidade (9), mas desta vez, em caso de empate, é devolvido o triplo com o actor mais novo.

4. Detalhes da implementação

4.1.1 Ferramenta

Vai ser usado o swi-prolog (ferramenta com a qual vai ser avaliado o projecto). Informação sobre o swi-prolog pode ser consultada em http:/www.swi-prolog.org/, onde se podem também obter as ferramentas para as várias plataformas.

4.1.2 Regras a implementar e formato dos resultados

Os alunos terão de implementar no ficheiro vip.pl (e apenas neste ficheiro) um conjunto de regras cujas cabeças são as apresentadas na secção 3 e que implementam as funcionalidades aí descritas. Note que:

o O código a entregar deve estar ÚNICA e EXCLUSIVAMENTE no ficheiro vip.pl; o O ficheiro vip.pl não deve carregar a BDvip.pl.

Em relação ao formato de saída, no caso de o resultado ser uma lista, este deverá ter a seguinte forma: e1 ... en + em que:

o cada ei ocupa a PRIMEIRA posição da linha

o na linha imediatamente a seguir ao último ei, existe um (e um só) “+”

No caso em que o resultado é um par (a1, a2), um triplo (a1, a2, a3), ou uma lista de

pares [(a1, a2), ... (an, an+1)] o resultado deverá ter a forma:

a1 a2 ... an an+1 + em que:

o cada ai ocupa a PRIMEIRA posição da linha

o cada número ou nome de actor/actriz/realizador/filme ocupa uma linha o na última linha existe um (e um só) “+”.

(6)

4.1.3 Como testar o programa

Supondo que as cláusulas anteriormente discutidas estão definidas em vip.pl e que está igualmente definido o ficheiro teste.pl com o seguinte conteúdo:

start :- carregaDados, testes.

carregaDados :- ['BDvip.pl'], [‘vip.pl’]. testes :- ...

a seguinte linha de comando3:

swipl -s teste.pl -g start -t halt > resultados.txt

permitirá guardar os resultados do programa no ficheiro resultados.txt. Para poder testar o seu programa o ficheiro teste.pl está disponível, assim como o ficheiro resultados.txt que contém os resultados relativos a esses testes.

5. Relatório

O relatório deverá ter um máximo de 5 páginas (ver template em anexo) e um máximo de 10 000 caracteres (incluindo espaços). Este relatório deverá incluir:

o uma breve descrição da implementação de cada funcionalidade e a motivação para as decisões tomadas;

o uma breve descrição dos principais problemas encontrados ao longo da realização do projecto e uma explicação das respectivas soluções.

6. Informações importantes 6.1 Grupos

Serão aceites grupos de 2 e 3 alunos.

6.2 Avaliação

Cotação (sobre 20 valores)

Avaliação

IMPLEMENTAÇÃO 15 valores

- Avaliação Automática (12 valores); - Qualidade do código (3 valores).

Cotação (sobre 20 valores)

Avaliação

RELATÓRIO 5 valores

- Será tida em conta a qualidade do relatório em relação aos seguintes pontos: organização, clareza e qualidade da escrita.

3 A chamada ao Prolog varia nas diferentes plataformas (por exemplo, para windows deve usar-se plcon.exe, em linux deve usar-se pl e em Mac (ppc) deve usar-se /opt/local/bin/swipl).

(7)

Notas:

Caso se detectem cópias os alunos terão 0 no projecto e não poderão fazer LP este semestre. 6.3 Processo de entrega

Descrição Penalização

(sobre 20 valores) Formato de entrega - NUM-GRUPO.zip (ex: 71.zip) que

deverá conter:

o O ficheiro vip.pl;

o O relatório em formato .pdf. - Papel:

o O código de vip.pl; o O relatório de acordo com

a template dada.

O desrespeito por qualquer um destes formatos levará à não avaliação do projecto.

Data de entrega - NUM-GRUPO.zip

o Até às 15h de 28 de Maio de 2008 (quarta-feira) - Papel o Até às 15h de 28 de Maio de 2008 (quarta-feira) - 2 valores se entregue até 24 horas de atraso; - 4 valores se entregue até 48 horas de atraso; - Não serão aceites projectos a partir das 48 horas de atraso.

Modo de entrega - NUM-GRUPO.zip (e NÃO RAR!!!!!!) o Através do Fénix - Papel

o Repografia do DEI (Alameda) o Secretariado do DEI (Tagus)

das 10h-12h30 e 14h-16h

O não cumprimento do modo de entrega levará à não avaliação do projecto.

Referências

Documentos relacionados

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

A solução, inicialmente vermelha tornou-se gradativamente marrom, e o sólido marrom escuro obtido foi filtrado, lavado várias vezes com etanol, éter etílico anidro e

No entanto, para aperfeiçoar uma equipe de trabalho comprometida com a qualidade e produtividade é necessário motivação, e, satisfação, através de incentivos e política de

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

(...) o controle da convencionalidade em sede internacional seria um mecanismo processual que a Corte Interamericana de Direitos Humanos teria para averiguar se o direito