HSE-96: practica-06.txt Ejercicios en Clips. =============================================================================== ******************************************************************************* * OBSERVACIONES: ******************************************************************************* La siguiente práctica consta de tres ejercicios totalmente independientes entre si. El código correspondiente al primer ejercicio se almacenará en el fichero "eratostenes.clp", el correspondiente al segundo ejercicio en el fichero "fracciones.clp" y el correspondiente al tercero en el fichero "combinaciones.clp". ******************************************************************************* * PROBLEMA 1: Incluirlo en el fichero "eratostenes.clp". ******************************************************************************* Crear un programa en Clips que a partir de la lista de los N primeros números naturales en orden creciente, calcule la lista de los números primos existentes en la lista inicial, utilizando el bien conocido método de la criba de Eratóstenes. Así a partir de la lista (numeros 2 3 4 5 6 7 8 9 10) se debe de obtener la lista de números primos (primos 2 3 5 7) Es aconsejable construir una función "numeros" que tome un argumento entero N e inserte en la base de datos del sistema el hecho (numeros 2 3 ... N) Ejemplo: CLIPS> (load "eratostenes.clp") ... TRUE CLIPS> (reset) CLIPS> (numeros 100) ; La llamada a esta función inserta el ; hecho (numeros 2 ... 100) CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-125 (primos 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97) f-126 (numeros) For a total of 3 facts. ******************************************************************************* * PROBLEMA 2: Incluirlo en el fichero "fracciones.clp". ******************************************************************************* Teorema: Todo fracción menor que 1 se puede descomponer como suma de fracciones con denominadores distintos entre sí y numeradores iguales a 1. Por ejemplo: 23 1 1 1 ----- = --- + ---- + ------ 123 6 50 3075 Dicha descomposición se puede obtener de manera simple siguiendo el siguiente algoritmo: 1.- Dada la fracción M/N, buscamos el menor número D tal que D*M>N. 2.- Calculamos M/N-1/D y le aplicamos de nuevo el algoritmo. Construir un programa en Clips que a partir de una fracción dada como (fraccion ) calcule las fracciones resultantes de la descomposición anterior y las almacene como (componente 1 ) Ejemplo: CLIPS> (load "fracciones.clp") ... TRUE CLIPS> (reset) CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-7 (componente 1 6) f-53 (componente 1 50) f-3079 (natural 3075) f-3080 (componente 1 3075) For a total of 5 facts. ******************************************************************************* * PROBLEMA 3: Incluirlo en el fichero "combinaciones.clp". ******************************************************************************* Escribir el programa combinaciones.clp de forma que a partir de los hechos que definen un conjunto y una aridad construya las combinaciones n-arias con los elementos del conjunto (es decir, las listas con n elementos distintos del conjunto y tales que dos combinaciones son diferentes si una tiene un elemento que no está en la otra). Por ejemplo, Ejemplo: CLIPS> (load "combinaciones.clp") ... TRUE CLIPS> (reset) CLIPS> (assert (conjunto a b c) (aridad 2)) CLIPS> (run) Las combinaciones de (a b c) de aridad 2 son: Combinacion 1 = (a c) Combinacion 2 = (b c) Combinacion 3 = (a b) CLIPS> (reset) CLIPS> (assert (conjunto a 1 b 2 c) (aridad 3)) CLIPS> (run) Las combinaciones de (a 1 b 2 c) de aridad 3 son: Combinacion 1 = (a 1 c) Combinacion 2 = (1 b c) Combinacion 3 = (a b c) Combinacion 4 = (b 2 c) Combinacion 5 = (1 2 c) Combinacion 6 = (a 2 c) Combinacion 7 = (a 1 2) Combinacion 8 = (1 b 2) Combinacion 9 = (a b 2) Combinacion 10 = (a 1 b) ******************************************************************************* * IMPORTANTE: ******************************************************************************* Una vez finalizados todos los apartados anteriores, envía por correo electrónico a tu profesor los ficheros "eratostenes.clp" (con Subject: Practica 6 (eratostenes.clp)) "fracciones.clp" (con Subject: Practica 6 (fracciones.clp)) "combinaciones.clp" (con Subject: Practica 6 (combinaciones.clp)) Si pones el Subject tal y como se indica antes recibirás por correo electrónico la confirmación de que tu mensaje ha llegado bien. Recuerda, las direcciones son: fmartin@cs.us.es si tu profesor es F. J. Martín. jalonso@cs.us.es si tu profesor es J. A. Alonso.