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

Тема в разделе "Другие задачи", создана пользователем Gombo, 24 дек 2012.

  1. Gombo

    Gombo Гость

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


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

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

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    ну...это весьма легко программируется, поэтому думаю специальных средств нет
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    аж 243 (3^5)
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    как-то так на С++:
    Код (Text):
    #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;
    }
     
  5. Gombo

    Gombo Гость


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

    Добавлено:

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    дак программа такой список и выдает :)
     
  7. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    удобней в файл наверное:
    Код (Text):
    #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;
    }
     
  8. Gombo

    Gombo Гость

  9. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    в файл Input.txt помещаете сначала 15 целых чисел - это 3 значение для А, потом 3 для Б и т.п.
    потом 15 дробных - это соответствующие вероятности.
    Например:
    запускаете программу - результат получаете в файле output.txt, там будет 243 строки типа
    т.е. это А Б В Г Д -> Е
     
  10. Gombo

    Gombo Гость

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

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

    Вложения:

  12. Gombo

    Gombo Гость

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Я уже собрал программу за вас, пользуйтесь :)
     
  14. Gombo

    Gombo Гость


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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    то надо думать, изменять исходный код и т.п.
    никаким магическим образом оно само не заработает :)
     
  16. Gombo

    Gombo Гость


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



    Добавлено:
    все исходные предоставлю...
     
  17. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    пишите в аську: 395-546-218, если нет аськи - сообщу Вам скайп в личку :)
     
  18. Gombo

    Gombo Гость

    с телефона в аське вас найти не могу, найдите меня..
     
  19. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
     
Загрузка...

Поделиться этой страницей