Se desea modelar usando mailboxes la atención de un peaje de n cajas a vehículos. Los autos deberán darle al cajero el número de tarjeta de crédito y este le devolverá un numero de ticket para lo cual contará con la función: function pago(nro_de_tarjeta : in integer): integer Los autos deberán elegir la caja con menor cantidad de autos en cola. Solo se podrá implementar una tarea auxiliar (Admin). El programa principal ejecutará el siguiente código: PROGRAM PEAJE cajas ARRAY [1..20] of mailbox (int) administrador mailbox (int, int, string) Procedure Caja(int: in numCaja) BEGIN int numTarjeta while true do RECEIVE (cajas[numCaja],numTarjeta) int ticket = pago(numTarjeta) SEND(mb + numTarjeta, ticket) end while End procedure Procedure Auto (int: in numTarjeta) mb + NumTarjeta mailbox(int) BEGIN SEND(administrador, numTarjeta,0,"entrar") int numCaja RECEIVE(mb + numTarjeta, numCaja) SEND(cajas[numCaja],numTarjeta) int ticket RECEIVE(mb + numTarjeta,ticket) SEND(administrador,numTarjeta, numCaja, "salir") End procedure Procedure Amin() BEGIN int numTarjeta,numCaja, cajaElegida STRING accion colaCaja ARRAY [1..20] if int //inicializo la cantidad de vehiculos en cada caja for i = 1 to 20 do colaCaja[i] = 0 end for while TRUE do RECEIVE(administrador, numTarjeta, numCaja,accion) if accion == "entrar" then // numero representa el numero de tarjeta del auto // devuelve la posición del array cuyo valor es el mínimo cajaElegida = min(colaCaja) colaCaja[cajaElegida] = colaCaja[cajaElegida] + 1 SEND(mc + numTarjeta, cajaElegida) else if accion == "salir" then //restar uno a caja // numero representa el numero de caja colaCaja[numCaja] = colaCaja[numCaja] - 1 end end while End procedure begin cobegin Admin Auto(nro_tarjeta1) ... Auto(nro_tarjetaM) Caja(1) ... Caja(n) coend end END PROGRAM