Advertisement
Guest User

Untitled

a guest
Jun 1st, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. class TConnectedValue {
  8. public:
  9.     TConnectedValue() {
  10.         for (size_t i = 0; i < 3; i++) {
  11.             Value1.push_back(false);
  12.             Value2.push_back(false);
  13.             Initialized.push_back(false);
  14.         }
  15.     }
  16.  
  17.     // устанавливаем все значения заранее
  18.     void InitAll() {
  19.         Init(1);
  20.         Init(2);
  21.         Init(3);
  22.     }
  23.  
  24.     // возвращает заданный элемент из заданной пары
  25.     bool GetValue(int pairId, int element) {
  26.         vector<bool>* pair;
  27.         if (pairId == 0) {
  28.             pair = &Value1;
  29.         } else {
  30.             pair = &Value2;
  31.         }
  32.         if (!Initialized[element]) {
  33.             Init(element);
  34.         }
  35.         return (*pair)[element];
  36.     }
  37.  
  38.     // возвращает по одному случайному элементу из разных пар
  39.     // один из одной пары и другой, не равный ему из второй
  40.     pair<bool, bool> GetDifferentValues() {
  41.         int element1 = rand() % 3;
  42.         int element2 = rand() % 3;
  43.         while (element1 == element2) {
  44.             element2 = rand() % 3;
  45.         }
  46.         bool v1 = GetValue(0, element1);
  47.         bool v2 = GetValue(1, element2);
  48.         return make_pair(v1, v2);
  49.     }
  50. private:
  51.     // Инициализирует заданный элемент в обоих парах
  52.     void Init(int n) {
  53.         bool v = rand() % 2 == 0;
  54.         Initialized[n] = true;
  55.         Value1[n] = v;
  56.         Value2[n] = !v;
  57.     }
  58. private:
  59.     vector<bool> Value1;
  60.     vector<bool> Value2;
  61.     vector<bool> Initialized;
  62. };
  63.  
  64. int main()
  65. {
  66.     srand(time(NULL));
  67.     vector<TConnectedValue> values;
  68.     for (size_t i = 0; i < 1000; i++) {
  69.         values.push_back(TConnectedValue());
  70.  
  71.         // Эта строчка выставляет заранее все значения
  72.         // если её закоментить - значит значения в состоянии
  73.         // неопределённости
  74.         values[values.size() - 1].InitAll();
  75.     }
  76.  
  77.     size_t simmilar = 0;
  78.     for (size_t i = 0; i < 1000; i++) {
  79.         pair<bool, bool> vals = values[i].GetDifferentValues();
  80.         if (vals.first == vals.second) {
  81.             simmilar++;
  82.         }
  83.     }
  84.     cout << simmilar << "\n";
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement