Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <ctime>
- using namespace std;
- class TConnectedValue {
- public:
- TConnectedValue() {
- for (size_t i = 0; i < 3; i++) {
- Value1.push_back(false);
- Value2.push_back(false);
- Initialized.push_back(false);
- }
- }
- // устанавливаем все значения заранее
- void InitAll() {
- Init(1);
- Init(2);
- Init(3);
- }
- // возвращает заданный элемент из заданной пары
- bool GetValue(int pairId, int element) {
- vector<bool>* pair;
- if (pairId == 0) {
- pair = &Value1;
- } else {
- pair = &Value2;
- }
- if (!Initialized[element]) {
- Init(element);
- }
- return (*pair)[element];
- }
- // возвращает по одному случайному элементу из разных пар
- // один из одной пары и другой, не равный ему из второй
- pair<bool, bool> GetDifferentValues() {
- int element1 = rand() % 3;
- int element2 = rand() % 3;
- while (element1 == element2) {
- element2 = rand() % 3;
- }
- bool v1 = GetValue(0, element1);
- bool v2 = GetValue(1, element2);
- return make_pair(v1, v2);
- }
- private:
- // Инициализирует заданный элемент в обоих парах
- void Init(int n) {
- bool v = rand() % 2 == 0;
- Initialized[n] = true;
- Value1[n] = v;
- Value2[n] = !v;
- }
- private:
- vector<bool> Value1;
- vector<bool> Value2;
- vector<bool> Initialized;
- };
- int main()
- {
- srand(time(NULL));
- vector<TConnectedValue> values;
- for (size_t i = 0; i < 1000; i++) {
- values.push_back(TConnectedValue());
- // Эта строчка выставляет заранее все значения
- // если её закоментить - значит значения в состоянии
- // неопределённости
- values[values.size() - 1].InitAll();
- }
- size_t simmilar = 0;
- for (size_t i = 0; i < 1000; i++) {
- pair<bool, bool> vals = values[i].GetDifferentValues();
- if (vals.first == vals.second) {
- simmilar++;
- }
- }
- cout << simmilar << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement