Построение и реализация моделирующих алгоритмов q-схем. Метод “ΔT” - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! мне нужна помощь в реализации медота дельта на С# для схемы которая представлена на рисунке, форму уже создал, помощь нужна в том чтобы написать код к ней.WindowsFormsApplication11.rar

Решение задачи: «Построение и реализация моделирующих алгоритмов q-схем. Метод “ΔT”»

textual
Листинг программы
  1.     /// <summary>
  2.     /// Генерирует  сигналы через случайные промежутки вермени
  3.     /// </summary>
  4.     public abstract class Generator
  5.     {
  6.         protected static Random rnd = new Random(1);
  7.  
  8.         //время следующего сигнала
  9.         protected double nextSignalTime;
  10.  
  11.         /// <summary>
  12.         /// Проверить, наступило ли время сигнала, и если да, то сгенерировать следующий сигнал
  13.         /// </summary>
  14.         public virtual bool CheckAndGenerate(double currentTime)
  15.         {
  16.             if (nextSignalTime <= currentTime)
  17.             {
  18.                 GenerateNextSignalTime(currentTime);
  19.                 return true;
  20.             }
  21.  
  22.             return false;
  23.         }
  24.  
  25.         /// <summary>
  26.         /// Генерация след сигнала
  27.         /// </summary>
  28.         protected abstract void GenerateNextSignalTime(double currentTime);
  29.     }
  30.  
  31.     /// <summary>
  32.     /// Генератор сигнала с равномерным распределением
  33.     /// </summary>
  34.     public class LinearGenerator : Generator
  35.     {
  36.         double min;
  37.         double max;
  38.  
  39.         public LinearGenerator( double min, double max)
  40.         {
  41.             this.min = min;
  42.             this.max = max;
  43.         }
  44.  
  45.         protected override void GenerateNextSignalTime(double currentTime)
  46.         {
  47.             var t = min + rnd.NextDouble() * (max - min);
  48.             nextSignalTime = currentTime + t;
  49.         }
  50.     }
  51.  
  52.     /// <summary>
  53.     /// Генератор сигнала с экспоненциальным распределением
  54.     /// </summary>
  55.     public class ExponentialGenerator : Generator
  56.     {
  57.         double mean;
  58.  
  59.         public ExponentialGenerator(double mean)
  60.         {
  61.             this.mean = mean;
  62.         }
  63.  
  64.         protected override void GenerateNextSignalTime(double currentTime)
  65.         {
  66.             var t = -mean * Math.Log(rnd.NextDouble());
  67.             nextSignalTime = currentTime + t;
  68.         }
  69.     }
  70.  
  71.  
  72.     /// <summary>
  73.     /// Канал обслуживания с накопителем
  74.     /// (равномерное распределение времени обслуживания)
  75.     /// </summary>
  76.     class ServiceChannel : LinearGenerator
  77.     {
  78.         /// <summary>
  79.         /// Текущая длина очереди
  80.         /// </summary>
  81.         public int QueueLength { get; private set;}
  82.  
  83.         public ServiceChannel(double min, double max) : base(min, max)
  84.         {
  85.         }
  86.  
  87.         /// <summary>
  88.         /// Добавление заявки в очередь
  89.         /// </summary>
  90.         public void AddRequest(double currentTime)
  91.         {
  92.             if(QueueLength == 0)
  93.                 GenerateNextSignalTime(currentTime);
  94.  
  95.             QueueLength++;
  96.         }
  97.  
  98.         /// <summary>
  99.         /// Обрабатываем заявки
  100.         /// </summary>
  101.         public override bool CheckAndGenerate(double currentTime)
  102.         {
  103.             if (QueueLength <= 0)
  104.                 return false;//нет заявок в очереди
  105.  
  106.             if (nextSignalTime <= currentTime)
  107.             {
  108.                 GenerateNextSignalTime(currentTime);
  109.                 QueueLength--;//обрабатываем заявку
  110.                 return true;
  111.             }
  112.  
  113.             return false;
  114.         }
  115.     }
  116.  
  117.     /// <summary>
  118.     /// Решатель
  119.     /// </summary>
  120.     class Solver
  121.     {
  122.         public Generator G1;
  123.         public Generator G2;
  124.         public ServiceChannel U1;
  125.         public ServiceChannel U2;
  126.  
  127.         private double time = 0;
  128.  
  129.         public Solver(Generator G1, Generator G2, ServiceChannel U1, ServiceChannel U2)
  130.         {
  131.             this.G1 = G1;
  132.             this.G2 = G2;
  133.             this.U1 = U1;
  134.             this.U2 = U2;
  135.         }
  136.  
  137.         public void Run(double dt)
  138.         {
  139.             if (G1.CheckAndGenerate(time))
  140.                 U1.AddRequest(time);
  141.  
  142.             if (U1.CheckAndGenerate(time))
  143.                 U2.AddRequest(time);
  144.  
  145.             if (G2.CheckAndGenerate(time))
  146.                 U2.AddRequest(time);
  147.  
  148.             U2.CheckAndGenerate(time);
  149.  
  150.             time += dt;
  151.         }
  152.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы