Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <time.h>
- #define NS 1000000
- #define S 3
- #define MAX 1000
- #define miu1 10
- #define miu2 10
- using namespace std;
- struct trei {
- double MS;
- double Tp1;
- double Tp2;
- };
- double genGauss(double medie, double sigma)
- {
- double s = 0;
- int i;
- for (i = 1; i <= 12; i++)
- {
- s += (double)rand() / RAND_MAX;
- }
- return medie + sigma * (s - 6);
- }
- double genExp(double lambda)
- {
- double u;
- u = (double)rand() / (RAND_MAX + 1);
- double x;
- x = (-1) / lambda * log(1 - u);
- return x;
- }
- int evUrmator(int n1, int n2, double Dis, trei Q1[300], trei Q2[300])
- {
- if (n1 == 0 && n2 == 0)
- return 1;
- if (n2 == 0)
- {
- if (Dis <= Q1[1].Tp1) return 1;
- if (Q1[1].Tp2 == 0) return 2;
- return 4;
- }
- if (n1 == 0)
- {
- if (Dis <= Q2[1].Tp2) return 1;
- if (Q1[1].Tp1 == 0) return 3;
- return 5;
- }
- if (Dis < Q1[1].Tp1 && Dis < Q2[1].Tp2)
- return 1;
- if (Q1[1].Tp1 < Q2[1].Tp2)
- {
- if (Q1[1].Tp2 == 0) return 2;
- return 4;
- }
- //if(Q2[1].Tp2<=Q1[1].Tp1)
- else
- {
- if (Q2[1].Tp1 == 0) return 3;
- return 5;
- }
- return 0;
- }
- void Ms_lab12(double lambda)
- {
- double DS = NS / lambda;
- trei Q1[300], Q2[300];
- double Dis;
- double STR = 0;
- double CT = 0;
- double ceas = 0;
- int n1, n2;
- n1 = n2 = 0;
- double Tp1;
- double Tp2;
- Tp1 = genExp(miu1);
- Tp2 = genExp(miu2);
- Q1[1].MS = ceas;
- Q1[1].Tp1 = Tp1;
- Q1[1].Tp2 = Tp2;
- Dis = genExp(lambda);
- int ajutor;
- do {
- ajutor = evUrmator(n1, n2, Dis, Q1, Q2);
- if (ajutor == 1)
- {
- ceas += Dis;
- for (int i = 1; i <= 2; ++i)
- {
- if (n1 > 0)
- {
- Q1[1].Tp1 -= Dis;
- }
- if (n2 > 0)
- {
- Q2[1].Tp2 -= Dis;
- }
- }
- Tp1 = genExp(miu1);
- Tp2 = genExp(miu2);
- if (n1 <= n2)
- {
- n1++;
- Q1[n1].MS = ceas;
- Q1[n1].Tp1 = Tp1;
- Q1[n1].Tp2 = Tp2;
- }
- else
- {
- n2++;
- Q2[n2].MS = ceas;
- Q2[n2].Tp1 = Tp1;
- Q2[n2].Tp2 = Tp2;
- }
- Dis = genExp(lambda);
- }
- else if (ajutor == 2)
- {
- ceas += Q1[1].Tp1;
- Q2[1].Tp2 -= Q1[1].Tp1;
- Dis -= Q1[1].Tp1;
- STR += ceas - Q1[1].MS;
- CT++;
- --n1;
- for (int i = 1; i <= n1; ++i)
- {
- Q1[i] = Q1[i + 1];
- }
- }
- else if (ajutor == 3)
- {
- ceas += Q2[1].Tp2;
- Q1[1].Tp1 -= Q2[1].Tp2;
- Dis -= Q2[1].Tp2;
- STR += ceas - Q2[1].MS;
- CT++;
- --n2;
- for (int i = 1; i <= n2; ++i)
- {
- Q2[i] = Q2[i + 1];
- }
- }
- else if (ajutor == 4)
- {
- ceas += Q1[1].Tp1;
- Q2[1].Tp2 -= Q1[1].Tp1;
- Dis -= Q1[1].Tp1;
- Q1[1].Tp1 = 0;
- ++n2;
- Q2[n2] = Q1[1];
- --n1;
- for (int i = 1; i <= n1; ++i)
- {
- Q1[i] = Q1[i + 1];
- }
- }
- else if (ajutor == 5)
- {
- ceas += Q2[1].Tp2;
- Q1[1].Tp1 -= Q2[1].Tp2;
- Dis -= Q2[1].Tp2;
- Q2[1].Tp2 = 0;
- ++n1;
- Q1[n1] = Q2[1];
- --n2;
- for (int i = 1; i <= n2; ++i)
- {
- Q2[i] = Q2[i + 1];
- }
- }
- } while (ceas < DS);
- double TRM;
- TRM = (STR / NS);
- cout << "TRM = " << TRM << endl << endl << endl;
- }
- int main(void)
- {
- double i = 4;
- while (i <= 9)
- {
- cout << "------------------------------------------- LAMBDA = " << i << " -------------------------------------------" << endl << endl << endl;
- Ms_lab12(i);
- ++i;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement