Ejercicios Pract. 2

Anuncio
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
Descargar