Найти ошибку в задаче: Даны квадратные матрицы А и В порядка N. Получить матрицу АВ-ВА. - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define n 2
main()
{
int a[n][n],b[n][n],c[n][n]; int i, j, k;
clrscr();
printf("vvedite massiv A ");
printf("\n");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
printf("vvedite massiv B");
printf("\n");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&b[i][j]);
for (i=0;i<n; i++)
for (j=0;j<n; j++)
{c[i][j]=0;
for (k=0; k<n;k++)
c[i][j] = c[i][j] + (a[i][k] * b[k][j] - b[i][k] * a[k][j]);
}
printf("Rezyl'tat");
printf("\n");
for (i=0;i<n;i++);
{
for (j=0;j<n;j++);
printf(" %d ",c[i][j]);
printf("\n");
}
getch();
}Решение задачи: «Найти ошибку в задаче: Даны квадратные матрицы А и В порядка N. Получить матрицу АВ-ВА.»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
int** mult(int**mat1, int**mat2, int **rez, int N);
int** diff(int**mat1, int**mat2, int N);
int** input(int **mat, int N);
void output(int **mat, int N);
int main(void)
{
int **A,**B,**AB, **BA;
int N,i;
printf("Enter N -> ");
scanf("%d",&N);
A=(int**)malloc(N*sizeof(int*));
B=(int**)malloc(N*sizeof(int*));
AB=(int**)malloc(N*sizeof(int*));
BA=(int**)malloc(N*sizeof(int*));
for(i=0; i<N ; i++)
{
A[i]=(int*)malloc(N*sizeof(int));
B[i]=(int*)malloc(N*sizeof(int));
AB[i]=(int*)malloc(N*sizeof(int));
BA[i]=(int*)malloc(N*sizeof(int));
}
printf("Matrix A:\n");
input(A,N);
output(A,N);
printf("Matrix B:\n");
input(B,N);
output(B,N);
printf("Mult AxB:\n");
output(mult(A,B,AB,N),N);
printf("Mult BxA:\n");
output(mult(B,A,BA,N),N);
printf("Diff AB-BA:\n");
output(diff(AB,BA,N),N);
getch();
for(i=0; i<N; i++)
{
free(A[i]);
free(B[i]);
free(AB[i]);
free(BA[i]);
}
free(A);
free(A);
free(AB);
free(BA);
return 0;
}
// input matrix
int** input(int **mat, int N)
{
int i,j;
for(i=0; i<N; i++)
{
for(j=0; j<N ; j++)
{
mat[i][j]=rand()%5+1;
}
}
return mat;
}
// output matrix
void output(int **mat, int N)
{
int i,j;
for(i=0; i<N ; i++)
{
for(j=0; j<N; j++)
{
printf("%d ",mat[i][j]);
}
printf("\n");
}
}
// mult matrix
int** mult(int **mat1, int **mat2, int **rez, int N)
{
int i,j,k,S;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
S=0;
for(k=0; k<N; k++)
{
S+=mat1[i][k]*mat2[k][j];
}
rez[i][j]=S;
}
}
return rez;
}
// diff matrix
int ** diff(int **mat1, int **mat2, int N)
{
int i,j;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
mat1[i][j]-=mat2[i][j];
}
}
return mat1;
}