Resolves: tdf#118624 let RAND() in array/matrix mode fill a matrix

... instead of only top left that is referenced for other
elements.

Change-Id: I718946d7e4327b152e2d9f80712395fd7ab67dee
Reviewed-on: https://gerrit.libreoffice.org/57235
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit 8afccbd129ecda81ff00dd2c6e5e10af254ae0ef)
Reviewed-on: https://gerrit.libreoffice.org/57247
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 33cd8c3..c83951d 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -1733,7 +1733,39 @@ void ScInterpreter::ScPi()

void ScInterpreter::ScRandom()
{
    PushDouble(::comphelper::rng::uniform_real_distribution());
    if (bMatrixFormula && pMyFormulaCell)
    {
        SCCOL nCols;
        SCROW nRows;
        pMyFormulaCell->GetMatColsRows( nCols, nRows);
        // ScViewFunc::EnterMatrix() might be asking for
        // ScFormulaCell::GetResultDimensions(), which here are none so create
        // a 1x1 matrix at least which exactly is the case when EnterMatrix()
        // asks for a not selected range.
        if (nCols == 0)
            nCols = 1;
        if (nRows == 0)
            nRows = 1;
        ScMatrixRef pResMat = GetNewMat( static_cast<SCSIZE>(nCols), static_cast<SCSIZE>(nRows));
        if (!pResMat)
            PushError( FormulaError::MatrixSize);
        else
        {
            for (SCCOL i=0; i < nCols; ++i)
            {
                for (SCROW j=0; j < nRows; ++j)
                {
                    pResMat->PutDouble( comphelper::rng::uniform_real_distribution(),
                            static_cast<SCSIZE>(i), static_cast<SCSIZE>(j));
                }
            }
            PushMatrix( pResMat);
        }
    }
    else
    {
        PushDouble( comphelper::rng::uniform_real_distribution());
    }
}

void ScInterpreter::ScTrue()