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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Elize
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 31
#1

Реализация программы на С++ (Найти вероятности следующих событий:) - C++

23.05.2013, 08:28. Просмотров 582. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста реализовать на С++ или на С# программу по этой задаче



N стрелков независимо один от другого ведут стрельбу каждый по своей мишени. Каждый из них имеет боезапас k патронов. Вероятность попадания в мишень при одном выстреле для i-го стрелка равна Pi(i=1,2,...,N). При первом же попадании в свою мишень стрелок прекращает стрельбу. Найти вероятности следующих событий:
а) у всех стрелков вместе останется неизрасходованным хотя бы один патрон;
б) ни у кого из стрелков не будет израсходован весь боезапас;
с) какой-либо один из стрелков израсходует весь боезапас, а все остальные не весь;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 08:28     Реализация программы на С++ (Найти вероятности следующих событий:)
Посмотрите здесь:

Реализация журнала ошибок и протоколирования событий - C++
Добрый день, уважаемое сообщество. При написании выпускной работы появилась необходимость вести журнал ошибок работы программы, и...

Тетрис - Реализация таймера и обработка событий с клавиатуры - C++
Пишу консольный тетрис. Столкнулся с проблемой таймера и перехвата событий с клавиатуры. Раньше с такими вопросами не сталкивался, поэтому...

не получается найти произведение следующих элементов, помогите. - C++
#include<iostream> #include<clocale> #include<ctime> using namespace std; int main() { srand(time(0)); setlocale(0,""); ...

Реализация программы - C++
#include <iostream> #include <algorithm> #include <numeric> int main() { using namespace std; ...

Найти среднее арифметическое всех последующих элементов следующих за нужным - C++
как найти среднее арифметическое всех последующих элементов следующих за нужным?

Реализация программы(из файл) - C++
Здравствуйте.Нужно было реализовать программу и выполнить некоторые ф-ии, ну вообщем воот Реализовать программу, автоматизирующую учет...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
23.05.2013, 08:30     Реализация программы на С++ (Найти вероятности следующих событий:) #2
Приложите, пожалуйста, формулы и примеры расчетов -- обычно очень лень искать именно их.
Elize
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 31
23.05.2013, 08:43  [ТС]     Реализация программы на С++ (Найти вероятности следующих событий:) #3
В таком виде подойдет?
Миниатюры
Реализация программы на С++ (Найти вероятности следующих событий:)  
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
24.05.2013, 08:44     Реализация программы на С++ (Найти вероятности следующих событий:) #4
Как-то так. Лучше проверьте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <iterator>
 
double negateProbability(double probability) {
  return 1 - probability;
}
 
class Shooter {
 public:
  Shooter(int ammo, double hitProbability) : ammo(ammo),
    hitProbability(hitProbability) {}
  int getAmmo() const {
    return ammo;
  }
  // шанс попасть
  double getHitProbability() const {
    return hitProbability;
  }
  // шанс промахнуться
  double getMissProbability() const {
    return negateProbability(getHitProbability());
  }
  // шанс, что как минимум все, кроме последнего
  // выстрелы промахнутся
  double getEmptyAmmoProbability() const {
    return pow(getMissProbability(), getAmmo() - 1);
  }
  // шанс, что останется хотя бы один патрон
  double getNonEmptyAmmoProbability() const {
    return negateProbability(getEmptyAmmoProbability());
  }
 private:
  int ammo;
  double hitProbability;
};
 
struct RandomShooter {
  int ammo;
  double minHitProbability, maxHitProbability;
  RandomShooter(int ammo, double minHitProbability, double maxHitProbability)
    : ammo(ammo), minHitProbability(minHitProbability),
    maxHitProbability(maxHitProbability) {}
  Shooter operator()() const {
    return Shooter(ammo, minHitProbability +
      (rand() % (int)((maxHitProbability - minHitProbability) * 1000) / 1000.));
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Shooter &s) {
  return stream << "Shooter{" <<
    "ammo=" << s.getAmmo() << 
    std::fixed << std::setprecision(5) <<
    ",hitProbability=" << s.getHitProbability() << "}";
}
 
double multiplyByEmptyAmmoPorbability(double x, const Shooter &s) {
  return x * s.getEmptyAmmoProbability();
}
 
double multiplyByNonEmptyAmmoPorbability(double x, const Shooter &s) {
  return x * s.getNonEmptyAmmoProbability();
}
 
double accumulateMissChance(double x, const Shooter &s, double Pb) {
  return x + (s.getHitProbability() / s.getMissProbability()) * Pb; 
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  
  int ammo = 4;
  int numberOfShooters = 10;
  std::vector<Shooter> shooters;
  
  std::generate_n(std::back_inserter(shooters), numberOfShooters,
    RandomShooter(ammo, 0.2, 0.3));
   
  std::copy(shooters.begin(), shooters.end(),
    std::ostream_iterator<Shooter>(std::cout, "\n"));
 
  double Pa = 1.0;
  for (size_t i = 0; i < shooters.size(); ++i) {
    Pa = multiplyByEmptyAmmoPorbability(Pa, shooters[i]);
  }
  Pa = negateProbability(Pa);
  std::cout << "Probability that at least one shooter would have\n"
    "at least one shot left: " << Pa << std::endl;
  
  double Pb = 1.0;
  for (size_t i = 0; i < shooters.size(); ++i) {
    Pb = multiplyByNonEmptyAmmoPorbability(Pb, shooters[i]);
  }
  std::cout << "Probability that all shooters would have\n"
    "at least one shot left: " << Pb << std::endl;
    
  double Pc = 0.0;
  for (size_t i = 0; i < shooters.size(); ++i) {
    Pc = accumulateMissChance(Pc, shooters[i], Pb);
  }
  std::cout << "Probability that one and only one shooter would not have \n"
    "at least one shot left: " << Pc << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 18:39     Реализация программы на С++ (Найти вероятности следующих событий:)
Еще ссылки по теме:

Реализация программы с помощью классов - C++
Здравствуйте, коллеги-программеры! Обращаюсь к Вам с таким вопросом. У меня есть написанная мной неплохая демка, с использованием...

Реализация программы с использованием ссылок и указателей - C++
Добрые люди! Подскажите, есть ли тут использованные ссылки и указатели? Препод не принимает лабораторную работу, пока я не реализую...

Реализация программы для отправки смс - C++
я только начинаю учиться этому языку и почти изучил процедурный раздел так вот и мне интересно можно ли написать программу отправки смс по...

В двумерном массиве найти среднее арифметическое первого столбца и количество элементов в каждом из следующих столбцов - C++
В двумерном массиве найти среднее арифметическое первого столбца и количество элементов в каждом из следующих столбцов, превышающих среднее...

Найти строки матрицы, где есть эл-т для которого сумма предшествующих равна сумме следующих за ним элементов - C++
Доброго времени суток всем. Прошу помочь с этими заданиям, написать код в c++ 2. Вывести строки матрицы, в которых есть такой...

найти сумму 10-ти членов следующих общих членов,которые даны снизу - C++
найти сумму 10-ти членов следующих общих членов,которые даны снизу {a}_{n}={n}^{3}{e}^{n}


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Elize
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 31
28.05.2013, 18:39  [ТС]     Реализация программы на С++ (Найти вероятности следующих событий:) #5
Спасибо большое
Yandex
Объявления
28.05.2013, 18:39     Реализация программы на С++ (Найти вероятности следующих событий:)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru