Programación Declarativa

Documentos relacionados
Programación Declarativa

Programación Declarativa

Programación Declarativa

ESTRUCTURAS DE DATOS Y ALGORITMOS

El lenguaje Prolog. Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Práctica N o 4 - Programación Lógica

Programación Declarativa Universidad de Málaga

Introducción a Árboles Árboles Binarios

Práctica N o 5 - Programación Lógica

12/08/2017 AVL. Especificación sobre árboles AVL. AVL: rotaciones

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

RECORRIDO EN ARBOLES

Introducción a los árboles. Lección 11

Programación Declarativa. Ingeniería Informática Cuarto curso. Primer cuatrimestre. Escuela Politécnica Superior de Córdoba Universidad de Córdoba

Programación Declarativa. Ingeniería Informática Cuarto curso. Primer cuatrimestre. Escuela Politécnica Superior de Córdoba Universidad de Córdoba

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

Definiciones: conjuntos, grafos, y árboles. Agustín J. González ELO 320: Estructura de Datos y Algoritmos. 2002

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Estructuras de Datos II

Tema 12.- Entrada y Salida

Tema 3.- Predicados y sentencias condicionales

Estructura de Datos Unidad 6: ARBOLES

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

3.6. Árboles B DEFINICIONES

Introducción a Árboles Árboles Binarios

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Definición 1: Un grafo G es una terna ordenada (V(G), E(G), Ψ

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre

Programación recursiva en Prolog

PROGRAMACIÓN ORIENTADA A OBJETOS

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

Sistemas Inteligentes de Gestión. Relación de ejercicios PROLOG. Carlos Cubero & Fernando Berzal

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Práctica No. 6 Ejercicios en Prolog.

Tema 6: Estructuras de datos recursivas

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Tema: Métodos de Ordenamiento. Parte 3.

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 3. Estructuras de Almacenamiento. Básicas. Definición y Manejo.

Programación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas

Listas en Prolog. Capítulo. Listas como sujetos

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

Francisco J. Hernández López

1. Escribe los siguientes enunciados en lenguaje matemático, a) El doble de la edad de Alberto. f) El triple de mi edad.

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

TUTORIAL PROLOG. Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

XX OLIMPIADA NACIONAL DE MATEMÁTICA TERCERA RONDA REGIONAL - 6 DE SETIEMBRE DE NIVEL 1. Nombre y Apellido:... Puntaje:...

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

Estructuras de datos Árboles B

Tema Árboles binarios fmap para árboles binarios Plegado de árboles binarios

Inteligencia Artificial: Prolog

Estructura de datos y de la información Boletín de problemas - Tema 10

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

Tema 4.- Recursión e iteración

Ahora responde a las siguientes cuestiones: Supongamos que el usuario introduce 3 en A, 4 en B y 5 en C

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Árboles B y B ) 20. Algoritmos y Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 63

EJERCICIOS RESUELTOS DE PROLOG

Análisis Comparativo de Lenguajes - Año 2018 Práctico Nro. 2 Lenguaje Prolog Corresponde al Apunte El lenguaje de programación Prolog

1. Cuál es el número total máximo de nodos que tiene un árbol binario de N niveles? a. N 2-1 b. 2 N+1-1 c. 2 N d. 2 N+1 i.

FICHA DE POSTULACIÓN FORMATO HOJA DE VIDA DEL POSTULANTE CONVOCATORIA CAS N MINJUS

FUNDAMENTOS DE PROGRAMACIÓN Datos recursivos II

Teoría de los Lenguajes de Programación Práctica curso

Programación de sistemas Árboles

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Introducción a la Algorítmica Transparencias correspondientes a las clases impartidas por los profesores: Lourdes Miró Amarante Ignacio García Vargas

En familia. la ma d re plural: las madres. Usted se llama...

Programación con Listas

Para la resolución de los ejercicios, se dispone de una implementación de árbol binario a través de la clase BinTree con la siguiente especificación.

Programación con Estructuras de Datos

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Transcripción:

