A699. Даны квадратные матрицы [latex]A[/latex] и [latex]B[/latex] порядка [latex]n[/latex].Получить матрицу [latex]AB-BA[/latex].
Размер матрицы | Матрица А | Матрица В | Результат |
3 | 1 2 3 4 5 6 7 8 9 |
9 8 7 6 5 4 3 2 1 |
-60 -90 -120 30 0 -30 120 90 60 |
2 | 3 13 21 8 |
7 9 2 4 |
-163 -84 73 163 |
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include <iostream> using namespace std; int main() { int n; cin>>n; int **A = new int*[n]; for (int i=0;i<n;i++) A[i] = new int [n]; int **B = new int*[n]; for (int i=0;i<n;i++) B[i] = new int [n]; int **C = new int*[n]; for (int i=0;i<n;i++) C[i] = new int [n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) C[i][j]=0; int **D = new int*[n]; for (int i=0;i<n;i++) D[i] = new int [n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) D[i][j]=0; int **E = new int*[n]; for (int i=0;i<n;i++) E[i] = new int [n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) E[i][j]=0; 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++) cin>>B[i][j]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { for(int k=0;k<n;k++) C[i][j]=C[i][j]+A[i][k]*B[k][j]; } for(int i=0;i<n;i++) for(int j=0;j<n;j++) { for(int k=0;k<n;k++) D[i][j]=D[i][j]+B[i][k]*A[k][j]; } for(int i=0;i<n;i++) for(int j=0;j<n;j++) { E[i][j]=C[i][j]-D[i][j]; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<E[i][j]<<" "; cout<<"\n"; } return 0; } |
Код программы можно посмотреть тут
Большая часть этого монстро-кода излишня. Даже в случае аллергии на подпрограммы, можно было бы быть лаконичнее.
Попробуем разобраться. Какой недостаток Вам кажется наиболее неприятным в следующем ниже коде?