• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Найти Все Возможные Исходы

  • Автор темы Gombo
  • Дата начала
G

Gombo

Добрый вечер)
Нужна такая формула (может даже какая-то программа с такими функциями), которая мне посчитает выражение (условно): А*Б*В*Г*Д = Е (все параметры А,Б,В,Г,Д имеют по три вероятных значения с различной долей этой вероятности. У параметра А есть три значения 3050, 3150 и 3250 с вероятностью 0,4 , 0,35 и 0,25 соответственно ... и так все значения имеют свои вероятности. Необходимо найти ВСЕ ВОЗМОЖНЫЕ РЕЗУЛЬТАТЫ Е. А так же вероятность получения каждого из этих результатов.


Понятно, что этих результатов будет больше 200 штук.. Меня хватило только на 113 исходов (общая вероятность в сумме получилась около 0,5).

Небольшое уточнение: выражение (условно): А*Б*В*Г*Д = Е - это формула расчета ЧДД.

может мне не в этот раздел.. Если кто-то знает, в какой мне раздел - направьте)))
Заранее, спасибо.
 
R

rrrFer

ну...это весьма легко программируется, поэтому думаю специальных средств нет
 
R

rrrFer

как-то так на С++:
Код:
#include <iostream>
const int n = 5;
const int m = 3;
void f(int a[n][m], float b[n][m], int idx[n], int i) {
if (i >= n) {
float p = 1;
for (int j = 0; j < n; ++j) {
std::cout << a[j][idx[j]] << " ";
p *= b[j][idx[j]];
}
std::cout << " -> " << p << std::endl;
return;
}
for (int j = 0; j < m; ++j) {
idx[i] = j;
f(a, b, idx, i + 1);
}
}

int main() {

int a[n][m] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}};
float b[n][m] = {{0.1f, 0.2f, 0.7f}, {0.7f, 0.1f, 0.2f}
, {0.5f, 0.4f, 0.1f}, {0.3f, 0.3f, 0.4f}, {0.8f, 0.1f, 0.1f}};
int idx[n] = {-1, -1, -1, -1, -1};
f (a, b, idx, 0);

std::cin.get(), std::cin.get();
return 0;
}
 
G

Gombo

ну...это весьма легко программируется, поэтому думаю специальных средств нет


Для программиста это должна быть простейшая задача.. так, тренировка

Добавлено:


именно)
собственно, нужен список, состоящий из 243 строк, имеющий вид:
1. ЧДД = 2430, вероятность 0,0023
2. ЧДД = 108, вероятность 0,0110
3. ЧДД = -1045, вероятность 0,0088
4. ...
5. ...
и т.д.
 
R

rrrFer

удобней в файл наверное:
Код:
#include <fstream>
#include <iomanip>
const int n = 5;
const int m = 3;
void f(int a[n][m], float b[n][m], int idx[n], int i, std::ofstream &ofst) {
if (i >= n) {
float p = 1;
for (int j = 0; j < n; ++j) {
ofst << a[j][idx[j]] << " ";
p *= b[j][idx[j]];
}
ofst << " -> " << std::setprecision(7) << p << std::endl;
return;
}
for (int j = 0; j < m; ++j) {
idx[i] = j; 
f(a, b, idx, i + 1, ofst);
}
}

int main() {
std::ifstream ifst("input.txt");
std::ofstream ofst("output.txt");
ofst.flags(std::ios::fixed);
int a[n][m];
float b[n][m];
int idx[n] = {-1, -1, -1, -1, -1};
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
ifst >> a[i][j];
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
ifst >> b[i][j];
f (a, b, idx, 0, ofst);
ofst.close();
ifst.close();
return 0;
}
 
R

rrrFer

в файл Input.txt помещаете сначала 15 целых чисел - это 3 значение для А, потом 3 для Б и т.п.
потом 15 дробных - это соответствующие вероятности.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0.1 0.2 0.7 0.1 0.2 0.7 0.3 0.4 0.3 0.1 0.1 0.8 0.7 0.2 0.1
запускаете программу - результат получаете в файле output.txt, там будет 243 строки типа
3 6 9 11 13 -> 0.0102900
3 6 9 11 14 -> 0.0029400
т.е. это А Б В Г Д -> Е
 
G

Gombo

удобней в файл наверное:
Код:
#include <fstream>
#include <iomanip>
const int n = 5;
const int m = 3;
void f(int a[n][m], float b[n][m], int idx[n], int i, std::ofstream &ofst) {
if (i >= n) {
float p = 1;
for (int j = 0; j < n; ++j) {
ofst << a[j][idx[j]] << " ";
p *= b[j][idx[j]];
}
ofst << " -> " << std::setprecision(7) << p << std::endl;
return;
}
for (int j = 0; j < m; ++j) {
idx[i] = j; 
f(a, b, idx, i + 1, ofst);
}
}

int main() {
std::ifstream ifst("input.txt");
std::ofstream ofst("output.txt");
ofst.flags(std::ios::fixed);
int a[n][m];
float b[n][m];
int idx[n] = {-1, -1, -1, -1, -1};
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
ifst >> a[i][j];
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
ifst >> b[i][j];
f (a, b, idx, 0, ofst);
ofst.close();
ifst.close();
return 0;
}

Я конечно понимаю, что этот код нужно куда-то вставить и он будет работать.. Только я не программист(
Кроме базового web-программирования ни с чем не знакома..
Еще макросы в Excel кодами писала, чем только мне это поможет )
 
R

rrrFer

у вас поди компилятора нет? - прикрепил архив со статически собранным исполняемым файлом и примерами исходных данных и результата.
Программа проверок правильности исходных данных не делает, вводите внимательно :)
 

Вложения

  • MinGW_Windows.7z
    253,5 КБ · Просмотры: 143
G

Gombo

у вас поди компилятора нет? - прикрепил архив со статически собранным исполняемым файлом и примерами исходных данных и результата.
Программа проверок правильности исходных данных не делает, вводите внимательно :)

Компилятора? какое интересное, совершенно новое для меня слово)))))
 
G

Gombo

в файл Input.txt помещаете сначала 15 целых чисел - это 3 значение для А, потом 3 для Б и т.п.
потом 15 дробных - это соответствующие вероятности.
Например:

запускаете программу - результат получаете в файле output.txt, там будет 243 строки типа

т.е. это А Б В Г Д -> Е


а если формула сложнее, чем А*Б*В*Г*Д = Е ?
 
G

Gombo

то надо думать, изменять исходный код и т.п.
никаким магическим образом оно само не заработает :)


готова оплатить ваши размышления по этому вопросу)



Добавлено:
то надо думать, изменять исходный код и т.п.
никаким магическим образом оно само не заработает :)

все исходные предоставлю...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!