Programación Declarativa Ingeniería Informática Especialidad de Computación Cuarto curso. Primer cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2017 2018 Práctica número 6.- Introducción al lenguaje Prolog Se deben presentar los ejercicios indicados con (*). 1. Amantes Escribe un fichero denominado amantes.pl que contenga los siguientes hechos o ama(juan,ana). o ama(ana,miguel). o ama(luis,isabel) o ama(miguel,ana). o ama(laura,juan). o ama(isabel,luis). donde el predicado ama(x,y) indica que X ama a Y. Escribe en prolog las siguientes preguntas o A quién ama Juan? o Quién ama a Ana? o Quién ama a alguien? o Quién es amado por alguien? o Quiénes se aman mutuamente? o Quién ama sin ser correspondido? Añade al fichero amantes.pl una regla que permita describir a los amantes, es decir, aquellas personas que se aman mutuamente. 2. Familia Escribe un fichero denominado familia.pl que contenga los siguientes hechos: o hombre(antonio). o hombre(juan). o hombre(luis). o hombre(rodrigo). o hombre(ricardo). o mujer(isabel). o mujer(ana). o mujer(marta). o mujer(carmen). 1

o mujer(laura). o mujer(alicia). Define hechos en los que se afirmen los siguientes enunciados: o Antonio y Ana son matrimonio o Juan y Carmen son matrimonio. o Luis e Isabel son matrimonio o Rodrigo y Laura son matrimonio. o Juan, Rodrigo y Marta son hijos de Antonio y Ana. o Carmen es hija de Luis e Isabel. o Ricardo es hijo de Juan y Carmen. o Alicia es hija de Rodrigo e Isabel. Define una regla que indique que el predidcado matrimonio es reflexivo, es decir, si X e Y forma un matrimonio entonces Y y X también lo forman. Define reglas para obtener: o los nietos de una persona o los abuelos de una persona o los hermanos de una persona o los tíos de una persona o las tías de una persona o los primos de una persona o las primas de una persona o los suegros de una persona 3. (*) Declara los siguientes hechos relativos a trabajadores de una empresa. Utiliza el predicado encargado_de_tarea(trabajador,tarea) o Miguel está encargado de las tareas de admisión, control y vigilancia. o Ricardo está encargado de las tareas de planificación y asesoramiento. o Alicia está encargada de la dirección y control. Define reglas que permitan comprobar los siguientes hechos: o Si una tarea ha sido encargada a alguna persona. Utiliza el predicado encargada(tarea). o Si dos personas comparten alguna tarea, es decir, comparten_tarea(persona1,persona2). 4. (*) Lectores Escribe un fichero denominado lectores.pl que contenga los siguientes hechos que utilizan la estructura nombre y el predicado lector: o lector(nombre( Ana, Garrido, Aguirre ),mujer,31). o lector(nombre( Marta, Cantero, Lasa ),mujer,20). o lector(nombre( Rodrigo, Duque, Soto ),hombre,30). o Etc. Escribe en Prolog las siguientes preguntas: 2

o Hay lectores? o Quiénes son lectores? o Qué lectores son mujeres? y hombres? o Hay lectores con el mismo nombre y diferentes apellidos? Escribe una regla para comprobar si unos apellidos están repetidos. o Nota: utiliza el predicado bagof y un predicado auxiliar para contar los elementos de una lista. 5. (*) Escribe un programa que permita realizar las siguientes operaciones aritméticas: Área de un círculo. Área de un trapecio. Producto de los números comprendidos entre dos dados. 6. (*) Codifica el predicado crear(n,l) que permite crear una lista a partir de un número natural Por ejemplo:?crear(10,l) L = [0,1,...,10]. 7. (*) Números primos Define el predicado primo(n) para comprobar si el número N es primo o no o Nota: un número es primo si no tiene divisores propios menores o iguales que su raíz cuadrada. Define el predicado crear_primos(n,l) para crear una lista compuesta por los números primos menores o iguales que el número N. o Por ejemplo:?- crear_primos(10,l). L = [2,3,5,7] 8. (*) Codifica un predicado denominado, invertir, para invertir todos los elementos de una lista que puede contener sublistas: Por ejemplo?- invertir([1,2,3,4,5],r). R = [5, 4, 3, 2, 1].?- invertir([1,[2,3],[4,5]],r). R = [[5, 4], [3, 2], 1]. Observación: codifica los siguientes predicados auxiliares o es_lista(x): comprueba si X es una lista o concatenar(l1,l2,l): L es el resultado de concatenar L1 y L2. 3

