Programación 1 - Recuperatorio Segundo Parcial - Tema 1
(06-06-2019)
1 Listas, primera parte
Ejercicio 1. Diseñe una función mapIf, que dado un predicado p, una función f y una lista l, devuelva una lista de igual longitud que l, donde se aplica la función f sólo a aquellos elementos que cumplan el predicado. Los elementos de l que no lo cumplan, permanecerán en la lista sin ser modificados.
(check-expect (mapIf even? add1 (list 0 0 1 2)) (list 1 1 1 3)) (check-expect (mapIf cons? lenght (list '() (list 0 0 0))) (list '() 3)) (check-expect (mapIf even? add1 empty) empty)
Dé al menos dos casos de prueba adicionales a los presentados.
Para resolver este ejercicio, no utilice foldr, filter ni map.
2 Listas, segunda parte
Al resolver este problema, utilice foldr, filter y/o map para cualquier función que requiera procesar los elementos de una lista.
(check-expect (cantidad-con-a (list (list "al" "ba" "c") (list "de" "fg" "h"))) 1) (check-expect (cantidad-con-a (list (list "p" "b" "c") (list "de" "fg" "hi" "ño" "tu"))) 0)
Ayuda: Puede resultarle útil la función string-contains?
3 Estructuras
Ejercicio 3. En este ejercicio representaremos los colores basándonos en el modelo de síntesis aditiva conocido como RGB (siglas en inglés para rojo, verde, azul). Utilizaremos una estructructura de datos con tres campos: rojo, verde y azul. Cada campo puede tener un valor entero entre 0 y 255. De esta forma, podremos representar cada color como una terna donde cada campo expresa la cantidad e intensidad de cada componente en el color final. Así, el color azul lo podremos formar con la terna (0,0,255), al negro como (0,0,0) y al blanco como (255,255,255).
Diseñe una estructura rgb con los campos necesarios para representar un color según este modelo.
Defina las constantes azul, negro y blanco.
Diseñe una función suma, que toma dos colores válidos y devuelve el color resultado de sumarlos. Sumar colores implica promediar cada componente.
El modelo RGB también contempla intensidad. Por ejemplo, el color (100,50,0) es un marrón oscuro mientras que (200,100,0) es un marrón claro. Diremos que dos colores pertenecen a la misma gama si cada componente aparece en la misma proporción. Diseñe una función misma-gama?, que dadas dos estructuras rgb, decida si pertenecen a la misma gama. Para el caso del marrón oscuro y claro, la función debería retornar #true.