Перемножение столбцов матрицы - комбинации

Рейтинг: 0Ответов: 1Опубликовано: 10.10.2014

Здравствуйте. Подскажите, пожалуйста, со следующим вопросом. У меня есть матрица размерности M строк, N столбцов. Мне нужно взять любой элемент первого столбца, умножить его на любой элемент второго столбца, это всё умножить на любой элемент третьего столбца и по такому принципу вплоть до N-го столбца, таким образом перебирая все возможные комбинации. Число комбинаций будет равно M в степени N. Мне нужно осуществить это в Fortrane, люди предлагают рекурсию, но я не очень понимаю, как это сделать. Натолкните, пожалуйста, на верную идею.

Ответы

▲ 1Принят

Насчёт рекурсии в f90 -- извиняюсь. Оно там уже есть. С ней проще, а то, что я предлагал -- просто пути обхода её отсутствия.

real(8) :: mat(4,4), p(4**4)
Read(5,*) ((mat(i, j), j=1,4), i=1,4)
Do I=1,4
Write(6, FMT='(4F6.2)') (mat(i, j), j=1,4)
End Do
ip = 1
Call A(mat, 4, 4, p, 1, ip)
Write(6, Fmt='(I5 F15.4)') (i,p(i), i=1, ip-1)
End
recursive subroutine A(mat, m, n, p, icolumn, ip)
Integer(4) :: n
Real(8):: mat(m,n), p(m**n)
If (icolumn > 1) oldp = p(ip)
Do I=1, m
    If (icolumn == 1) Then
        p(ip) = mat(i, 1)
    Else
        p(ip) = oldp * mat(i, icolumn)
    End If
    If (icolumn == n) Then
        ip = ip + 1
    Else
        call A(mat, m, n, p, icolumn+1, ip)
    End If
End Do
End