Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Программа ⇐ ПредыдущаяСтр 2 из 2
Вариант программы для 2 задачи: #include <iostream> #include <cstdlib> #include <cmath>
#define rand_prob() (double(rand()) / RAND_MAX) #define read(text, var) \ std::cout << "Enter " << text << ": "; \ std::cin >> var
#define CONDITION_VAR1 (xi < 1 - pow(1 - p[i][tminind[i]], m[i])) #define CONDITION_VAR3 CONDITION_VAR1 && (xi < m[3-i] / n[3-i]) #define CONDITION CONDITION_VAR1
int main() { int n[3], i, j, s, m[5], k, tminind[3]; bool q; double *p[5], *l[3], d[3], *t[3], xi, t0, tmin[3];
read("n1", n[1]); read("n2", n[2]);
l[1] = new double[n[1]]; l[2] = new double[n[2]]; p[1] = new double[n[1]]; p[2] = new double[n[2]]; p[3] = new double[n[1]]; p[4] = new double[n[2]]; t[1] = new double[n[1]]; t[2] = new double[n[2]];
std::cout << "Enter \u03bb1 elements" << std::endl; for (i = 0; i < n[1]; ++i) { read(i, l[1][i]); } std::cout << "Enter p1 elements" << std::endl; for (i = 0; i < n[1]; ++i) { read(i, p[1][i]); } std::cout << "Enter \u03bb2 elements" << std::endl; for (i = 0; i < n[1]; ++i) { read(i, l[2][i]); } std::cout << "Enter p2 elements" << std::endl; for (i = 0; i < n[1]; ++i) { read(i, p[2][i]); } read("s ", s); read("\u0394 ", d[0]); srand(time(NULL));
t0 = 0; for (i = 0; i < n[1]; ++i) p[3][i] = 0; for (i = 0; i < n[2]; ++i) p[4][i] = 0; m[3] = 0; m[4] = 0;
for (k = 1; k <= s; ++k) { for (i = 2; i >= 1; --i) { m[i] = n[i]; for (j = 0; j < n[i]; ++j) { d[i] = d[0]*n[i]; t[i][j] = -log(1 - rand_prob()) / (l[i][j] * m[i]); if (!j || t[i][j] < tmin[i]) { tmin[i] = t[i][j]; tminind[i] = j; } } }
q = false; while (!q) { i = (t[1] < t[2])? 1: 2; xi = rand_prob(); if (CONDITION) m[3-i] -= 1; for (j = 0; j < n[i]; ++j) { if (m[3-i] < d[3-i]) { ++p[2+i][j]; t0 += t[i][j]; q = true; } t[i][j] -= log(1 - rand_prob()) / (l[i][j] * m[i]); } }
m[3] += m[1]; m[4] += m[2]; }
std::cout << std::endl; std::cout << "P[win1] ="; for (i = 0; i < n[1]; ++i) std::cout << " " << p[3][i] / s; std::cout << std::endl << "P[win2] ="; for (i = 0; i < n[2]; ++i) std::cout << " " << p[4][i] / s; std::cout << std::endl; std::cout << "M[1] = " << m[3] / s << std::endl; std::cout << "M[2] = " << m[4] / s << std::endl; std::cout << "T = " << t0 / s << std::endl;
delete[] l[1]; delete[] l[2]; delete[] p[1]; delete[] p[2]; delete[] p[3]; delete[] p[4]; delete[] t[1]; delete[] t[2];
return 0; } Вариант программы для 1 и 3 задач: #include <iostream>#include <cstdlib>#include <cmath> #define rand_prob() (double(rand()) / RAND_MAX)#define read(text, var) \ std::cout << "Enter " << text << ": "; \ std::cin >> var #define CONDITION_VAR1 (xi < 1 - pow(1 - p[i], m[i]))#define CONDITION_VAR3 CONDITION_VAR1 && (xi < m[3-i] / n[3-i])#define CONDITION CONDITION_VAR1 int main() { int n[3], i, s, m[5], k; bool q; double p[5], l[3], d[3], t[3], xi; read("n1", n[1]); read("\u03bb1", l[1]); read("p1", p[1]); read("n2", n[2]); read("\u03bb2", l[2]); read("p2", p[2]); read("s ", s); read("\u03b4 ", d[0]); srand(time(NULL)); t[0] = 0; p[3] = 0; p[4] = 0; m[3] = 0; m[4] = 0; for (k = 1; k <= s; ++k) { for (i = 2; i >= 1; --i) { d[i] = d[0]*n[i]; m[i] = n[i]; t[i] = -log(1 - rand_prob()) / (l[i] * m[i]); } q = false; while (!q) { i = (t[1] < t[2])? 1: 2; xi = rand_prob(); if (CONDITION) m[3-i] -= 1; if (m[3-i] < d[3-i]) { ++p[2+i]; t[0] += t[i]; q = true; } t[i] -= log(1 - rand_prob()) / (l[i] * m[i]); } m[3] += m[1]; m[4] += m[2]; } std::cout << std::endl; std::cout << "P[win1] = " << p[3] / s << std::endl; std::cout << "P[win2] = " << p[4] / s << std::endl; std::cout << "M[1] = " << m[3] / s << std::endl; std::cout << "M[2] = " << m[4] / s << std::endl; std::cout << "T = " << t[0] / s << std::endl; return 0;}Date: 2015-08-15; view: 304; Нарушение авторских прав |