Trabajo Práctico 2 Programación Lógica

Documentos relacionados
Trabajo Práctico Redes Neuronales Artificiales

Materia: Tecnología de la Información. Profesor: Ariana Rosenthal Cátedra: Silvia Koklia FCE UBA. Tema: Instructivo de Access

PISIS Cliente Neo. Guía de Instalación y Uso Versión del documento: 1.8 Fecha: Octubre 10 de 2014

Dualidad y sensitividad

BASES DE DATOS. TEMA 5. El modelo de datos relacional

Eurowin 8.0 SQL. Manual de EW-LOG. Revisión de incidencias

Procedimiento P7-SIS Revisión

Curso de Excel Con la realización de este curso se pretende capacitar al alumno para poder realizar

NOCIÓN INTUITIVA DE CONJUNTO

Tema 4B. Inecuaciones

ANEXO 8 INDICADORES DE CALIDAD Y PROCESO DE GESTIÓN DE RECLAMOS

Instalación de Winisis en Windows 7 64 bits Ernesto Spinak 28/06/2011, borrador 1.3

65 HORAS. documentos. describe el. información. de la suite. Pág.1

NORMAS 13.2 kv MONTAJE DE BANCO DE TRANSFORMADORES CONEXIÓN Y ABIERTA DELTA ABIERTA

TABLA DE CONTENIDO INTRODUCCIÓN 3. Por Tomador 15 OBJETIVOS DEL SISTEMA 3. Historia 16 OBJETIVOS DEL PRESENTE MANUAL. Informado por fecha 17

Administración Local Soluciones

Envío de Factura Electrónica por Mail

Manual General de Usuario del Proceso. P35 Recibos Digitales. 1.1 Objetivos 1.2 ROLES 1.3 Flujo 2 Inicio del proceso - Carga de archivos de nómina

Segmentación dinámica de mercados B2B

Guía SERVICIOS WEB PARA BIBLIOTECAS EN DICCIONARIO. (19 julio 2012)

efactura Red Eléctrica

CALCULADORA KERO KET021

Curso de Access 2007

Logger registrador de sonido para la pre localización de fugas de agua

PLANIFICACIÓN DBA 1 V. 10G

LIBRO DE CLASES ELECTRÓNICO Manual de Usuario Administrativo OTEC ACEPTA S.A.

Correo en tu Tigo, por SMS

Contrato de Servicio

MANUAL DE USUARIO MODELO WEB DESPACHO IDEAL - MODO SIMULACIÓN

Registro de Documentación de Actividades Reguladas RINR art. 74

CERRADURAS PARA CONTROL DE ACCESO

SERVIDOR VIRTUAL IPLAN

PIROUETT! THE RHYTHMIC GYMNASTICS HELP DESK November 2013

Cuaderno de trabajo Versión inicial Monográfico 7. Proceso de selección. Nombre y apellidos: Curso: Grupo:

Tema 3: Las clases de palabras. Los sustantivos

Procedimiento a seguir para agendar una cita en el portal de MEXITEL.

Guía de integración del módulo de Redsys en Magento

Equipos de respaldo de energía eléctrica UPS, SPS

AVANCE SOLUCIONES INFORMÁTICAS. Preguntas Frecuentes SGTaller. Cómo respaldo la información del programa?

PLAN ANUAL DE CONTRATACIONES INSTRUCTIVO PARA EL MANEJO DEL FORMATO DEL PLAN ANUAL DE CONTRATACIONES DE LAS ENTIDADES DEL SECTOR PUBLICO

Manual para instalación de Teléfono Virtual: X Lite.

ANEXO Nº 9. SOLUCIONES PROPUESTAS AL TRÁFICO, SEÑALIZACIÓN Y SEGURIDAD VIAL TEMPORAL

Bases de Datos Relacionales

CASO 9187 Se corrige falla que borra el SLA de los casos relacionados entre sí luego de que se ejecute una regla que modifique casos relacionados.

Instituto de Seguridad Social Seguros y Préstamos

Cómo Escribir un Documento Técnico

