long NumOfOrders = 0; ulong ServedOrders; int CmoPosition; int [] ChannelBusy ; double [] ServiceTimeOfChannel; Random rand = new Random ();
// функція яка перетворює точність для подальшого використання в програмі і функціяхint Precition (double e)
{Tochnost = 0;
(e == 0.1) = 10;
(e == 0.01) = 100;
(e == 0.001) = 1000;
Tochnost;
}
// Число знаків для округлення виходячи з точностіint ChisloZnakov (double Prec)
{a = 0;
(Prec == 0.1) = 1; (Prec == 0.01) = 2; (Prec == 0.001) = 3; a;
}
// функція яка повертає інтервал часу між заявками, або інтер. часу обслуг. каналаdouble OrdersInterval (int NumOfOrders, double Tochnost)
{CelayaChast; Ostatok;
= Precition (Tochnost)/NumOfOrders; = (Precition (Tochnost)/(double) NumOfOrders - CelayaChast) * 10;
(Ostatok> = 5) + +;
(double) (CelayaChast/(double) Precition (Tochnost));
}
// генератор моментів временіdouble TimeGenerator (bool FirstOrder, double Interval, double Tochnost)
{NewTime; GenerationInterval = (int) (Interval * Precition (Tochnost) + 1);
// тільки якщо це не перша заявка (! FirstOrder)
{
// виняток генерації нуля => повторюване час
{= (double) (rand.Next ()% GenerationInterval)/Precition (Tochnost);
} while (NewTime == 0);
} = (double) (rand.Next ()% GenerationInterval)/Precition (Tochnost);
Math.Round (NewTime, ChisloZnakov (Tochnost));
}
// перевіряє наявність нової заявкіbool NewOrder (double TimeOfCmo, double IntervalOfOrder, ulong NumberOfOrders)
{(TimeOfCmo> = IntervalOfOrder * (NumberOfOrders))
{true;
} return false;
}
// перевірка системи в поточний момент временіvoid CmoCheck (int TotalTime, double CmoTime, int NumOfChannels)
{i = 0; (CmoPosition! = 0)
{(i
{(ChannelBusy [i] == 1)
{(((ServiceTimeOfChannel [i] <= CmoTime) && (CmoTime <= TotalTime)) | | ((CmoTime> TotalTime) && (ServiceTimeOfChannel [i ] <= TotalTime)))
{[i] = 0; [i] = 0; -;. Text + = (i + 1). ToString () + "-й канал обслужив заявку" + " n" ;; + +;
}
} + +;
}
}...