Trabajo Práctico 2: Programación Lógica

Documentos relacionados
MANUAL DE QUEJAS Y RECLAMOS OFICINA DE SISTEMAS E INFORMATICA ESCUELA SUPERIOR DE ADMINISTRACION PÚBLICA

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

MATEMÁTICA CPU MÓDULO 1. Números reales Ecuaciones e inecuaciones. Representaciones en la recta y en el plano.

DIAGRAMAS DE FLUJO ELEMENTOS E INSTRUCCIONES A USAR EN UN DIAGRAMA DE FLUJO

Manual de turbo pascal

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Estructura de Datos: Archivos

Tabla de Símbolos. Programación II Margarita Álvarez

El modo más sencillo de pasar estos datos a STATA es activar el STATA Data Editor e introducir los datos en la interfaz de la hoja de cálculo.

Algoritmos y programas. Algoritmos y Estructuras de Datos I

UNIDAD 8: SUCESIONES Y SERIES

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

Guía de Solicitud de apoyo

Formato para prácticas de laboratorio

5.3 Tipos de Datos en Prolog

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Instituto Tecnológico de Celaya

Apuntes de Lógica Proposicional

CATÁLOGO DE METADATOS GEOGRÁFICOS Versión 2.0

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

FÓRMULAS Y FUNCIONES

Algoritmos y solución de problemas. Fundamentos de Programación Otoño 2008 Mtro. Luis Eduardo Pérez Bernal

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Análisis de Componentes de la Varianza

Bloque temático I. Planear el proyecto de animación en 2D a partir de los requeriemientos del cliente

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Representación de datos y aritmética básica en sistemas digitales

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control

Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Estructuras de Datos Proyecto del curso,

Estructuras Administrativas

Taller de Resolución de Problemas Computacionales

Inecuaciones: Actividades de recuperación.

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

ULADECH Escuela Profesional de Contabilidad

Un Poco de Historia Criptografía, Criptografía Clásica

Análisis y Manejo de datos en Excel 2013 con tablas, funciones y tablas dinámicas

Modelos de Datos. Modelo Entidad-Relación

Programación en java. Estructuras algorítmicas

Contenidos mínimos 1º ES0. 1. Contenidos. Bloque I: Aritmética y álgebra.

Definición de Memoria

Material diseñado para los estudiantes del NUTULA, alumnos del profesor Álvaro Moreno.01/10/2010 Lógica Proposicional

VBA. Visual Basic para Aplicaciones. Guía 1. Visual Basic para Aplicaciones en Office 1

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 7

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

CAPÍTULO II SISTEMAS NUMÉRICOS. Este método de representar los números se llama sistema de numeración decimal, donde 10 es la base del sistema.

TARJETAS: POS INTEGRADO

INGENIERÍA DEL SOFTWARE

SISTEMAS ELECTRÓNICOS DIGITALES

Capítulo 16. Diagrama de Clases UML

UNIDAD 1: NÚMEROS RACIONALES OBJETIVOS

Existen diferentes compuertas lógicas y aquí mencionaremos las básicas pero a la vez quizá las más usadas:

2).- Nombre de función. Para obtener una lista de funciones disponibles, haga clic en una celda y presione MAYÚSC+F3.

PLAN DE UNIDAD 8.1. Enfoque de Contenido. racional positivo.

VARIABLES STRING JAVASCRIPT. DEBEN USARSE COMILLAS SIMPLES O DOBLES? CARACTERES DE ESCAPE \N \T.LENGTH (CU01114E)

PROYECTO 2 Parte 1 BASES DE DATOS. Curso (2 Semestre) Grupos 4F2M y 4F1M-1 (aula 5102) CONSULTAS REMOTAS EN JAVA A UNA BASE DE DATOS

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

Servicios Públicos. Manual de Usuarios Módulo Gastos. Proyecto Implementación UBA. Febrero 2011 Versión 2.0

Ficha Revisar. Grupo Revisión

Las redes semánticas intentan trasladar esa afirmación a un formalismo Una red semántica será un grafo donde:

SCUACAC026MT22-A16V1. SOLUCIONARIO Ejercitación Generalidades de números

Módulo Conversor de Superficies

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

3. DOCUMENTACIÓN 3.1. DOCUMENTACIÓN DE APLICACIONES. OBJETIVOS PARA MODIFICAR HACE FALTA COMPRENDER/ESTUDIAR:

