|
Algoritmos y Estructuras de Datos I
Facultad de Ciencias Exactas y Naturales
Universidad de Buenos Aires
Primer Cuatrimestre de 2000
Resolución del Parcial 17
Ejercicio 1
P º {M=M0}
Q º {("i)(1≤i≤Filas(M) => MaxFilaHasta (M0,M,i,Columnas(M0)))}
MaxFilaHasta (M0,M,f,c) º {("j)(1≤j≤c => ValorMax (M0,M,f,j))}
IgualFila (M0,M,f) º {("j)(1≤j≤Columnas(M) => M[i][j]=M0[i][j])}
ValorMax (M0,M,i,j) º {($k)(1≤k≤j Ù M0[i][k]=M[i][j]) Ù
("k)(1≤k≤j => M0[i][k]≤M[i][j])}
Pc º {f=1}
Qc º {f=Filas(M)+1 Ù ("i)(1≤i<f => MaxFilaHasta (M0,M,i,Columnas(M0)))}
I º {1≤f≤Filas(M)+1 Ù ("i)(1≤i<f => MaxFilaHasta (M0,M,i,Columnas(M)) Ù
("i)(f≤i≤Filas(M) => IgualFila (M0,M,i))}
B º {f≤Filas(M)}
FV = Filas(M)+1-f
Procedure Ej1 (in-out:M:Matriz)
var
f:integer:=1;
while (f≤Filas(M)) do
ModifFila (M,f);
f:=f+1;
od;
endprocedure
// PROCEDIMIENTO AUXILIAR ModifFila
P º {M=M0 Ù f=F0 Ù 1≤F0≤Filas(M0)}
Q º {MaxFilaHasta (M0,M,f,Columnas(M)) Ù
("i)(1≤i≤Filas(M) Ù i¹f => IgualFila(M0,M,i))}
Pc º {c=2}
Qc º {MaxFilaHasta (M0,M,f,Columnas(M)) Ù
("i)(1≤i≤Filas(M) Ù i¹f => IgualFila(M0,M,i)) Ù c=Columnas(M)+1}
I º {2≤c≤Columnas(M)+1 Ù MaxFilaHasta(M0,M,f,c-1) Ù
("j)(c≤j≤Columnas(M) => M[f][j]=M0[f][j]) Ù
("i)(1≤i≤Filas(M) Ù i¹f => IgualFila (M0,M,i)) Ù f=F0}
B º c≤Columnas(M)
FV = Columnas(M)+1-c
Procedure ModifFila (in-out:M:Matriz,in:f:integer)
var
c:integer:=2;
while (c≤Columnas(M)) do
if M[f][c-1]>M[f][c] then M[f][c]:=M[f][c-1];
else skip;
fi;
c:=c+1;
od;
endprocedure
Ejercicio 2
Especificación en Funcional
factTope:: [Llamada] -> Nat -> [Cuenta]
factTope xs t = eliminar_duplicados (factT xs xs t)
factT:: [Llamada] -> [Llamada] -> Nat -> [Cuenta]
factT [] ys t = []
factT (x:xs) ys t
| (sumaMontos (cuentaDe x) ys) > t = (cuentaDe x):(factT xs ys t)
| otherwise = factT xs ys t
cuentaDe:: Llamada -> Cuenta
cuentaDe llam = Cliente (Origen llam)
sumaMontos:: Cuenta -> [Llamada] -> Nat
sumaMontos c [] = 0
sumaMontos c (x:xs)
| cuentaDe x == c = (Duracion x)*(Precio (Lugar (Origen x)) (Lugar (Destino x)) +
sumaMontos c xs
| otherwise = sumaMontos c xs
eliminar_duplicados es la misma que la de la práctica (en lugar de ser [Int] es [Cuenta] y en lugar de Int es Cuenta y asumo que existe la igualdad entre cuentas)
PROGRAMA EN IMPERATIVO
P º {L=L0 Ù t=T0}
Q º {ret_value=f_factTope L0 T0}
Pc º P
Qc º {ret_value=f_factT L0 L0 T0 Ù L=[]}
I º {ret_value=f_factT (f_take L0 (f_long L0 - f_long L)) L0 T0 Ù
L=f_drop L0 (f_long L0 - f_long L)
B º {f_long(L)>0}
Fv = f_long L
function Ej2 (L:lista de llamada,tope:integer):lista de Cuenta
while (Long(L)>0) do
if (SumaMontos(L,Cliente(Origen(Primero(L)))) > tope then
AgregarAtras(ret_value,Cliente(Origen(Primero(L))));
fi;
Cola(L);
od;
ret_value:=elimina_duplicados(ret_value);
endfunction
// la funcion elimina_duplicados es la misma que la de la practica pero en lugar de usar [Int] usa [Cuenta]
// FUNCION AUXILIAR SumaMontos
P º {L=L0 Ù c=C0}
Q º {ret_value=f_sumaMontos C0 L0}
Pc º {ret_value=0}
Qc º Q
I º {ret_value=f_sumaMontos c (f_take L0 (f_long L0-f_long L)) Ù
L=f_drop L0 (f_long L0-f_long L)}
B º {f_long L>0}
Fv = long L
function SumaMontos (L:lista de integer,c:cuenta):integer
ret_value:=0;
while (Long(L)>0) do
if (Cliente (Primero(L))=c) then
ret_value:=ret_value+Duracion(Primero(L))*
Precio(Lugar(Origen(Primero(L))),Lugar(Destino(Primero(L))));
fi;
Cola(L);
od;
endfunction
Aún no hay comentarios para este recurso.
Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.
Contacto »