Форум программистов, компьютерный форум CyberForum.ru

Вычисление вероятности затопления авианосца - C++

Восстановить пароль Регистрация
 
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
14.10.2012, 13:39     Вычисление вероятности затопления авианосца #1
Всем доброго время суток. Группа из n подводных лодок атакует авианосец. Лодки по очереди выпускают по одной торпеде с ядерным зарядом: если выпущенная лодкой торпеда не попала в авианосец, торпеду выпускает следующая подводная лодка. Вероятность попадания торпеды в авианосец равна p. выпуская торпеду, лодка демаскирует себя, в силу чего подвергается атаке со стороны кораблей охранения. Вероятность затопления демаскированной подводной лодки кораблями охранения равна p1. Написать программу для вычисления вероятности P(A) события A, состоящего в том, что авианосец будет затоплен, а подводные лодки уйдут из зоны действия кораблей охранения без потерь. Вероятность P(A) события A, состоящего в том, что авианосец будет затоплен вычисляется по формуле:
http://www.cyberforum.ru/cgi-bin/latex.cgi?P(A) = p * (1 - p1) * \frac{(1 - {q}^{n})}{(1 - q)},
где
http://www.cyberforum.ru/cgi-bin/latex.cgi?q = (1 - p) * (1 - p1)
Вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
 setlocale( LC_ALL,"Russian" );
    double p,p1,P,q;
    int n;
    cout << "p = "; cin >> p;
    (0 < p || p > 1)  ?  (cout<<"Неверное значение!"<< endl, exit(0)) : cout << "p1 = "; // Проверка корректности значения p
    cin >> p1;
    (0 < p1 || p1 > 1)  ?  (cout << "Неверное значение!"<< endl, exit(0))  :  cout << "n = "; // Проверка корректности значения p1
    cin >> n;
    q = (1 - p) * (1 - p1);
    P = p * (1 - p1) * (1 - pow(q,n))/(1 - q);
    system("pause");
    return 0;
}
При вводе значений p и p1 меньше 0 или больше 1, должно появляться сообщение: "Неверное значение!" до тех пор пока пользователь не введет значения удовлетворяющие условию вероятностей, затем вычислить результат и вывести его на экран. У меня программа работает не корректно???? Подскажите пожалуйста как исправить ошибку???? Заранее огромное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 13:39     Вычисление вероятности затопления авианосца
Посмотрите здесь:

Вычисление непрерывных дробей и выражений. Вычисление полиномов и их производных. C++
C++ Теория вероятности.
C++ Вычисление вероятности
C++ Тема матрица вероятности
Теория вероятности C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
snw
10 / 10 / 0
Регистрация: 11.10.2012
Сообщений: 93
14.10.2012, 13:55     Вычисление вероятности затопления авианосца #2
Каков текст ошибки? Ведь телепаты в отпуске
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
14.10.2012, 13:58     Вычисление вероятности затопления авианосца #3
Как по-вашему пользователь сможет сделать повторный ввод в случае ошибки, если у вас там exit прописан.
и бросьте использовать конструкцию условие?действие1:действие2, если эти действия не тривиальны

да и не скомпилится то, что написано сейчас
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
14.10.2012, 14:00  [ТС]     Вычисление вероятности затопления авианосца #4
Все нашел ошибку, вот правильная программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
 setlocale( LC_ALL,"Russian" );
    double p,p1,P,q;
    int n;
    cout << "p = "; cin >> p;
    (p < 0 || p > 1)  ?  (cout<<"Неверное значение!"<< endl, exit(0)) : cout << "p1 = "; // Проверка корректности значения p
    cin >> p1;
    (p1 < 0 || p1 > 1)  ?  (cout << "Неверное значение!"<< endl, exit(0))  :  cout << "n = "; // Проверка корректности значения p1
    cin >> n;
    q = (1 - p) * (1 - p1);
    P = p * (1 - p1) * (1 - pow(q,n))/(1 - q);
    cout << "P = " << P << endl;
    system("pause");
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
14.10.2012, 14:58     Вычисление вероятности затопления авианосца #5
Цитата Сообщение от isaak Посмотреть сообщение
Подскажите пожалуйста как исправить ошибку?
Цитата Сообщение от isaak Посмотреть сообщение
(0 < p || p > 1)
надо (p < 0 || p > 1) своим неверным условием ты по сути задавал весь числовой ряд как неверное значение
Цитата Сообщение от isaak Посмотреть сообщение
(0 < p1 || p1 > 1)
- тоже самое надо (p1 < 0 ||
Формулу не проверял, полагаю что в ней косяков нет ввиду простоты
Yandex
Объявления
14.10.2012, 14:58     Вычисление вероятности затопления авианосца
Ответ Создать тему
Опции темы

Текущее время: 16:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru