Prject de Lógica para Prgramaçã Videteca em Prlg (2007-2008 2º semestre) 1. Intrduçã A base de dads BDvip.pl cntém infrmaçã sbre cinema - nmeadamente infrmaçã relativa a actres/realizadres, filmes e Óscares, retirada da IMDB e OSCAR.cm 1 - cdificada em facts em Prlg. Essa infrmaçã pde ser cruzada permitind descbrir que actres cntracenam num dad filme, para quants Óscares fi nmead um dad actr, etc. O prject VIP (VIdeteca em Prlg) tem cm bjectiv a implementaçã de um prgrama em Prlg que permite bter infrmaçã variada sbre cinema cm base na BDvip.pl 2. 2. A base de dads BDvip.pl 2.1 Infrmaçã sbre pessas e suas actividades A base de dads cntém infrmaçã básica sbre pessas cm a seguinte estrutura: pessa(id, nme, an_nasciment, an_mrte). id: inteir que identifica univcamente a pessa (n cnjunt das pessas) nme: string que representa nme pel qual é cnhecida a pessa an_nasciment e an_mrte sã, respectivamente, an de nasciment/mrte da pessa (0000 se as datas sã descnhecidas). Exempl: % A pessa Alfred Hitchcck: % é identificada pel númer 831998, nasceu em 1899 e mrreu em 1980. pessa(831998, Alfred Hitchcck, 1899, 1980). Dad que várias actividades pdem ser assciadas a uma pessa em cinema (actr, argumentista, prdutr, etc.), existe a seguinte estrutura de dads: actividade(id, nme). 1 Respectivamente http://www.imdb.cm/ e http://www.scars.cm/. 2 Para a realizaçã d prject será dada as aluns, para teste, um subcnjunt da base de dads riginal. 1
id: inteir que identifica univcamente uma actividade (n cnjunt das actividades); nme: string que representa nme da actividade. Exempl: % O númer 5 representa a actividade de realizadr actividade(5, realizadr ). 2.2 Infrmaçã sbre filmes A base de dads cntém infrmaçã genérica sbre filmes, cm a seguinte estrutura: filme(id, nme, an_estreia, lugar_tp_250). id: inteir que identifica univcamente filme (n cnjunt ds filmes) nme: string que representa nme d filme an_estreia: an de lançament d filme lugar_tp_250: númer que indica lugar que filme cupa n tp-250 da IMDB (0, se nã está n tp). Exempl: % O filme Rear Windw: % é identificad pel númer 249003; % estreu em 1954; % está n 14º lugar n tp-250 da IMDB. filme(249003, Rear Windw, 1954, 14). 2.3 Infrmaçã sbre as relações entre filmes, pessas e actividades Um realizadr pde fazer váris filmes; um actr pde entrar em váris filmes; um filme pde ter váris realizadres; um filme pde ter váris actres; uma pessa pde entrar num filme cm actr, realizadr, etc. Desde md, existe na base dads a estrutura que se segue, que permite captar essas relações: participa(p_id, f_id, a_id). p_id: id de uma pessa f_id: id de um filme a_id: id de uma actividade. Exempl: %A pessa 831998 tem a actividade 5 n filme 249003 participa(831998, 249003, 5). 2
2.4 Infrmaçã sbre s Óscares A base de dads cntém infrmaçã sbre s Óscares, que é representada pela estrutura que se segue: scar(id, a_id, nme). id: númer que identifica univcamente tip d Óscar (n cnjunt ds óscares) a_id: id da actividade assciada nme: string que representa nme d Óscar. Exempl: % O Óscar de Melhr Realizadr: % é identificad pel númer 6; % está assciad à actividade 5. scar(6, 5, Oscar de Melhr Realizadr ). Os Óscares pdem ser relacinads cm as pessas d seguinte md: nmeada(p_id, f_id, a_id, ganhu?). p_id: id de uma pessa f_id: id de um filme a_id: id da actividade pela qual a pessa fi nmeada para um Óscar ganhu?: blean que indica se Óscar fi ganh u nã (0 se nã; 1 se sim). Exempl: % A pessa 831998: % fi nmeada n filme 249003; % pela sua actividade cm 5; % mas nã ganhu Óscar. nmead(831998, 249003, 5, 0). 3. Funcinalidades a implementar N prject deverã ser implementadas um cnjunt de funcinalidades. Segue-se uma breve descriçã das funcinalidades a implementar, bem cm a cabeça das cláusulas que deverã implementar essa funcinalidade: (1) Quais s filmes em que participu uma dada pessa cm actr/realizadr/...? filmes(p_id, A_id): devlve uma lista cntend s nmes ds filmes em que participu a pessa P_id cm a actividade A_id (0 se a lista fr vazia); (2) Quais s filmes em que participu uma dada pessa (independentemente da actividade desempenhada)? 3
filmes(p_id): devlve uma lista cntend s nmes ds filmes em que participu a pessa P_id (0 se a lista fr vazia). Se uma pessa participu cm actividades diferentes n mesm filme, nme d filme deve aparecer repetid tantas vezes quant essas participações; (3) Qual elenc de um dad filme? elenc(f_id): devlve uma lista cntend s nmes ds actres e actrizes participantes n filme F_id (0 se a lista fr vazia); (4) Quais as nmeações de uma pessa cm uma data actividade (independentemente de s ter ganh u nã)? nmeaca(p_id, A_id): devlve uma lista de pares que têm n primeir argument nme d filme para qual a pessa fi nmeada cm a actividade A_id e n segund tip de Óscar em causa; (5) Para quants Óscares fi nmeada uma dada pessa (independentemente da actividade que desempenha e de s ter ganh u nã)? nmeaces(p_id): devlve númer de Óscares para s quais fi nmeada a pessa P_id (independentemente de s ter ganh u nã); (6) Qual númer de Óscares ganhs pr um dad filme? num_scares_f(f_id): devlve númer de Óscares, efectivamente ganhs pel filme F_id; (7) Qual a pessa que entru em mais filmes cm actr/realizadr/...? participu_em_mais_filmes(a_id): devlve par que tem n primeir argument nme da pessa que participu em mais filmes cm A_id e n segund númer de filmes em que participu. Em cas de empate, devlve um qualquer ds pares empatads; (8) Quais s filmes em que cntracenam um u mais actres? cntracenam(lista_p_ids): devlve uma lista cntend s Ids ds filmes em que participaram tdas as pessas cujas P_ids estã na lista nã vazia Lista_P_ids (0 se nã existe tal filme); (9) Qual a pessa mais bem ctada n tp-250? bem_ctad: devlve um par que tem n primeir argument nme da pessa mais bem ctada n tp-250 e n segund a sua ctaçã. Este cálcul é feit smand, para cada psiçã cupada na tabela, (250 psiçã cupada), independentemente da actividade da pessa n filme. Se uma pessa nã entru em nenhum filme d tp-250, tem -1. Em cas de empate, é devlvida a pessa mais nva. (10) Qual par actr/realizadr mais bem ctad n tp-250? bem_ctads: devlve tripl cntend n primeir argument nme d actr mais bem ctad n tp-250, n segund argument nme d realizadr mais bem ctad n tp-250 e n terceir a sma das respectiva ctações. O cálcul das ctações é 4
mesm que implementad na funcinalidade (9), mas desta vez, em cas de empate, é devlvid tripl cm actr mais nv. 4. Detalhes da implementaçã 4.1.1 Ferramenta Vai ser usad swi-prlg (ferramenta cm a qual vai ser avaliad prject). Infrmaçã sbre swi-prlg pde ser cnsultada em http:/www.swi-prlg.rg/, nde se pdem também bter as ferramentas para as várias platafrmas. 4.1.2 Regras a implementar e frmat ds resultads Os aluns terã de implementar n ficheir vip.pl (e apenas neste ficheir) um cnjunt de regras cujas cabeças sã as apresentadas na secçã 3 e que implementam as funcinalidades aí descritas. Nte que: O códig a entregar deve estar ÚNICA e EXCLUSIVAMENTE n ficheir vip.pl; O ficheir vip.pl nã deve carregar a BDvip.pl. Em relaçã a frmat de saída, n cas de resultad ser uma lista, este deverá ter a seguinte frma: e 1... e n + cada e i cupa a PRIMEIRA psiçã da linha na linha imediatamente a seguir a últim e i, existe um (e um só) + N cas em que resultad é um par (a 1, a 2 ), um tripl (a 1, a 2, a 3 ), u uma lista de pares [(a 1, a 2 ),... (a n, a n+1 )] resultad deverá ter a frma: a 1 a 2... a n a n+1 + cada a i cupa a PRIMEIRA psiçã da linha cada númer u nme de actr/actriz/realizadr/filme cupa uma linha na última linha existe um (e um só) +. PROJECTOS QUE NÃO RESPEITEM ESTE FORMATO DE SAÍDA SERÃO CLASSIFICADOS COM ZERO NA EXECUÇÃO! 5
4.1.3 Cm testar prgrama Supnd que as cláusulas anterirmente discutidas estã definidas em vip.pl e que está igualmente definid ficheir teste.pl cm seguinte cnteúd: start :- carregadads, testes. carregadads :- ['BDvip.pl'], [ vip.pl ]. testes :-... a seguinte linha de cmand 3 : swipl -s teste.pl -g start -t halt > resultads.txt permitirá guardar s resultads d prgrama n ficheir resultads.txt. Para pder testar seu prgrama ficheir teste.pl está dispnível, assim cm ficheir resultads.txt que cntém s resultads relativs a esses testes. 5. Relatóri O relatóri deverá ter um máxim de 5 páginas (ver template em anex) e um máxim de 10 000 caracteres (incluind espaçs). Este relatóri deverá incluir: uma breve descriçã da implementaçã de cada funcinalidade e a mtivaçã para as decisões tmadas; uma breve descriçã ds principais prblemas encntrads a lng da realizaçã d prject e uma explicaçã das respectivas sluções. 6. Infrmações imprtantes 6.1 Grups Serã aceites grups de 2 e 3 aluns. 6.2 Avaliaçã IMPLEMENTAÇÃO Ctaçã (sbre 20 valres) 15 valres Avaliaçã - Avaliaçã Autmática (12 valres); - Qualidade d códig (3 valres). RELATÓRIO Ctaçã (sbre 20 valres) 5 valres Avaliaçã - Será tida em cnta a qualidade d relatóri em relaçã as seguintes pnts: rganizaçã, clareza e qualidade da escrita. 3 A chamada a Prlg varia nas diferentes platafrmas (pr exempl, para windws deve usar-se plcn.exe, em linux deve usar-se pl e em Mac (ppc) deve usar-se /pt/lcal/bin/swipl). 6
Ntas: Cas se detectem cópias s aluns terã 0 n prject e nã pderã fazer LP este semestre. 6.3 Prcess de entrega Descriçã Frmat de entrega - NUM-GRUPO.zip (ex: 71.zip) que deverá cnter: O ficheir vip.pl; O relatóri em frmat.pdf. - Papel: O códig de vip.pl; O relatóri de acrd cm a template dada. Data de entrega - NUM-GRUPO.zip Até às 15h de 28 de Mai de 2008 (quarta-feira) - Papel Até às 15h de 28 de Mai de 2008 (quarta-feira) Md de entrega - NUM-GRUPO.zip (e NÃO RAR!!!!!!) Através d Fénix - Papel Repgrafia d DEI (Alameda) Secretariad d DEI (Tagus) das 10h-12h30 e 14h-16h Penalizaçã (sbre 20 valres) O desrespeit pr qualquer um destes frmats levará à nã avaliaçã d prject. - 2 valres se entregue até 24 hras de atras; - 4 valres se entregue até 48 hras de atras; - Nã serã aceites prjects a partir das 48 hras de atras. O nã cumpriment d md de entrega levará à nã avaliaçã d prject. 7