На основе коллекций Queue и List запрограммировать модель эскалатора - C#
Формулировка задачи:
Доброго времени суток, вот нужно сделать программу на С#. хоть С# я и знаю немного, но моего ума не хватает на составление кода. Помогите пожалуйста. Просто нужен код, а там я уже разберусь.
Задание:
На основе коллекций Queue и List<T> запрограммировать модель эскалато-ра. Для эскалатора задается количество ступенек и скорость движения (ступеньки в минуту) Люди случайного веса через случайные промежутки времени входят на эскалатор, доезжают до конца и выходят из него. Некоторые из людей не стоят на ступеньках, а идут с некоторой случайной скоростью (ступеньки в минуту) по направлению движения эскалатора.
Программа должна моделировать вход, движение и выход людей, а также, через равные про-межутки времени определять нагрузку на эскалатор (общий вес людей на ступеньках).
Решение задачи: «На основе коллекций Queue и List запрограммировать модель эскалатора»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { escalator= new Escalator(); new Thread(() => EntryModel(3000, obj,escalator)).Start(); new Thread(() => ExitModel(100, obj, escalator)).Start(); new Thread(() => CheckWeight(500, obj, escalator)).Start(); } static object obj = new object(); static Escalator escalator; public static void EntryModel(int MaxSpanMilliseconds, object lockobject, Escalator esc) { var r=new Random(); while (true) { Thread.Sleep(r.Next(MaxSpanMilliseconds)); lock (lockobject) esc.AddPerson(GetRandomPersonOnEscalator()); } } public static void ExitModel(int millisenonds, object lockobject, Escalator esc) { while (true) { Thread.Sleep(millisenonds); lock (lockobject) esc.RemovePersons(); } } public static void CheckWeight(int millisenonds, object lockobject, Escalator esc) { while (true) { Thread.Sleep(millisenonds); double load=0; int count=0; lock (lockobject) load = esc.SummaryLoad(out count); Console.WriteLine("Summary load: {0}\nPersons count: {1}\n",load,count); } } public static PersonOnEscalator GetRandomPersonOnEscalator(double minWeight=10, double maxWeight=150, double maxSpeed=600) { var r = new Random(); return new PersonOnEscalator(r.NextDouble()*(maxWeight-minWeight)+minWeight, r.Next(10)>7?r.NextDouble()*maxSpeed:0); } public class Person { public double Weight { get; set; } public Person(double weight) { Weight = weight; } } public class PersonOnEscalator : Person { public double Speed { get; set; } public DateTime EntryTime { get; private set; } public DateTime ExitTime { get; private set; } public PersonOnEscalator(double weight, double speed = 0) : base(weight) { Speed = speed; } public void AddedTo(Escalator esc) { EntryTime = DateTime.Now; ExitTime = EntryTime + TimeSpan.FromMinutes((esc.StepCount / (Speed + esc.Speed))); } } public class Escalator { public int StepCount { get; set; } public double Speed { get; set; } public Queue<PersonOnEscalator> QueuePersons { get; set; } public List<PersonOnEscalator> ListPersons { get; set; } public double SummaryLoad(out int count) { count=QueuePersons.Count+ListPersons.Count; return QueuePersons.Sum(x => x.Weight) + ListPersons.Sum(x => x.Weight); } public void AddPerson(PersonOnEscalator person) { person.AddedTo(this); Console.WriteLine("Add new person: weight {0}, speed {1}, entry time {2}, exit time {3}", person.Weight, person.Speed, person.EntryTime, person.ExitTime); if (person.Speed > 0) ListPersons.Add(person); else QueuePersons.Enqueue(person); } public void RemovePersons() { while (QueuePersons.Count > 0 && QueuePersons.Peek().ExitTime < DateTime.Now) { QueuePersons.Dequeue(); Console.WriteLine("Queue person exit"); } var newList = ListPersons.Where(x => x.ExitTime > DateTime.Now).ToList(); if (newList.Count < ListPersons.Count) Console.WriteLine("Some list persons exit"); ListPersons = newList; } public Escalator(int stepCount = 600, int speed = 600) { StepCount = stepCount; Speed = speed; QueuePersons = new Queue<PersonOnEscalator>(); ListPersons = new List<PersonOnEscalator>(); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д