Examen de Programació II UDL 2011 · Primer Parcial (Curso 2011/2012)

Examen de Programació II de la UDL (Grado en Ingeniería Informática) 2011, Primer Parcial (Curso 2011/2012): 3 problemas con solución. Gratis.

Temas del examen: Recursión: diseño, traza y diagramas de llamadas

Problema 1 · Recursión: diseño, traza y diagramas de llamadas

Dado el siguiente programa Java, elabore el diagrama con todas las llamadas que se ejecutan, indicando para cada una de ellas:

Nombre de la función ejecutada.

Variables locales y parámetros con sus valores correspondientes (utilice ? cuando se encuentren aún sin inicializar, e indique las actualizaciones tras cada asignación). En métodos del sistema como println, use param como nombre del parámetro.

Puntos de retorno señalando el número de línea.

Indique de forma explícita el texto final que se imprime en pantalla.

1 public class MisteryProgram extends ConsoleProgram {

2

3 public int isMisterious(int[] coefs, int initial, int pos) {

4 if (pos == coefs.length) {

5 return 0;

6 } else {

7 int value = isMisterious(coefs, initial, pos+1);

8 return coefs[pos] + initial * value;

9 }

10 }

11

12 public int isMisterious(int[] elems, int first) {

13 return isMisterious(elems, first, 0);

14 }

15

16 public void run() {

17 int[] poly = {4, 3, 2, 1};

18 int at = 5;

19 int eval = isMisterious(poly, at);

20 println("El resultado es " + eval);

21 }

22 }

Problema 2 · Recursión: diseño, traza y diagramas de llamadas

Problema 2. Función recursiva numberOfDigits

Diseñe e implemente una función recursiva que reciba un número natural (entero mayor o igual que cero) y devuelva el número total de dígitos que posee. Por ejemplo: 0 tiene 1 dígito; 23 tiene 2 dígitos; 2430 tiene 4 dígitos.

public int numberOfDigits(int n) {

// ?

}

Nota: Es obligatoria la justificación del diseño (mediante casos base, hipótesis inductiva o razonamiento matemático/gráfico); el código sin justificar no se considerará válido.

public int numberOfDigits(int n) {

}

Problema 3 · Recursión: diseño, traza y diagramas de llamadas

Problema 3. Comprobación recursiva de prefijo entre dos cadenas

Diseñe e implemente una función que determine si una primera cadena es prefijo de una segunda cadena. Por ejemplo:

"pata" es prefijo de "patata" (verdadero).

"pato" no es prefijo de "patata" (falso).

"pasota" no es prefijo de "paso" (falso).

"" es prefijo de "palote" (verdadero).

public boolean isPrefix(String prefix, String word) {

// ?

}

Pistas:

Para aplicar recursividad sin generar nuevos objetos de cadena en cada iteración, emplee una función auxiliar con un parámetro adicional que señale el índice actual que se compara.

Puede acceder a las posiciones con str.charAt(i).

Nota: Justifique adecuadamente el diseño recursivo (casos base y avance inductivo).

También puedes estudiar por temas

Practica un tema con ejercicios de los exámenes de todos los años, mezclados.

Ver los 6 temas

Otras convocatorias de 2011

Juny (2011) · Examen Segundo Parcial Curso 2011-2012 (2011)