UBA – Facultad de Ciencias Exactas y Naturales – Departamento de Computación Algoritmos y Estructura de Datos I Primer cuatrimestre de 2011 Práctica 2– Secuencias Ejercicio 1 Evaluar las siguientes expresiones: a) b) c) d) e) |[4, 3, 1]| cons(π, [2, 3, 5, 7, 11]) indice([0..3], 3) conc([2, 3], [5, 7, 11]) cab(cola([5..8])) f) g) h) i) j) sub([2, 3, 5, 7, 11], 0, 3) en(π, [2, 3, 5, 7, 11]) sub([2, 3, 5, 7, 11], 3, 2) en(1, [1..5]) sub([2, 3, 5, 7, 11], 0, 65536) Ejercicio 2 ¿Cuáles de las siguientes igualdades sobre variables de tipo Lista son válidas? a) b) c) d) |x| = |cola(x)| + 1 en(3, x) = en(3, y) x = sub(x, 0, |x| − 1) conc(cons(3, x), y) = cons(3, conc(x, y)) e) f) g) h) x = cons(cab(x), cola(x)) indice(x, 0) = cab(x) en(i, x) = cab(sub(x, i, i)) cola(x) = sub(x, 1, |x| − 1) En los casos incorrectos, ¿puede dar condiciones sobre las listas en cuestión para que lo sean? Ejercicio 3 Describir informalmente las siguientes listas definidas por comprensión y dar sus primeros elementos. Para mejorar la lectura, en algunos casos se han utilizado listas auxiliares. a) b) c) d) e) f) [ x | x ← [0..5] ] [ x + 1 | x ← [0..5] ] [ (x, x + 1) | x ← [0..15], x mod 3 = 0 ] [ (x, y) | x ← [0, 1], y ← [0, 1] ] [ [ ] | x ← [ [ ], [0], [0, 1], [0, 1, 2] ] ] [ (y, divisores(y)) | y ← [2..5] ] donde aux divisores (y : Z) : [Z] = [ x | x ← [2..(y − 1)], y mod x = 0 ] ; g) [ (u, consec(u)) | u ← [True, False] ] donde aux consec (v : Bool) : [Bool] = [ w | w ← [True, False], v → w ] ; h) concat([ suman10para(n) | n ← [0..10] ]) aux suman10para (n : Z) : [Z] = [ 10 · n + m | m ← [0..9], n + m = 10 ] ; i) agregar2Digitos([ ]) aux agregar2Digitos (xs : [Z]) : [[Z]] = concat([ agregar1Digito(ys) | ys ← agregar1Digito(xs) ]) ; aux agregar1Digito (xs : [Z]) : [[Z]] = [ conc(xs, [x]) | x ← [0..10) ] ; Aclaración: La función auxiliar concat(x : [ [T ] ]) : [T ] es análoga a la función conc, pero concatena varias listas, o sea que por ejemplo concat( [ [0, 1], [2, 3] ] ) = [0, 1, 2, 3] y concat( [ [0], [2, 4], [6] ] ) = [0, 2, 4, 6]. Ejercicio 4 Evaluar las siguientes expresiones: a) acum(r + 1 | r : Z = 0, e ← [1..10], e mod 3 = 0) b) acum(r + e | r : Z = −1, e ← [10..1]) = −1 c) eval([1, 2, −1], 4) aux eval (p: [Z], x:Z) : Z = acum(r ∗ x + e | r : Z = 0, e ← p) ; Ejercicio 5 Utilizando secuencias definidas por comprensión, definir las siguientes expresiones: a) Dada una secuencia de enteros s formar la secuencia de los elementos de s que son mayores a 3. b) Dados una secuencia s y un natural n formar la secuencia que queda tras eliminar los primeros n elementos de s. c) Dada una secuencia de enteros s formar otra con los mismos elementos, pero con los elementos impares primero y los pares después. El orden relativo de los impares y de los pares entre sı́ debe ser el mismo que tenı́an en s. d) Dada una secuencia s formar su reverso (la secuencia dada vuelta). Ejercicio 6 Escriba la función auxiliar concat que dada una lista de listas de enteros forme la lista que representa la concatenación de todas las listas que conforman la primera (ver Ejercicio ??). Ejercicio 7 Para cada aparición de variable en las siguientes expresiones, indicar si en esa posición la variable está libre o ligada. 1 a) [ (x, z) | x ← [0..t] ] b) [ (x, z) | x ← [0..z], z ← [ y | y ← [0..10] ] ] c) [ k | x ← [0..t] ] d) [ (a, b, c, d) | a ← [ b | b ← [ c | c ← [0..5], c < d ] ] ] Ejercicio 8 Indique el resultado de las siguientes expresiones: P a) P[1..9] d) b) Q [1..1) e) c) [ pot(2, m) | m ← [0..3] ] f) P [P [ pot(i, a) | i ← [1..2] ] | a ← [0..1] ] P[ pot(2, m) | m ← [0..3] ] [ pot(2, −m) | m ← [0..3] ] Ejercicio 9 Escriba expresiones auxiliares (aux) utilizando las funciones enunciados: P Q , y acum que respondan a los siguientes a) La suma de los primeros cinco naturales. b) La productoria del tercer grupo de k naturales (por ejemplo, si k = 3 serı́a [6, 7, 8], y si k = 5 serı́a [10, 11, 12, 13, 14]). c) Sea N una secuencia con las notas de un alumno. Escriba una expresión que determine su promedio. Modifı́quela para que determine su promedio sin tener en cuenta los aplazos. d) Sea R una secuencia de duplas de enteros, donde cada elemento describe los goles a favor y en contra (respectivamente) de los partidos del último torneo de un equipo. Escriba una expresión que determine la diferencia de gol que el equipo obtuvo en ese torneo. e) Una secuencia que contenga cada una de las sumas parciales de potencias negativas de dos, hasta alcanzar los k elementos. La secuencia debe comenzar ası́: [ 21 , 21 + 14 , 12 + 14 + 18 , ..]. f) Dada una secuencia de enteros a, defina una expresión que describa la secuencia de productorias parciales de a. Por ejemplo si a es [1, 3, 6] su expresión debe determinar la secuencia [1, 3, 18]. g) Dada una secuencia de enteros a, defina una expresión que determine el valor del máximo elemento en a. 2