9. (*) Monumentos Utiliza el predicado monumento(nombre,localidad,estilo) para definir hechos asociados a los siguientes monumentos: o Mezquita, Córdoba, Árabe o Medina Azahara, Córdoba, Árabe o Catedral, Santiago de Compostela, Románico Define el predicado contar_monumentos(localidad,n) para contar los monumentos que hay en una localidad. o Por ejemplo?- contar_monumentos("córdoba",n). N = 2. Observación: o Utiliza el predicado bagof o findall o Define un predicado auxiliar para contar para contar los elementos de una lista. 10. (*) Método de ordenación mergesort. Codifica un predicado que permita ordenar una lista de números utilizando el método mergesort. o Ejemplo Lista original: 5 4 1 3 2 División Primera: 5 1 2 ; 4 3 ; Segunda: 5 2 ; 1 ; ; 4 ; 3 ; ; Tercera: 5 ; 2 ; ; 1 ; ; 4; 3 ; ; Fusión: Primera: 2 5 ; 1 ; ; 3 4 ; Segunda: 1 2 5 ; 3 4 ; Tercera: 1 2 3 4 5 Observación o Utiliza predicados auxiliares para la división (split): reparte los elementos de una lista en dos listas, dependiendo de que ocupen un "lugar" par o impar y para la fusión (merge): une de forma ordenada dos listas ordenadas 11. (*) Codifica los siguientes predicados sobre listas numéricas. Media de una lista Máximo de una lista. Mediana de una lista ordenada o Si la lista no está ordenada entonces se debe ordenar. 12. (*) Donantes de sangre Declara los hechos relativos a una base de datos de donantes que contiene la siguiente información: o donante(persona(juan,campos,ruiz),a,positivo). o donante(persona(ana,lara,silva),ab,negativo). o donante(persona(luis,luna,pachecho),ab,negativo). 4

o Nota: persona es una estructura Escribe los hechos y las reglas que permitan comprobar si una persona puede donar sangre a otra teniendo en cuenta el grupo sanguíneo y el factor RH. Define reglas para el predicado contar_por_grupo_y_factor que permita contar todos los donantes de un grupo sanguíneo y factor rh específicos. o Por ejemplo:?- contar_por_grupo_y_factor (ab,negativo,n). N = 2 o Nota: utilizar el predicado bagof y un predicado auxiliar para contar los elementos de una lista. Escribe una regla que permita hacer las siguientes acciones consecutivas 1. Pedir por pantalla un grupo sanguíneo y un factor rh, 2. Pedir por pantalla el nombre de un fichero, 3. Y escribir en dicho fichero los nombres de todos los donantes que tengan el grupo sanguíneo y el factor rh indicados. 13. (*) Un árbol binario es representado por una lista de la forma [raíz, hijo izquierdo, hijo derecho] donde raíz es un átomo e hijo izquierdo e hijo derecho son árboles binarios. Define predicados para: o Escribir la lista en orden prefijo, sufijo e infijo. o Determinar la profundidad del árbol. o Comprobar si un elemento está en el árbol. o Determinar el número de nodos del árbol. o Determinar el número de hojas del árbol. Un nodo es una hoja si sus hijos izquierdo y derecho son listas vacías. Cómo se pueden redirigir las salidas de los predicados anteriores hacia un fichero de escritura? 14. (*) Ficheros y números primos Escribe un programa que lea los números contenidos en un fichero y que escriba los números primos en otro fichero. 5