EXAMEN DE TEORÍA DE AD1 ( Algoritmos y Estructuras de Datos 1 ) 27 de Enero de 2003. Convocatoria Ordinaria. Duración: 2 horas y cuarto APELLIDOS: Ejercicio 1. Dados c, variable de tipo carácter, y v, vector ordenado ascendentemente de n caracteres, n≥1, se quiere diseñar un algoritmo que indique si c está en v. Por ejemplo: sea c = ’A’; entonces c NO está en el siguiente vector v: v 1 2 3 4 5 6 7 ‘a’ ‘b’ ‘c’ ‘d’ ‘d’ ‘e’ ‘f’ Nmax ............ Ahora bien, si c = ’d’ entonces c está en v. A partir de este enunciado, se pide: a) Marcar aquella de las siguientes definiciones que corresponda a la definición del problema enunciado: (1 punto) X Definición 1: algoritmo posC (Datos v: vector[1..Nmax] de carácter; n: entero; c: carácter; Resultados esta: boolean); P = {1 ≤ n ≤ Nmax∧∀i: 1 ≤i < n: v[i] ≤ v[i+1] } Q = {esta= (∃pos: 1≤pos≤ nv[pos]=c∧ ∧∀j: 1≤j<pos: v[j]<c ∧ ∧ ∀j:pos≤j≤n: v[j]≥c ) ) } Definición 2: algoritmo posC (Datos v: vector[1..Nmax] de carácter; n: entero; c: carácter; Resultados esta: boolean); P = {1 ≤ n ≤ Nmax∧∀i: 1 ≤i < n: v[i] ≤ v[i+1]} Q = {esta = (∃pos: 1≤pos≤ nv[pos]=c) } 1 CENTRO1: NOMBRE: Marcar con una X la casilla que interese. EUI FI Definición 3: algoritmo posC (Datos v: vector[1..Nmax] de carácter; c: carácter; Resultados esta: boolean); P = {1 ≤ n ≤ Nmax∧∀i: 1 ≤i < n: v[i] ≤ v[i+1] } Q = {esta = (∃pos: 1≤pos≤ nv[pos]=c) } b) Marcar aquella de las siguientes estrategias, definidas por Invariante y Función Limitadora, que sea eficiente para la correcta resolución del problema enunciado: (2 puntos) X Estrategia 1: I = {0 ≤ pos ≤ n ∧ ∀i: 1 ≤i < pos: v[i] < c t = n - pos Estrategia 2: ∧ esta = (∃j: 1 ≤ j ≤ pos v[j] ≥ c) } I = {0 ≤ pos ≤ n ∧ ∀i: 1 ≤i < pos: v[i] ≠ c t = n - pos Estrategia 3: ∧ esta = (∃j: 1 ≤ j ≤ pos v[j] = c) } I = {0 ≤ pos ≤ n ∧ ∀i: 1 ≤i < pos: v[i] < c ∧ esta = (v[pos] = c) } t = n - pos c) En función de la estrategia elegida en el apartado b), escríbanse la guarda de la iteración y las instrucciones de inicio, finalización y cuerpo de la iteración: (2 puntos) Las instrucciones de inicio son: pos := 0; está := falso; La guarda de la iteración B es: ( pos <> n ) ∧ ( ¬está ) El cuerpo de la iteración es: pos := pos + 1; si v[pos] >= c entonces esta := cierto; fsi Las instrucciones de terminación son: si v[pos] = c entonces sino esta := cierto esta := falso; fsi Ejercicio 2. Dada la siguiente definición de problema: algoritmo ejer2(Datos v: vector[1..Nmax]de entero; n: entero; Resultados es: lógico); P = { 0 ≤ n ≤ Nmax } Q = { es = ∀i: 1 ≤ i ≤ n div 2: v[ i ] = v[ n – i + 1 ] } falgoritmo En base a esta definición se pide: a) Indicar qué problema describe esta definición: (0.5 puntos) Comprobar si el vector v es capicúa. Nótese que si v es vacío, entonces es capicúa Si la estrategia elegida para resolver este problema viene dada por los siguientes Invariante y Función Limitadora: I = { 0 ≤ pos ≤ n div 2 ∧ ∀i: 1 ≤ i ≤ (n div 2) – pos – 1: v[i] = v[n–i+1] ∧ diferente = (∃i: 1≤ i ≤(n div 2)–pos: v[i] ≠ v[n–i +1])} t = pos b) Marcar aquella de las siguientes descripciones que corresponda a la estrategia dada por los anteriores I, t: (0.5 puntos) Descripción 1: Recorrido Ascendente. X Descripción 2: Búsqueda Ascendente. Descripción 3: Recorrido Descendente. Descripción 4: Búsqueda Descendente. c) Marcar aquel de los siguientes valores igual al primer v[pos] según la estrategia dada por los anteriores I, t: (0.5 puntos) v[n] X v[1] v[n div 2] d) Rellenar las casillas que aparecen en el siguiente algoritmo en base a la estrategia definida por los anteriores I, t: (1.5 puntos) algoritmo ejer2(Datos v: vector[1..Nmax]de entero; n: entero; Resultados es : lógico); var diferente : lógico; pos : entero fvar diferente := falso ; pos := n div 2 ; mientras pos ≥ 1 Y ¬diferente hacer diferente := (v[(ndiv2) – pos + 1] <> v[n - (ndiv2) + pos] ) ; pos := fmientras pos - 1 es := ¬ diferente falgoritmo ; ; Ejercicio 3. Dados los siguientes algoritmos parametrizados: función f(x,y: entero) devuelve lógico; var b: lógico fvar ∧ y=2 { x=6 ∧ b=¿? } ∧ b= cierto } b := ((x-y) > 3) ; ∧ y=2 { x=6 devuelve b; ffunción procedimiento p(ent a:lógico; ent b:entero; ent/sal x,y:entero); { a=cierto ∧ b=4 ∧ x=@a(6) si a entonces x := x + b; sino x := x - b; fsi { a=cierto ∧ b=4 ∧ y=@b(5) } y := y - b y := y + b; ∧ x=@a(10) ∧ y=@b(1) } fprocedimiento Se pide, dado el estado R0, completar el estado R1 obtenido tras la invocación a p en el siguiente algoritmo. Además, complétense los distintos estados que aparecen sombreados dentro de la función f y el procedimiento p. (2 puntos) algoritmo ejer3(Datos x,y,a,b: entero; Resultados x,y,a,b: entero) R0={ x=2 ∧ y=4 ∧ a=4 ∧ b=5 ∧ a=10 ∧ b=1 } a = x + y; p(f(x+y, x), y, a, b); R1={ x=2 falgoritmo ∧ y=4 }