Proyecto 1 parte 2 Diccionario sobre arreglos

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Uso de la función Imprimir y mantener en espera

ING. JONATHAN QUIROGA TINOCO. Desarrollado por Ing. Jonathan Quiroga T.

Sistema de Presentación y Gestión de Proyectos Instructivo para la carga de Proyectos.

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Bases Matemáticas para la Educación Primaria. Guía de Estudio. Tema 3: Números racionales. Parte I: Fracciones y razones Números racionales

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

ESCUELA DE INFORMÁTICA

BLOQUE I: GEOMETRÍA PLANA Y FIGURAS GEOMÉTRICAS. Ecuaciones y sistemas. 2 (20 horas) Funciones y gráficas. 2 (20 horas) Estadística y probabilidad

Guía 1: PATRONES DE REPETICIÓN

Diagramas de Argumentos

TP N 4 Redirección de entrada y salida estándar

Aulas Virtuales IECSCYL. Manual de uso

SERVICIO B2BCONECTA DE FACTURACIÓN INTEGRAL DEL GRUPO RENFE MANUAL DE USUARIO CLIENTE RECEPTOR DE FACTURA ELECTRÓNICA

FORMATO ACCIONES CORRECTIVAS PREVENTIVAS Y DE MEJORA

Universidad Nacional del Santa FACULTAD DE INGENIERIA E.A.P. Ingeniería de Sistemas e Informática NETBEANS 7.0 MI PRIMER PROYECTO

10.1. PRIMITIVAS 79. Si variable es una lista, investiga dentro de esta lista; hay dos casos posibles:

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Introducción a la programación

Tema: Clases y Objetos en C#. Parte II.

MATEMÁTICAS 2º DE ESO

Actividad colaborativa Ejercicios de programación Programación básica C++

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

TIPOS DE CAMPOS Cada Sistema de Base de Datos posee tipos de campos que pueden ser similares o diferentes.

ECUACIONES.

Transcripción:

Trabajo Práctico : Programación Lógica Paradigmas de Lenguajes de Programación 1 er cuat. 016 Fecha de entrega: 7 de junio 1. Introducción El objetivo del trabajo es descubrir mensajes codificados con símbolos. Similar a los que se pueden encontrar en revistas de ocio de verano. Cada letra del mensaje está representada por un único símbolo. Por ejemplo: cuadrado, triángulo, círculo, etc. A su vez a cada símbolo le corresponde una letra distinta. Un mensaje cifrado contiene los espacios correspondientes al mensaje original. Por ejemplo, el mensaje cifrado bien podría corresponder a la casa. Para evitar programar en emojis, el mensaje cifrado anteriormente lo podemos representar en prolog como: [rombo, cuadrado, espacio, perro, cuadrado, sol, cuadrado]. Se cuenta a su vez con un diccionario de las palabras válidas que pueden ser utilizadas en los mensajes. El enunciado del trabajo viene acompañado con archivos.txt con las listas de palabras y además tendrán código de predicados que permiten cargar estos archivos. 1.1. Aclaraciones Cada símbolo va a corresponder a una letra. Cada letra puede corresponderse con un solo símbolo. El espacio se corresponde siempre con el espacio. No hay signos de puntuación. No hay un listado fijo de símbolos. No hay un listado fijo de caracteres. Depende del diccionario. Los caracteres con tilde son distintos los que no tienen tilde: a á.. Descifrado de mensajes La base de conocimientos contiene un predicado diccionario/1 que permite instanciar o verificar la pertenencia de una palabra representada como string en el diccionario disponible para descifrar el mensaje. Es decir, un predicado análogo al siguiente: diccionario("el"). diccionario("la"). diccionario("casa"). % etc 1