FXSCAPE. Esta herramienta Windows permite aprovechar las ventajas de la actual tecnología para el mejor manejo de FxScape; entre estas tenemos:

Su informe de crédito

Monitoreo y Control Remoto del Proyecto Nogales

LOCALIZACIÓN EN LA PROGRAMACIÓN DE AULA ÁREA Tecnología CURSO 3º E.S.O.

TELEFONÍA CLOUD IPLAN

Recomendaciones introducción factura electrónica a través de FACe. Indice

CRISTALOGRAFÍA GEOMÉTRICA. TEMA 3 SIMETRÍA y REDES

Manual de Usuario Público Portal BI

Navegación y Administración en egela (Moodle 2.5)

Bases de Datos Relacionales

Instalación y Configuración de la interfaz de TPV.

Direccionamiento IP. Realice una tabla como la que se muestra y agregue s. Tome como ejemplo el número

DISEÑO Y FABRICACIÓN DE UN TRANSFORMADOR MONOFÁSICO

Sistema Integral de Gestión y Evaluación

PLANIFICACIÓN DE LA SESIÓN DE APRENDIZAJE. Dividiendo terrenos II. APRENDIZAJES ESPERADOS COMPETENCIA CAPACIDADES INDICADORES

Método para hacer un comentario de un texto escrito según Adela Cortina.

PLANIFICACIÓN DE LA SESIÓN DE APRENDIZAJE. Empleamos la groma para dividir regiones II. APRENDIZAJES ESPERADOS COMPETENCIA CAPACIDADES INDICADORES

Sesiones 2-3: Transformación de datos

DISEÑO Y FABRICACIÓN DE UN SISTEMA DE REPULSIÓN ELECTROMAGNÉTICA

Control de la cantidad de productos en una reacción química

Sistemas de numeración

UNIVERSDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO. Tema 9.- Elementos básicos de Prolog

PRÁCTICAS PARA EL USO DE LA CALCULADORA CASIO MODELOS FX-570MS, FX-100MS

GUÍA PARA LA PRESENTACIÓN DE PONENCIAS.

Guía de integración del módulo de Redsys en WooCommerce

API PASARELA SMS HTTP

COMERZZIA. Manual de Usuario TIENDA VIRTUAL MP SISTEMAS

Transcripción:

Trabaj Práctic Prgramación Lógica Paradigmas de Lenguajes de Prgramación 1 cuat. 9 Fecha de entrega: 9 de juni 1. Intrducción Este trabaj cnsiste en prgramar en Prlg un cnjunt de predicads para reslver un rmpecabezas vagamente reminiscente al tetris al pentmin puzzle, sujet a algunas restriccines adicinales. 1.1. Descripción del prblema Se tiene una cuadrícula de n m psicines, y un cnjunt de piezas, frmadas pr cuadradits cntigus (cm piezas de tetris). Cada cuadradit de cada pieza tiene asciad un pes. Tds ls cuadradits de una pieza dada pesan l mism. Dad un cnjunt de piezas, el prblema es encntrar alguna manera de ubicarlas tdas en el tabler, sin encimarlas. Pr ejempl, si se tienen las piezas y el tabler que se muestran en la figura, 6 6 6 1 1 1 1 1 la siguiente es una manera psible de ubicarlas: 1 1 1 1 1 6 6 6 Además de usar tdas las piezas, se impne cm restricción adicinal que las filas y las clumnas del tabler tengan un ciert pes. En el ejempl, el pes de la primera fila es 6, y el pes de la tercera clumna es 8. Estas 1

