Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AntonioMorenoSaavedra 101721919 Tarea2
AntonioMorenoSaavedra 101721919 Tarea2
protecting FLOAT .
protecting INT .
protecting STRING .
protecting BOOL .
op Envio(_,_,_,_,_,_,_) : Int String String Float Float Float Float -> Envio
[ctor] .
vars PW PV VC VP :Float .
vars W V PR : Float .
vars E A : Envio .
vars LP TP : LPaque .
vars LE TE : LEnvio .
vars LC TC : LCliente .
var C : Cliente .
var P : Paque .
ceq Iva(Envio(_,_,CT,_,_,_,_,_),P,C) =
(montoBruto(Envio(_,_,CT,_,_,_,_,_),P,C) * 0.15) if(CT == "aereo") .
ceq Iva(Envio(_,_,CT,_,_,_,_,_),P,C) =
(montoBruto(Envio(_,_,CT,_,_,_,_,_),P,C) * 0.1) if(CT == "terrestre") .
ceq Iva(Envio(_,_,CT,_,_,_,_,_),P,C) =
(montoBruto(Envio(_,_,CT,_,_,_,_,_),P,C) * 0.05) if(CT == "barco") .
ceq montoNeto(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_,PT)) =
(montoBruto(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_,PT)) +
Iva(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_,PT)) - (VP * float(PT)) if((VP * float(PT))
< (montoBruto(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_, PT)))) .
ceq montoNeto(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_,PT)) =
(Iva(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_, PT))) if((VP * float(PT)) > =
(montoBruto(Envio(_,_,_,_,_,_,VP,_),P,Cliente(_,_, PT))).
eq bDestino(_,nilLEnvio,TE)= TE .
*** Halla el mejor envio para un cliente con un paquete , de una lista
de envios , de manera iterativa
ceq
bEnvio(Cliente(IDC,MD,PT),Paque(_,_,W,V),Envio(IDE,ND,CT,PW,PV,VC,VP,_)
LE, A)= bEnvio(Cliente(IDC,MD,PT),Paque(_,_,W,V),LE,A)
if(not(motnoNeto(Envio(IDE,ND,CT,PW,PV,VC,VP,_),Paque(_,_,W,V),Cliente(IDC
,MD,PT)) < motnoNeto(A,Paque(_,_,W,V),Cliente(IDC,MD,PT)))) .
ceq
bEnvio(Cliente(IDC,MD,PT),Paque(_,_,W,V),Envio(IDE,ND,CT,PW,PV,VC,VP,_)
LE, A)=
bEnvio(Cliente(IDC,MD,PT),Paque(_,_,W,V),LE,Envio(IDE,ND,CT,PW,PV,VC,VP,_)
if(motnoNeto(Envio(IDE,ND,CT,PW,PV,VC,VP,_),Paque(_,_,W,V),Cliente(IDC,MD
,PT)) < motnoNeto(A,Paque(_,_,W,V),Cliente(IDC,MD,PT))) .
ceq
bEnvio(Cliente(IDC,MD,PT),Paque(_,_,W,V),Envio(IDE,ND,CT,PW,PV,VC,VP,_)
LE, A)= bEnvio(Cliente(IDC,MD,PT),Paque(_,_,W,V),bDestino(NDB,E
LE,nilLEnvio), A) if(not(ND == NDB) .
eq bEnvio(_,_,nilLEnvio,A)=A .
*** Halla lista de envios candidatos, para un paquete cuyo monto neto
por unidad de peso es menor que el presupuesto del cliente
eq lCandidatos(_,_,nilLEnvio,_,TE)= TE .
eq
bcEnvio(Cliente(IDC,MD,PT),Envio(IDE,ND,CT,PW,PV,VC,VP,nilLPaque) LE,TE)
= bcEnvio(Cliente(IDC,MD,PT),LE,TE) .
eq
bcEnvio(Cliente(IDC,MD,PT),Envio(IDE,ND,CT,PW,PV,VC,VP,Paque(IDP,IDCA,W,
V) LP) LE,TE)= bcEnvio(Cliente(IDC,MD,PT),Envio(IDE,ND,CT,PW,PV,VC,VP,LP)
LE,TE) .
eq
bcEnvio(Cliente(IDC,MD,PT),Envio(IDE,ND,CT,PW,PV,VC,VP,Paque(IDP,IDC,W,V
) LP) LE,TE)= bcEnvio(Cliente(IDC,MD,PT),Envio(IDE,ND,CT,PW,PV,VC,VP,LP)
LE, TE Envio(IDE,ND,CT,PW,PV,VC,VP,Paque(IDP,IDC,W,V)) .
eq bcEnvio(_,nilLEnvio,LE)= LE .
eq
recalMD(Cliente(IDC,MD,PT),Envio(IDE,ND,"aereo",PW,PV,VC,VP,Paque(_,_,W,_
)) LE,F,T,M)= recalMD(Cliente(IDC,MD,(PT + 20 * W)),LE,(F + 1),T,M) .
eq
recalMD(Cliente(IDC,MD,PT),Envio(IDE,ND,"terrestre",PW,PV,VC,VP,Paque(_,_,
W,_)) LE,F,T,M)= recalMD(Cliente(IDC,MD,(PT + 10 * W)),LE,F,(T + 1),M) .
eq
recalMD(Cliente(IDC,MD,PT),Envio(IDE,ND,"barco",PW,PV,VC,VP,Paque(_,_,W,_
)) LE,F,T,M)=recalMD(Cliente(IDC,MD,(PT + 5 * W)),LE,F,T,(M + 1)) .
ceq recalMD(Cliente(IDC,MD,PT),nilLEnvio,F,T,M)=
Cliente(IDC,"aereo",PT) if(F > T and F > M) .
ceq recalMD(Cliente(IDC,MD,PT),nilLEnvio,F,T,M)=
Cliente(IDC,"terrestre",PT) if(T > F and T > M) .
ceq recalMD(Cliente(IDC,MD,PT),nilLEnvio,F,T,M)=
Cliente(IDC,"barco",PT) if(M > F and M > T) .
eq ActuaMD(nilLCliente,_,LC)= LC .
endfm
***punto T.8
Iter sobre la lista de clientes tomando cada uno para recalcular sus
atributos.
Dado un cliente iter sobre la lista de envos tomando cada uno para
establecer si el cliente tena paquetes en el envo.
Dado el cliente y el envo, iter sobre la lista de paquetes para hallar los
paquetes del cliente en el envo, acumulando puntos y contando los
paquetes en cada tipo de transporte.