Ahora bien, como se desea poder cargar distintos diccionarios, el programa a realizar arrancará con un diccionario vacío. Se cuenta con el predicado cargar/1 que cargará el contenido del nombre de archivo indicado e imitará el predicado diccionario/1 descripto antes. Ejemplo: $ swipl tp.pl?- diccionario(s). false?- cargar("1000_formas").?- diccionario(s). S "de" ; S "la" ; S "que" ; S "el" ; S "en" ;... El predicado cargar/1 vacía el diccionario actual antes de cargar el diccionario especificado..1. Ejercicios Para todos los ejercicios se requiere, además de resolverlos, estudiar su reversibilidad, es decir: Especificar (mediante un comentario en el código) la instanciación de cada uno de los parámetros de los predicados que se implementen (tanto los correspondientes a los ejercicios como los auxiliares que agreguen). Esto debe respetar su implementación, incluso si es más flexible que el objetivo inicial del predicado. Explicar el por qué de esas instanciaciones para los predicados principales de cada ejercicio. Esto no debe convertirse en una explicación de qué hace el predicado, sino el por qué funciona o no bajo distintas instanciaciones. En caso de existir una combinación extraña de las instanciaciones, aclararlo. Por ejemplo, si p(?x,?y) funciona bien si alguna de las dos está instanciada pero no si las dos vienen sin instanciar, debería estar aclarado y explicado (ejemplo de este tipo de problemas: append/). Ejercicio 1 En Prolog un string no es una lista. Por ende, para operar con caracteres individuales se utiliza su representación numérica de código ASCII. Por ejemplo: el espacio es, la a es 97. Implementar el predicado diccionario lista/1 que sea equivalente a diccionario/1, pero que trabaje con listas de códigos de caracteres en lugar de strings. Ayuda: Utilizar string codes/.

?- cargar("dicc0.txt"), diccionario_lista(l). L [101, 108] ; %% "el" L [108, 97] ; %% "la"... Ejercicio Escribir el predicado juntar con(l,j,r) que, siendo L una lista de listas y J un elemento, instacie en R la lista resultante de unir los elementos de L intercalando J entre cada elemento y el siguiente.?- juntar_con([[x],[x,y],[z]],a, R). R [x, a, x, y, a, z] ; Ejercicio Implementar el predicado palabras(s, P), que dado un mensaje cifrado S, instancie en P una lista de listas de símbolos correspondientes a las palabras. Es decir, que separe por el átomo espacio.?- ej(1, S), palabras(s, P). S [rombo, cuadrado, espacio, perro, cuadrado, sol, cuadrado], P [[rombo, cuadrado], [perro, cuadrado, sol, cuadrado]] ; Ejercicio 4 Una lista de tuplas clave/valor puede ser usada para representar mapeos o estructuras de diccionario. Implementar el predicado asignar var(a, MI, MF) que, dados un átomo A y un mapeo inicial MI con elementos de la forma (atomo, variable), genere un mapeo MF que contenga los mismos elementos que MI más una correspondencia para el símbolo A (si no estaba presente en MI). A medida que se introduzcan átomos nuevos en el mapeo, las variables asociadas deberán ser frescas.?- asignar_var(rombo, [], M). M [(rombo, _G401)],?- asignar_var(cuadrado, [(rombo, _G401)], M). M [(cuadrado, _G401),(rombo, _G401)],?- asignar_var(rombo, [(cuadrado, _G401),(rombo, _G401)], M). M [(cuadrado, _G401),(rombo, _G401)], Responder en un comentario en el código: por qué funciona asignar var/?

Ejercicio 5 Implementar el predicado palabras con variables(p, V) que si P es una lista de listas de átomos, instancie en V una lista de listas de variables. Tener en cuenta que a cada átomo le corresponde una única variable.?- ej(1, S), palabras(s, P), palabras_con_variables(p, V). S [rombo, cuadrado, espacio, perro, cuadrado, sol, cuadrado], P [[rombo, cuadrado], [perro, cuadrado, sol, cuadrado]], V [[_G061, _G079], [_G100, _G079, _G14, _G079]], Ejercicio 6 Implementar el predicado quitar(e, L, R), que siendo E un átomo y L una lista de átomos, instancie en R el resultado de quitar todas las apariciones de E en L. L puede contener elementos instanciados y no instanciados. E puede no estar instanciado.?- quitar(z,[a,b,a,z],l). L [A, B, A] ;?- quitar(a,[a,b,a,z],l). L [B, z] ; Ejercicio 7 Escribir el predicado cant distintos(l, S) que, dada L una lista de átomos y variables, instancie en S la cantidad de elementos distintos que contiene L.?- cant_distintos([a,b,a], N). N ; Ejercicio 8 Escribir el predicado descifrar(s, M) que, dada una lista de símbolos con un mensaje secreto (S), instancie en M los posibles mensajes descifrados (uno por vez) utilizando las palabras del diccionario/1.?- cargar("dicc0.txt"). % diccionario("el"). % diccionario("la"). % diccionario("casa"). % diccionario("cosa").?- ej(1, S), descifrar(s, M). 4

