Построение и реализация моделирующих алгоритмов q-схем. Метод “ΔT” - C#
Формулировка задачи:
Здравствуйте!
мне нужна помощь в реализации медота дельта на С# для схемы которая представлена на рисунке, форму уже создал, помощь нужна в том чтобы написать код к ней.WindowsFormsApplication11.rar
Решение задачи: «Построение и реализация моделирующих алгоритмов q-схем. Метод “ΔT”»
textual
Листинг программы
/// <summary> /// Генерирует сигналы через случайные промежутки вермени /// </summary> public abstract class Generator { protected static Random rnd = new Random(1); //время следующего сигнала protected double nextSignalTime; /// <summary> /// Проверить, наступило ли время сигнала, и если да, то сгенерировать следующий сигнал /// </summary> public virtual bool CheckAndGenerate(double currentTime) { if (nextSignalTime <= currentTime) { GenerateNextSignalTime(currentTime); return true; } return false; } /// <summary> /// Генерация след сигнала /// </summary> protected abstract void GenerateNextSignalTime(double currentTime); } /// <summary> /// Генератор сигнала с равномерным распределением /// </summary> public class LinearGenerator : Generator { double min; double max; public LinearGenerator( double min, double max) { this.min = min; this.max = max; } protected override void GenerateNextSignalTime(double currentTime) { var t = min + rnd.NextDouble() * (max - min); nextSignalTime = currentTime + t; } } /// <summary> /// Генератор сигнала с экспоненциальным распределением /// </summary> public class ExponentialGenerator : Generator { double mean; public ExponentialGenerator(double mean) { this.mean = mean; } protected override void GenerateNextSignalTime(double currentTime) { var t = -mean * Math.Log(rnd.NextDouble()); nextSignalTime = currentTime + t; } } /// <summary> /// Канал обслуживания с накопителем /// (равномерное распределение времени обслуживания) /// </summary> class ServiceChannel : LinearGenerator { /// <summary> /// Текущая длина очереди /// </summary> public int QueueLength { get; private set;} public ServiceChannel(double min, double max) : base(min, max) { } /// <summary> /// Добавление заявки в очередь /// </summary> public void AddRequest(double currentTime) { if(QueueLength == 0) GenerateNextSignalTime(currentTime); QueueLength++; } /// <summary> /// Обрабатываем заявки /// </summary> public override bool CheckAndGenerate(double currentTime) { if (QueueLength <= 0) return false;//нет заявок в очереди if (nextSignalTime <= currentTime) { GenerateNextSignalTime(currentTime); QueueLength--;//обрабатываем заявку return true; } return false; } } /// <summary> /// Решатель /// </summary> class Solver { public Generator G1; public Generator G2; public ServiceChannel U1; public ServiceChannel U2; private double time = 0; public Solver(Generator G1, Generator G2, ServiceChannel U1, ServiceChannel U2) { this.G1 = G1; this.G2 = G2; this.U1 = U1; this.U2 = U2; } public void Run(double dt) { if (G1.CheckAndGenerate(time)) U1.AddRequest(time); if (U1.CheckAndGenerate(time)) U2.AddRequest(time); if (G2.CheckAndGenerate(time)) U2.AddRequest(time); U2.CheckAndGenerate(time); time += dt; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д