Ejercicios Tema 2 de Exámenes de Prácticas de AD2 Ejercicio 1 – Junio’00. Dada las siguientes declaraciones y la función recursiva Diag0: Const n=3; Type matriz = array [1..n,1..n] of integer; function Diag0 ( Var m:matriz; i:integer): boolean; var res: boolean; * begin if i=n+1 then res:=true else if (m[i,i]=0) then res:=Diag0(m,i+1) else res:=false; Diag0:=res end; Sabiendo que todos_cero es una variable del programa principal de tipo lógico, y que mg es una matriz definida en el programa principal que contiene: 1 7 0 mg = 0 0 −1 666 13 0 Se pide: Describir la secuencia de registros de activación que se visualizarían desde el depurador, cuando se sitúe un punto de ruptura en la línea donde está el asterisco y se realiza la llamada: (2.5 puntos) todos_cero := Diag0 (mg,1); ¿Cómo variaría el coste espacial del algoritmo si el paso de la matriz fuera por valor en lugar de por referencia? Escribir el coste resultante de esta modificación en función de n. (0,5 puntos) Página 1 de 1 Ejercicio 1 – Septiembre’00. Dadas las siguientes declaraciones el procedimiento recursivo Sumvec: Const n=4; Type Vector = array [1..n] of integer; Procedure Sumvec ( Var v1,v2:Vector; i:integer); var aux: Integer; begin * if i>0 then begin Aux:= v1[i]+v2[i+1]; v2[i]:=aux; SumVec(v1,v2,i-1); end; end; Sabiendo que Vectorinicial y Vectorfinal son variables del programa principal de tipo vector, que en la llamada inicial contienen (1,2,3,4) y (0,0,0,0) respectivamente. Se pide: Describir la secuencia de registros de activación que se visualizarían desde el depurador, cuando se sitúe un punto de ruptura en la línea donde está el asterisco y se realiza la llamada: Sumvec (vectorinicial,vectorfinal,3); (2.5 puntos) ¿Cómo variaría el coste espacial del algoritmo si el paso de v1 fuera por valor en lugar de por referencia? Escribir el coste resultante de esta modificación en función de n. (0,5 puntos) Página 2 de 2 Ejercicio 1 – Junio’01. Considérense las siguientes declaraciones y la función recursiva ordenados: const Nmax = 5; type vec = array [1..Nmax] of integer; function ordenados(var v: vec; i: integer ): boolean; var res: boolean; begin *if i=1 then res:= true else if v[i-1] <= v[i] then res:= ordenados(v, i-1) else res:= false; ordenados:= res *end; Sabiendo que esta_ordenado es una variable del programa principal de tipo lógico y que vector es una variable del programa principal de tipo vec que en la llamada inicial contiene los valores (2, 6, 1, 3, 7), se pide: a) Describir los campos del registro de activación (variables locales y parámetros) (0.5 puntos). b) Describir la secuencia de registros que aparecerían en la ventana del depurador cuando se sitúan los puntos de ruptura en las líneas donde están los asteriscos y se realiza la llamada: esta_ordenado := ordenados(vector, Nmax); (2 puntos). c) ¿Cómo variaría el coste espacial del algoritmo si el paso del primer parámetro v se realiza por valor en lugar de por referencia? Escribir el coste resultante de esta modificación en función de la talla. (0.5 puntos) Página 3 de 3 Ejercicio 1 – Septiembre’01. Considérense las siguientes declaraciones y el procedimiento recursivo invertir: const Nmax = 5; type vec = array [1..Nmax] of integer; procedure invertir(var v: vec; i,j: integer ); var aux: integer; begin *if i < j then begin invertir(v, i+1, j-1); aux:= v[i]; v[i]:= v[j]; v[j]:= aux; end *end; Sabiendo que vector es una variable del programa principal de tipo vec que en la llamada inicial contiene los valores (2, 6, 1, 3, 7), se pide: a) Describir los campos del registro de activación (variables locales y parámetros) (0.5 puntos). b) Describir la secuencia de registros que aparecerían en la ventana del depurador cuando se sitúan los puntos de ruptura en las líneas donde están los asteriscos y se realiza la llamada: invertir (vector, 1, Nmax); (2 puntos). c) ¿Cómo variaría el coste espacial del algoritmo si el paso del primer parámetro v se realiza por valor en lugar de por referencia? Escribir el coste resultante de esta modificación en función de la talla (0.5 puntos). Página 4 de 4 Ejercicio 2. Dado la función recursiva linea_tri_sup del ejercicio anterior: Ejercicio 2. La función recursiva TD (acrónimo de Tri-Diagonal) , resuelve el mismo problema del bucle “mientras” más interno del primer ejercicio con la misma complejidad. Es decir, que dada la matriz y un índice "i" compruebe que: Slos elementos de la fila i-esima desde la columna i+2 hasta n sean iguales a 0 y Slos elementos de la columna i-esima desde la fila i+2 hasta n sean iguales a 0. function linea_tri_sup (var v:elVector; columna:integer):boolean; { llamada inicial con : (columna = linea–1) y (1 ≤ linea ≤ n) } begin * if (columna = 0) then linea_tri_sup:= true else if v[columna] <> 0 then linea_tri_sup:= false else linea_tri_sup:= linea_tri_sup(v,columna–1) *end; Se pide: a) Puntuación: 2 puntos Describir la secuencia de registros de activación que se visualizarían en la pila desde el depurador, cuando se han situado los dos puntos de ruptura en las líneas señalada con un asterisco y realiza la llamada: 1 3 8 20 triangular:= linea_tri_sup(mg[n],n-1); donde mg es la matriz M1 del ejemplo del ejercicio anterior. 0 M1 = 0 0 2 0 5 3 0 0 12 7 4 function TD (var m:LaMatriz; i,j:integer):boolean; begin * if (j=n+1) then TD:= true else if (m[i,j] <> 0) or (m[j,i] <> 0) then TD:= false else TD:= TD(m,i,j+1) end; Se pide (puntuación: 2.5 puntos): a) Puntuación: 2 puntos Describir la secuencia de registros de activación que se visualizarían en la pila desde el depurador, cuando se han situado el punto de ruptura en la línea señalada con un asterisco y realiza la llamada: tridiag:= TD(mg,1,3); donde mg es la matriz M1 del ejemplo del ejercicio anterior. 1 2 M1 = 0 0 4 0 7 6 4 1 0 0 0 0 0 6 b) Puntuación: 0.5 puntos Escribid el coste espacial de linea_tri_sup, en función de la talla del problema por resolver cuando se invoca como en el apartado anterior. Justificar la respuesta. b) Puntuación: 0.5 puntos Escribir el coste espacial de TD, en función de la talla del problema por resolver cuando se invoca como en el apartado anterior. Justificar la respuesta. Página 5 de 5 Página 6 de 6