La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Matías Blanco – Sergio Pérez. The Problem A few peregrins, each one with his own strenght and money want to make the Saint James’ Way. They can start.

Presentaciones similares


Presentación del tema: "Matías Blanco – Sergio Pérez. The Problem A few peregrins, each one with his own strenght and money want to make the Saint James’ Way. They can start."— Transcripción de la presentación:

1 Matías Blanco – Sergio Pérez

2 The Problem A few peregrins, each one with his own strenght and money want to make the Saint James’ Way. They can start their journey from three different places: Roncesvalles, Somport or Nájera… but the way is long and they will need to rest in order to recover their energy. When a peregrin arrives to a city the first thing he does is trying to sleep at a free hostel. In this case he spents no money at all. If the hostel is at its full capacity he’ll try to pay for a room at a Hotel. He’ll be always resting better at a hotel than at a free hostel. He’ll recover more energy but at a cost. If a peregrin can’t pay, he’ll not rest at all. If he has not enought energy to move to the next city, he’ll quit his journey.

3 Our solution  We’ve used protected types – A city is a protected type, and the whole way is formed by them. So the way could be know as an array of protected types.  A city will have these properties:  The next city (integer representing the position of the city in the array)  The cost for moving to the next city (in terms of energy)  The numbersof rooms the local hostel has.  The energy recovered if sleeping at a free hoStel  The energy recovered if sleeping at a Hotel  The price of a room at the hotel

4 Ciudad protected type Ciudad is procedure Init(next_cost : Integer;next_c: Integer; plazasA : Integer; F_Recupera_Alb : Integer; HotelCuesta :Integer; F_Recupera_Hot : Integer); procedure DormirEnAlbergue (Id : Integer; PuedeDormir : out Boolean; Fuerza : in out Integer); procedure SalirDeAlbergue (Id : Integer); procedure DormirEnHotel (Id : Integer; Dinero : in out Integer; PuedeDormir : out Boolean; Fuerza : in out Integer); procedure SalirDeHotel(Id : Integer); function get_next_ciu return Integer; function get_next_ciu_cuesta return Integer; private next_ciu_cuesta : Integer; next_ciu : Integer; PlazasAlbergue : Integer; F_Recupera_Alblbergue : Integer; Precio_hotel : Integer; F_Recupera_Hotel: Integer; end Ciudad;

5 Ciudad (2) procedure DormirEnAlbergue (Id : Integer; PuedeDormir : out Boolean; Fuerza : in out Integer) is begin PuedeDormir := False; -- En un principio no if PlazasAlbergue > 0 then Put_Line("El peregrino "&Integer'Image(Id)&" consigue sitio en albergue"); Put_Line("+ "&Integer'Image(F_Recupera_Alblbergue)&" fuerza"); Put_Line(Integer'Image(PlazasAlbergue)&" plazas"); plazasAlbergue := PlazasAlbergue - 1; Fuerza := Fuerza + F_Recupera_Alblbergue; PuedeDormir := True; -- Entonces sà end if; end DormirEnAlbergue;

6 Ciudad (4) procedure SalirDeHotel (Id : Integer) is begin Put_Line("El peregrino "&Integer'Image(Id)&" se va del hotel"); end SalirDeHotel; function get_next_ciu return Integer is begin return next_ciu; end get_next_ciu; function get_next_ciu_cuesta return Integer is begin return next_ciu_cuesta; end get_next_ciu_cuesta;

7 Camino type Camino is array (1.. MAX_CIUDADES) of Ciudad; CaminoDeSantiago : Camino;

8 Peregrino task body Peregrino is Dinero : Integer; Fuerzas : Integer; Fracaso : Boolean; Tiempo_Dormir : constant := 3.0; CiudadActual : Integer; PuedeDormir : Boolean; Descansa_En : TDescanso; begin Fuerzas := Integer(Random(G)*Float(MAX_FUERZAS-2))+2; Dinero := Integer(Random(G)*Float(MAX_DINERO-1))+1; CiudadActual := Integer(Random(G)*2.0)+1; -- 1, 2 o 3 Fracaso := False; -- Inicializado a false

9 Peregrino (2) while CiudadActual /= SANTI and not Fracaso loop Descansa_En := nada; -- Por defecto CaminoDeSantiago(CiudadActual).DormirEnAlbergue(Id, PuedeDormir, Fuerzas); if not PuedeDormir then Put_Line("El peregrino "&Integer'Image(Id)&" no encuentra sitio en el albergue"); CaminoDeSantiago(CiudadActual).DormirEnHotel(Id, Dinero, PuedeDormir, Fuerzas); if not PuedeDormir then Put_Line("El peregrino "&Integer'Image(Id)&" no puede permitirse el hotel"); else Descansa_En := hotel; end if; else Descansa_En := albergue; end if;...

10 Peregrino (3) if PuedeDormir then delay Duration(Tiempo_Dormir*Random(G)); if Descansa_En = albergue then CaminoDeSantiago(CiudadActual).SalirDeAlbergue(Id); elsif Descansa_En = hotel then CaminoDeSantiago(CiudadActual).SalirDeHotel(Id); end if; -- Se va si ha descansado else Put_Line("El peregrino "&Integer'Image(Id)&" no descansa en "&Integer'Image(CiudadActual)); end if;

11 Peregrino (4) if Fuerzas < CaminoDeSantiago(CiudadActual).get_next_ciu_cuesta then Put_Line(“¡¡POBRE!! El peregrino "&Integer'Image(Id)&" fracaso, no tiene fuerzas!!"); Fracaso := True; -- Jarl else -- Si puede... if CiudadActual /= SANTI then Put_Line("El peregrino "&Integer'Image(Id)&" a por la ciudad "&Integer'Image(CaminoDeSantiago(CiudadActual).get_next_ciu)); Fuerzas := Fuerzas - CaminoDeSantiago(CiudadActual).get_next_ciu_cuesta; Ciudadactual := CaminoDeSantiago(CiudadActual).get_next_ciu; end if; end loop; -- sale de aquí = ya no va a ningín sitio más

12 Peregrino (5) … continúa desde “fin loop” de recorrer nodos if not Fracaso then Put_Line("BIENNNNN!!! Peregrino"&Integer'Image(Id)&" ha llegado a Santiago de Compostela!! Rece por nosotros! Para aprobar!!"); end if; end Peregrino;

13 Initialization procedure InitNodos is begin -- Informacion del camino, ayuda x J. Peris (gracias) CaminoDeSantiago(1).Init(3,3,2,1,3,2); -- Roncesvalles CaminoDeSantiago(2).Init(4,4,2,1,3,1); -- Somport CaminoDeSantiago(3).Init(2,2,1,1,3,1); -- Nájera CaminoDeSantiago(4).Init(5,6,1,2,3,2); -- Otro CaminoDeSantiago(5).Init(6,4,1,2,3,2); -- … CaminoDeSantiago(9).Init(0,0,1000,1000,1000,1000); end InitNodos;

14 Initialization (2) begin InitNodos; for I in 1..MAX_PEREGRIN loop Peregrinos := new Peregrino(I); delay Duration(Random(G)); end loop; end CaminoTProtAda;

15 Screenshot

16 Questions? Thank you.


Descargar ppt "Matías Blanco – Sergio Pérez. The Problem A few peregrins, each one with his own strenght and money want to make the Saint James’ Way. They can start."

Presentaciones similares


Anuncios Google