![]() |
Haga click para publicitar en Alipso.com |
| Buscando Secundarios
| Universidades
| Carreras
| Test
Orientación Vocacional | Medios
| Profesores particulares
| Institutos
| Campus Material Monografias | Exámenes Secundarios | Exámenes Universitarios | Enlaces | Enviar material | Diversión Postales | Humor | Descargas | Juegos Comunidad Foros | Institucional Publicite | En su sitio | Contáctese Cursos en Buenos Aires Cursos de Informática | Cursos de apoyo al CBC | Carreras y Cursos de Diseño, Comunicación, Arte y Fotografía |
|
|
Imprimir apunte |
Recomendar a un amigo |
Recordarme el recurso |
|
Más sobre este recurso: Catalogado en base de datos como: Algoritmos y Estructuras de Datos I: 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. Programación. Agregado: 17 de JULIO de 2003 (Por Michel Mosse) | Palabras: 553 | Votar! | Sin Votos | Sin comentarios | Agregar Comentario Categoría: Apuntes y Monografías > Computación > Programación > |
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
| ||||
| X | ||||