Задача: Дана квадратная матрица [latex]A[/latex] порядка [latex]n[/latex]. Получить матрицу [latex]AB[/latex]; элементы матрицы [latex]B[/latex] вычисляются по формуле :
[latex]b_{ij} = \frac{1}{i+j-1}[/latex], при [latex]i,j=1,2,\dotsb n[/latex].Тесты:
[latex]n[/latex] | [latex]A[/latex] | [latex]AB[/latex] | Комментарий |
2 | [latex] \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} [/latex] | [latex] \begin{pmatrix} 1 & 0.5 \\ 0.5 & 0.33 \end{pmatrix} [/latex] | Пройден |
3 | [latex]\begin{pmatrix}2 & 16 & -3 \\ 4 & 0 & 1 \\ -7 & 10 & 9\end{pmatrix}[/latex] | [latex]\begin{pmatrix}9 & 5.58 & 4.067\\ 4.33 & 2.25 & 1.53\\ 1 & 2.08 &1.96\end{pmatrix}[/latex] | Пройден |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#include <iostream> #include <math.h> using namespace std; int main() { int n; double p,q; cin >> n; double a[n][n], b[n][n], ab[n][n]; for(int i=0; i < n; i++) { for(int j = 0; j < n; j++) { cin >> a[i][j]; } } for(int i=0; i < n; i++) { for(int j = 0; j < n; j++) { p=i+1; q=j+1; b[i][j]=1/(p+q-1); } } for(int i=0; i < n; i++) { for(int j = 0; j < n; j++) { ab[i][j]=0; for(int p=0; p < n; p++ ) { ab[i][j]+=a[i][p]*b[p][j]; } } } for(int i=0; i < n; i++) { for(int j=0; j < n; j++) { cout << ab[i][j] << " "; } cout << endl; } return 0; } |
Для начала создаем и вводим размерность [latex]n[/latex] матрицы [latex]A[/latex]. Создаем три двумерных массива [latex]a[/latex], [latex]b[/latex] и [latex]ab[/latex]. Вводим значения матрицы [latex]A[/latex] и заполняем ими массив [latex]a[/latex]. Определяем значения матрицы [latex]B[/latex] и помещаем их в массив [latex]yb[/latex]. С помощью трёх циклов [latex]for[/latex] перемножаем матрицы [latex]A[/latex] и [latex]B[/latex] и помещаем результат в массив [latex]ab[/latex]. Выводим полученную матрицу.
А откуда взялось m? И почему произведение двух квадратных матриц оказалось не квадратной матрицей?
Исправлено. Прошу перепроверить.