S [rombo, cuadrado, espacio, perro, cuadrado, sol, cuadrado], M "la casa"; Nota: recordar las aclaraciones hechas en la introducción. Ejercicio 9 Escribir el predicado descifrar sin espacios(s, M) que, dada una lista de símbolos sin espacios S, instancie en M los posibles mensajes descifrados utilizando las palabras del diccionario/1, intercalando los espacios necesarios para que el mensaje use todos los símbolos.?- cargar("dicc1.txt"). % diccionario("casa"). % diccionario("miento"). % diccionario("de"). % diccionario("flor").?- ej(, S), descifrar_sin_espacios(s, M). S [rombo, cuadrado, perro, cuadrado, sol, luna, triangulo, estrella, arbol, gato], M "casa de flor"; M "casa flor de"; M "casa miento"; Ejercicio 10 Escribir el predicado mensajes mas parejos(s, M) que, dada una lista de símbolos sin espacios S, instancie en M los mensajes resultantes de descifrar S intercalando espacios de todas las formas posibles de manera tal que la desviación estándar de la longitud las palabras de M sea mínima (esto no significa que sea 0, sino que sea menor o igual que la de cualquier otra decodificación posible). La desviación estándar se calcula como: n i1 (x i x) n Donde x i es la longitud de cada palabra, x la media de las longitudes de las palabras y n la cantidad de palabras.?- cargar("dicc1.txt").?- ej(, S), mensajes_mas_parejos(s, M). S [rombo, cuadrado, perro, cuadrado, sol, luna, triangulo, estrella, arbol, gato], 5

M "casa de flor"; M "casa flor de"; Como se ve en el ejercicio anterior, los mensajes que se instancian a partir de S insertando los espacios en cualquier posición son: M "casa de flor"; M "casa flor de"; M "casa miento"; Sin embargo mensajes mas parejos devuelve solo las dos primeras instancias debido a que la última posee una desviación estándar mayor. La desviación estándar para casa miento es i1 (x i 5) (4 5) +(6 5) 1+1 1 1 mientras que para casa de flor y casa flor de es i1 (x i,) (4,) +(,) +(4,) 0,45+1,77+0,45 0, 89 0, 94 En caso de haber más de una solución, el predicado debe instanciar todas (una por vez).. Pautas de Entrega El principal objetivo de este trabajo es evaluar el correcto uso del lenguaje PROLOG de forma declarativa para resolver el problema planteado. Se debe entregar el código impreso con la implementación de los predicados pedidos. Cada predicado asociado a los ejercicios debe contar con ejemplos que muestren que exhibe la funcionalidad solicitada. Además, se debe enviar un e-mail conteniendo el código fuente en Prolog a la dirección plp-docentes@dc.uba.ar. Dicho mail debe cumplir con el siguiente formato: El título debe ser [PLP;TP-PL] seguido inmediatamente del nombre del grupo. El código Prolog debe acompañar el e-mail y lo debe hacer en forma de archivo adjunto con nombre tp.pl. El código debe poder ser ejecutado en SWI-Prolog. No es necesario entregar un informe sobre el trabajo, alcanza con que el código esté adecuadamente comentado. Los objetivos a evaluar en la implementación de los predicados son: corrección, declaratividad, reutilización de predicados previamente definidos utilización de unificación, backtracking, generate and test y reversibilidad de los predicados. 6

Importante: salvo donde se indique lo contrario, los predicados no deben instanciar soluciones repetidas ni colgarse luego de devolver la última solución. Vale aclarar que no es necesario filtrar las soluciones repetidas si la repetición proviene de las características de la entrada. Importante: se admitirá un único envío, sin excepción alguna. Por favor planifiquen el trabajo para llegar a tiempo con la entrega. 4. Referencias y sugerencias Como referencia se recomienda la bibliografía incluída en el sitio de la materia (ver sección Bibliografía Programación Lógica). Se recomienda que utilicen los predicados ISO y los de SWI-Prolog ya disponibles, siempre que sea posible. Recomendamos especialmente examinar los predicados y metapredicados que figuran en la sección Cosas útiles de la página de la materia. Pueden hallar la descripción de los mismos en la ayuda de SWI-Prolog (a la que acceden con el predicado help). También se puede acceder a la documentación online de SWI-Prolog. 7