Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
barcos
//Rextester.Program.Main is the entry point for your code. Don't change it. //Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5 using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; namespace Rextester { public delegate void ArrivalEventHandler(Barcaza sender, EventArgs e); public delegate void NotifyEventHandler(Barcaza sender, EventArgs e); public class Time{ private static int current_time; private static int total_time; //Todos los elementos se subscriben a TimeEvent para avanzar la simulación. public static void RunTime(){ while( current_time < total_time ){ } } } public class Barcaza { private static int IDcount = 0; int capacity; List<Turista> pasajeros; int id; int position; // position 0 corresponde a estar en el puerto public bool IsFull { get { return capacity == pasajeros.Count; } } public int Capacity { get { return capacity; } } public int ID{ get{ return id;} } public Barcaza(int capacity){ this.pasajeros = new List<Turista>(); this.id = ++IDcount; this.position = 300; this.capacity = capacity; } public void Transportar(int distance){ Console.WriteLine("Barcaza " + this.id + " a embarcado rumbo a su destino, con los pasajeros:"); foreach (var p in pasajeros){ Console.WriteLine(p.Nombre +" "+ p.Apellido); } position = distance; } public void SubirPasajero(Turista t){ pasajeros.Add(t); } public void Avanzar(){ if(position == 0){ //raise arrival event pasajeros.Clear(); OnArrival(EventArgs.Empty); } else{ position--; } } //Eventos: //Llega barcaza: notifica a la agencia que llegó la barcaza. Esta es un evento de la instancia Barcanza. //De esta forma se puede extender el modelo a que varios barcos estén funcionando //Agencia debe subscribirse a tal evento public event ArrivalEventHandler Arrival; public void OnArrival(EventArgs e){ if( Arrival != null){ Arrival(this, e); } } } public class Turista{ public string Nombre{ get; set; } public string Apellido{ get; set; } public bool on_board; public Turista(string nombre, string apellido){ this.Nombre = nombre; this.Apellido = apellido; this.on_board = false; } public bool Embarcar(){ return true; } } public class Agencia{ Queue<Turista> lista_espera; public int Size{ get{ return lista_espera.Count; } } public Agencia(){ this.lista_espera = new Queue<Turista>(); } //Registrar Turista public void RegistrarTurista(Turista t){ lista_espera.Enqueue(t); } //Subscribirse a los eventos de las Barcazas public void RegistrarBarcaza(Barcaza b){ b.Arrival += new ArrivalEventHandler(NotifyArrival); } //Eventos public event NotifyEventHandler Notify; //Este método se llama cuando Barco llega //Este método podria tambien gatillar un evento, el cual haga que los pasajeros se suban. public void NotifyArrival(Barcaza sender, EventArgs e){ Console.WriteLine("Notificación! Barcaza " + sender.ID + " ha llegado y está lista para salir"); while (! sender.IsFull && lista_espera.Count > 0) { Turista pasajero = lista_espera.Dequeue(); Console.WriteLine("Pasajero #{0} #{1} se sube a la barcaza!", pasajero.Nombre, pasajero.Apellido); sender.SubirPasajero(pasajero); } sender.Transportar(300); } public void NotifyPassenger(Barcaza sender, EventArgs e) { for (int i = 0; i < sender.Capacity; i++) { Turista pasajero = lista_espera.Dequeue(); } } } public class Program { public static void Main(string[] args) { //Your code goes here //Simulación //Parámetros de simulación int nbarcazas = 1; int time = 0; int pcount = 0; Random rand = new Random(); Agencia agencia = new Agencia(); Barcaza single_boat = new Barcaza(3); Barcaza second_boat = new Barcaza(4); agencia.RegistrarBarcaza(single_boat); agencia.RegistrarBarcaza(second_boat); //Simulación MultiThread //1 thread: llegada de clientes //2 thread: barcos //Sección crítica: embarcar pasajeros a los barcos. //Inicializar threads while (time < 10000) { //cada iteración la probabilidad que llegue un if (rand.NextDouble() < 0.02) { agencia.RegistrarTurista(new Turista("John", (++pcount).ToString())); Console.WriteLine("Time #{0}| Lista espera: #{1}" , time, agencia.Size); } //Barco avanza single_boat.Avanzar(); second_boat.Avanzar(); time++; } Console.Read(); } } }
run
|
edit
|
history
|
help
0
2.2 Basic types: Dictionary
c# with mysql
Heap sort
Code_only_sin_xm
qwerty
lasses, properties, methods, ling begining
Việc Làm Bắc Ninh
Fórum ➡ Get all combinations for ▶different◀ Id's ♦
retrylogic
Timer2