restriccines frmarán parte de la entrada, de la manera que se explica más abaj. La frma sugerida de reslver el ejercici es utilizand la técnica generate and test: se generan tdas las frmas de ubicar las piezas dadas en el tabler (psibles candidatas a slución) y se filtran, devlviend slamente aquellas que cumplan las restriccines sbre el pes de las filas y de las clumnas.. Tablers y juegs Un tabler se representa cn una lista de filas. Cada fila es, a su vez, una lista de elements. Un jueg es un tabler que cntiene, además, restriccines sbre las filas y sbre las clumnas, y se representa cn un términ de la frma jueg(tabler, RF, RC), dnde Tabler es un tabler, y RF y RC sn listas. La lista RF cntiene un element pr fila, que determina cuál debe ser el pes de esa fila. La lista RC es similar, per para las clumnas. Se puede asumir que la entrada está bien frmada, es decir que tdas las filas miden l mism, y ls tamañs de RF y RC sn ls crrects. En el archiv mstrar.pl prvist pr la cátedra, se dispne de predicads mstrarjueg(+jueg) y mstrartabler(+tabler) que imprimen un jueg un tabler en la pantalla. El siguiente ejempl crrespnde a un jueg ya terminad:? mstrarjueg(jueg([[1, 1, 1], [,, ], [3, 3, 3], [4, 4, 4]], [3, 6, 9, 1], [1, 1, 1])). 1 1 1 + 3 1 1 1 6 9 3 3 3 1 4 4 4 Para indicar que una psición del tabler está vacía, se clcan variables n instanciadas en esa psición. A medida que se va llenand el tabler, estas variables se van instanciand cn ls valres finales. Inicialmente, un tabler puede estar ttalmente vací, puede cntener bstáculs, que n pueden ser cupads cn piezas. Alg similar curre cn las restriccines: pueden estar dadas de anteman (si sn númers), pueden ser variables n instanciadas si n se desea restringir el valr de la suma de la fila de la clumna. Pr ejempl, el siguiente tabler tiene ds lugares ya cupads, que n pueden pisarse cn piezas. Además, sól hay restriccines sbre la segunda fila y sbre la tercera clumna.

? mstrarjueg(jueg([[,, ], [,, ], [,, ], [,, ]], [, 7,, ], [,, 3])). 3 + 7 En Prlg, puede diferenciarse entre un valr que tdavía n fue instanciad y un valr que ya se encuentra instanciad utilizand ls predicads var (...) y nnvar (...). Ejercici 1 Escribir ls siguientes predicads: dimensin(+tabler, N, M), que es verdader si y sól si el tabler tiene N filas y M clumnas. (Puede asumirse que el tabler está bien frmad). psicin(+tabler, I, J), que es verdader si y sól si la fila I y la clumna J determinan una psición válida del tabler. Pr ejempl:? psicin([[1,, 3], [4, 5, 6]], I, J). I =, J = ; I =, J = 1 ; I =, J = ; I = 1, J = ; I = 1, J = 1 ; I = 1, J =. Ejercici Escribir el predicad subtabler(+tabler, +I, +J, Subtabler), que es verdader si y sól si Subtabler cntiene ls misms elements que Tabler, empezand desde la fila I y la clumna J. Se puede asumir que I y J están en el rang crrect. Pr ejempl: 3

? Tabler = [[1,, 3, 4], [5, 6, 7, 8], [9, 1, 11, 1], [13, 14, 15, 16]], subtabler(tabler,, 1, Subtabler), mstrartabler(subtabler). 1 11 1 14 15 16 Subtabler = [[1, 11, 1], [14, 15, 16]]. Ejercici 3 Escribir el predicad transpner(+tabler, Transpuest), que es verdader si y sól si Transpuest es el tabler Tabler transpuest. Pr ejempl:? Tabler = [[1,, 3], [4, 5, 6]], transpner(tabler, Transpuest), mstrartabler(transpuest). 1 4 5 3 6 Transpuest = [[1, 4], [, 5], [3, 6]] ; 3. Siluetas y piezas Hasta esta sección n se mencinó la psibilidad de que las piezas estén rientadas (mediante rtacines). Para simplificar la prgramación, si una pieza tiene varias rientacines, deben estar especificadas explícitamente cm parte de la entrada. Llamams silueta a un mlde que dice qué psicines están cupadas. En particular, una pieza se representa de igual manera que un tabler, cm una lista de filas. La psicines vacías se representan cn variables n instanciadas. Las psicines cupadas se representan cn algún átm (pr ejempl, x). Eventualmente el átm puede ser un númer que indica el pes del cuadradit. Pr ejempl: Se representa cn la siguiente silueta:? Silueta = [[,, x], [, x, x], [x, x, ]], mstrartabler(silueta). x 4

