Exemplo n.º 1
0
  //(c) Chernysheva, TEST(Matrix, mulMatrixToVec)
  //------->>>>>>>>>-----------------
  // умножение матрицы на вектор-столбец
  Polynom mulMatrixToVec(const Polynom& plA, const Matrix& mtB)
  {
    Polynom vec;
    if (mtB.CodeWord == Matrix::ON_LINE)
    {
      if (mtB.ColCount >= plA.getNumberBits())
      {
        for (uint j = 0; j < mtB.RowCount; j++)
        {
          uint sum = 0, elem;
          for (uint i = 0; i < mtB.getColCountMatrixByte(); i++)
          {
            elem = mtB.plMatrix[j]->getDigit(i) & plA.getDigit(i);
            sum = sum ^ elem;
          }
          vec.setDigit(j, sum);
        }

        Polynom res;
        uint s = 0;
        for (uint j = 0; j < vec.getNumberDigits(); j++)
        {
          bool bit = 0;
          for (uint i = 0; i < vec.getDigitSizeInBits(); i++)
          {
            bit = bit  ^ vec.getBit(s);
            s++;
          }
          res.setBit(j, bit);
        }
        return res;
      }
    }
    vec = plA;
    return vec;
  }