Herramientas de usuario

Herramientas del sitio


introalg:taller09_soluciones

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
introalg:taller09_soluciones [2009/06/01 13:39] lauraintroalg:taller09_soluciones [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 576: Línea 576:
 </code> </code>
  
-==== ejercicios para seguir pensando y analizando problemas ====+  * Tenemos una lista de las conexiones por tren entre pares de ciudades, por ejemplo ''conectadas(Tarragona,Barcelona). ''. ¿Cómo sería un programa que nos ayudara a saber si podemos llegar de una ciudad a otra, es decir, si existe una lista de conexiones que nos lleve de una ciudad a otra, o bien eso es imposible? La solución, en la [[http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_8#conexion_entre_dos_ciudades|clase 8]].
  
-  * ¿Cómo sería un programa para recomendar amigos en una red social tipo //facebook//? La solución, en la [[http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_9#los_amigos_de_mis_amigos|clase 9]].+==== ejercicios sobre la vida real 1/06/2009 ====
  
-  * Tenemos una lista de las conexiones por tren entre pares de ciudades, por ejemplo ''conectadas(Tarragona,Barcelona). ''¿Cómo sería un programa que nos ayudara a saber si podemos llegar de una ciudad a otra, es decir, si existe una lista de conexiones que nos lleve de una ciudad otrabien eso es imposible? La solución, en la [[http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_8#conexion_entre_dos_ciudades|clase 8]].+Encontrarán una posible solución al problema de recomendar amigos en una red social tipo //facebook// en la [[http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_9#los_amigos_de_mis_amigos|clase 9]]. 
 + 
 +También damos una posible solución al problema de calcular el porcentaje de estudiantes que aprueban o promocionan la materia en la [[http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_9#calculos_numericos_de_bases_de_datos|clase 9]]. 
 + 
 +  * Comprobar si podemos cocinar un determinado platillo dados los ingredientes necesarios para el platillo y los ingredientes que tenemos en la heladera. Se puede ampliar con los utensilios, las técnicas, e implicaciones entre ellos (p.ej., si tenemos que usar la técnica "montar a punto de nieve" necesitamos el utensilio "batidora"). 
 +<code> 
 +ingredientes(tortilla,[huevos,papas,cebolla,sal,aceite,pimienta]). 
 +ingredientes(papafrita,[papas,aceite,sal]). 
 +ingredientes(huevofrito,[huevos,aceite,sal]). 
 +ingredientes(pizza,[prepizza,salsa,queso]). 
 +ingredientes(asado,[carne]). 
 +ingredientes(crema,[leche,huevos,azúcar,maicena,canela]). 
 + 
 +tengo(sal). 
 +tengo(azúcar). 
 +tengo(pimienta). 
 +tengo(canela). 
 +tengo(huevos). 
 +tengo(leche). 
 +tengo(queso). 
 +tengo(maicena). 
 + 
 +puedoCocinar(Platillo) :-  
 +   ingredientes(Platillo,Ingredientes) , 
 +   tengoTodos(Ingredientes). 
 + 
 +tengoTodos([]). 
 +tengoTodos([I|Ingredientes]) :- tengo(I) , tengoTodos(Ingredientes). 
 +</code> 
 + 
 +  * Crear un sistema de alertas que cuando se consume un insumo, chequea en la base de datos cuánta reserva queda de ese insumo y, si la reserva está por debajo de un mínimo, devuelve un mensaje diciendo que hay que comprar más de ese insumo. 
 +<code> 
 +queda(jeringas,8). 
 +queda(vendas,20). 
 +queda(curitas,30). 
 + 
 +minimo(jeringas,5). 
 +minimo(vendas,10). 
 +minimo(curitas,20). 
 + 
 +bajoMinimo(Insumo,Cantidad) :- 
 +  queda(Insumo,Reserva) , 
 +  minimo(Insumo,Minimo) , 
 +  (Reserva - Cantidad) =< Minimo . 
 +</code> 
 + 
 +  * Hacer un programa **no muy largo** que, dado un animal, nos diga si es ovíparo o vivíparo, si vive en la tierra, en el agua o en el aire, si come carne o vegetales, etc. Tratar excepciones como "delfín" (mamífero marino), "nutria" (mamífero de agua dulce) o "guppi" (pez vivíparo). 
 +<code> 
 +mamifero(vaca). 
 +mamifero(delfín). 
 +mamifero(nutria). 
 +acuatico(delfín). 
 +acuatico(nutria). 
 +pez(trucha). 
 +pez(guppi). 
 +viviparo(guppi). 
 + 
 +terrestre(X) :- mamifero(X) , not(acuatico(X)). 
 +acuatico(X) :- pez(X). 
 +viviparo(X) :- mamifero(X). 
 +oviparo(X) :- pez(X) , not(viviparo(X)). 
 +</code> 
 + 
 +==== ejercicios de recursividad clásicos 1/06/2009 ==== 
 + 
 +El problema del máximo común divisor se soluciona muy fácilmente si por azar sabemos que hay una recetita maravillosa que dice así: dados dos númerossi uno es divisor del otroentonces ese será el máximo común divisor. Si no, se resta el número menor al mayor y volvemos a comprobar si uno es divisor del otro. Si no, se resta el menor al mayor, y así hasta llegar a algún caso en el que uno de los dos números sea divisor del otro. 
 +<code> 
 +mcd :: Int -> Int -> Int 
 +mcd b | mod a b == 0 = b 
 +        | mod b a == 0 = a 
 +        | otherwise    = mcd (min a b) ((max a b) - (min a b)) 
 +</code> 
 + 
 +El problema de las n reinas (perdónno eran 9 :-} ). Está muy bien explicado en el [[http://programacionilogica.wordpress.com/|blog de programación lógica]] de un estudiante de informáticatanto [[http://programacionilogica.wordpress.com/2008/02/11/implementacion-del-problema-de-las-n-reinas-en-haskell-programacion-funcional/|para haskell]] como [[http://programacionilogica.wordpress.com/2008/02/07/implementacion-del-problema-de-las-n-reinas-en-prolog/|para prolog]]. 
 + 
 +El problema de misioneros y caníbales está bien explicado como caso particular de un problema de búsqueda en estas [[https://forja.rediris.es/docman/view.php/82/300/busqueda1.pdf|filminas sobre búsqueda]].
introalg/taller09_soluciones.1243863548.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)