Ejercici 4 Escribir el predicad asignarpes(+silueta, +Pes, SiluetaCnPes), que sea verdader si y sól si SiluetaCnPes es una silueta de la misma frma que Silueta, dnde cada psición cupada se reemplaza pr el númer Pes. Pr ejempl:? Silueta = [[,, x], [, x, x], [x, x, ]], asignarpes(silueta, 1, SiluetaCnPes), mstrartabler(siluetacnpes). 1 1 1 1 1 Ejercici 5 Escribir el predicad ubicarsilueta (+Silueta, I, J, Tabler), que sea verdader si y sól si la silueta Silueta puede ubicarse en la fila I y en la clumna J del tabler Tabler, sin pasarse de ls brdes y sin pisar psicines ya cupadas. Si hay más de una psición (I, J) en la que pueda ubicarse la silueta, el predicad debe devlverlas tdas. El predicad recibe un tabler parcialmente instanciad: debe ser una lista de las dimensines adecuadas, per puede cntener algunas psicines vacías (i.e. variables n instanciadas). Además, cada vez que el predicad tenga éxit, deben instanciarse las variables del tabler que pasarn a encntrarse cupadas pr la silueta. Pr ejempl, cnsiderand las siguientes definicines, tabler1([ [,,, ], [,,, ], [,,, ], [,,, ] ]). silueta1([ [x, x], [, x] ]). que representan la silueta y el tabler en la figura: 5

x deben devlverse las siguientes slucines.? tabler1(t), silueta1(s), ubicarsilueta(s, I, J, T), mstrartabler(t). I = J = 1 I = J = x x I = 1 J = I = J = x x Observar que n puede cuparse una psición del tabler que ya se encuentre cupada, aunque el cntenid de esa psición cincida cn el cntenid del cuadradit de la silueta que se desea ubicar. Pr tra parte, una pieza es un cnjunt de siluetas. La intención es que las siluetas asciadas a una pieza representen una psible rientación de la pieza (pr ejempl, la pieza rtada 9 grads). Las piezas se representan usand una lista de rientacines. Cada element de la lista es de la frma rientacin (NmbrePieza, Silueta). Pr ejempl el siguiente predicad, algunaspiezas( Piezas): algunaspiezas([ rientacin(palit, [[x, x, x, x]]), rientacin(palit, [[x], [x], [x], [x]]), rientacin(ele, [[x, ], [x, ], [x, x]]), rientacin(ele, [[,, x], [x, x, x]]), rientacin(ele, [[x, x], [, x], [, x]]), rientacin(ele, [[x, x, x], [x,, ]]), rientacin(ese, [[, x, x], [x, x, ]]), rientacin(ese, [[x, ], [x, x], [, x]]) ]). 6

es verdader para un diccinari de piezas que representa l que se ilustra a cntinuación: palit ele ese Ejercici 6 Escribir el predicad ubicarpieza(+nmbrepieza, +Pes, +DiccPiezas, I, J, Tabler), que sea verdader si y sól si la pieza identificada pr el nmbre NmbrePieza se puede rientar de alguna manera y ubicarse en la fila I y en la clumna J del tabler Tabler, haciend que cada cuadradit de la silueta pese Pes. Si hay más de una rientación y una psición en la que se pueda ubicar, se deben devlver tdas las slucines psibles. Pr ejempl, cn esta definición de tabler, tabler([ [,,, ], [, 1,, ], [, 3, 4, ], [,, 5, ] ]). la cnsulta:? algunaspiezas(diccpiezas), tabler(tabler), ubicarpieza(ele,, DiccPiezas, I, J, Tabler), mstrartabler(tabler). debe devlver las siguientes slucines. 7

I = 1 J = I = J = I = J = 1 3 4 5 1 3 4 5 1 3 4 5 4. Slución del rmpecabezas Ejercici 7 Escribir el predicad slucinvalida ( Jueg), que sea verdader si y sól si ls númers ubicads en el tabler cumplen las restriccines de filas y clumnas. El jueg estará parcialmente instanciad: tds ls elements del tabler deben ser númers, per las restriccines de filas y clumnas pueden estar n cmpletamente instanciadas. Pr ejempl:? Jueg = jueg([[1,, 3], [4, 5, 6]], RF, RC), slucinvalida(jueg), mstrarjueg(jueg). 5 7 9 + 6 1 3 15 4 5 6 RF = [6, 15], RC = [5, 7, 9] ;? Jueg = jueg([[1,, 3], [4, 5, 6]], [6, 15], [SumaClumna1, 7, ]), slucinvalida(jueg). SumaClumna1 = 5 ;? Jueg = jueg([[1,, 3], [4, 5, 6]], [1, ], ), slucinvalida(jueg). fail. Ejercici 8 Escribir el predicad reslver (+DiccPiezas, +PiezasDispnibles, Jueg), que sea verdader si y sól si hay una manera de reslver el jueg usand las piezas dadas. El cnjunt de piezas dispnibles se recibe en PiezasDispnibles, que es una lista de elements de la frma pieza(nmbrepieza, Pes). El predicad debe instanciar las partes del tabler y las restriccines del jueg que 8

n se encuentren instanciadas. Si hay más de una slución, deben devlverse tdas las psibles. N se deben devlver slucines repetidas, aunque puede haber slucines simétricas. Pr ejempl, cn esta definición de jueg, jueg(jueg([ [1,,, 7], [,,, ], [,,, ], [,, 5, ] ], [,,, ], [4, 6, 11, 16])). la cnsulta:? jueg(jueg), algunaspiezas(diccpiezas), PiezasDispnibles = [ pieza(ese, ), pieza(ele, 3), pieza(ese, 1)], reslver(diccpiezas, PiezasDispnibles, Jueg), mstrarjueg(jueg). debería devlver ds slucines: 4 6 11 16 + 1 1 7 1 3 3 5 1 1 3 1 1 1 5 3 4 6 11 16 + 1 1 1 1 7 8 1 1 3 3 7 3 1 5 3 5. Predicads útiles var(?x) y nnvar(?x). Observar que nnvar(x) es equivalente a nt(var(x)).? var(x). true.? var(4). fail.? X = 4, var(x). fail. 9

between(+lw, +High, Value).? between(1, 1, X). X = 1 ; X = 11 ; X = 1. length(+list, Int).? length([ cer, un, ds, tres ], N). N = 4. member( Elem, +List).? member(x, [cer, un, ds, tres ]). X = cer ; X = un ; X = ds ; X = tres. nth(+index, +List, Elem).? nth(, [cer, un, ds, tres ], X). X = ds. Pautas de entrega Se debe entregar el códig impres cn la implementación de ls predicads pedids. Cada predicad debe cntar cn un cmentari dnde se explique su funcinamient. Cada predicad asciad a ls ejercicis debe cntar cn ejempls que muestren que exhibe la funcinalidad slicitada. Además, se debe enviar un e-mail cnteniend el códig fuente en Prlg a la dirección plp-dcentes@dc.uba.ar. Dich mail debe cumplir cn el siguiente frmat: El subject debe ser [PLP;TP-PL] seguid inmediatamente del nmbre del grup. El códig Prlg debe acmpañar el e-mail y l debe hacer en frma de attachment (puede adjuntarse un.zip.tar.gz). El códig debe pder ser ejecutad en SWI-Prlg. N es necesari entregar un infrme sbre el trabaj, alcanza cn que el códig esté adecuadamente cmentad. Ls bjetivs a evaluar en la implementación de ls predicads sn: 1

Crrección. Declaratividad. Reus de predicads previamente definids. Us de unificación, backtracking y reversibilidad de ls predicads que crrespndan. Salv dnde se indique l cntrari, ls predicads n deben instanciar slucines repetidas. Vale aclarar que n es necesari filtrar las slucines repetidas si la repetición prviene de las características de la entrada (pr ejempl, si hay ds piezas iguales). Imprtante: se admitirá un únic enví, sin excepción alguna. Pr favr planifiquen el trabaj para llegar a tiemp cn la entrega. 11