Phép nhân ma trận trong C: Viết một chương trình C để nhập hai ma trận và tính tích của hai ma trận đó được người dùng nhập vào. Người dùng sẽ nhập thứ tự của một ma trận và sau đó là các phần tử của nó và tương tự nhập vào ma trận thứ hai. Nếu các thứ tự của ma trận được thực hiện đúng như vậy mà chúng không thể được nhân với nhau, thì sau đó một thông báo lỗi được hiển thị.
Một trong những chương trình rất phổ biến trong lập trình C là phép nhân ma trận. Phương pháp thủ công của phép nhân ma trận trong C liên quan đến một số lượng lớn các phép tính đặc biệt khi nói đến bậc cao hơn của ma trận, trong khi một chương trình trong C có thể thực hiện các phép toán với các mã ngắn, đơn giản và dễ hiểu.
Phép nhân ma trận trong C có thể được thực hiện theo hai cách: không sử dụng hàm và bằng cách truyền ma trận vào các hàm. Trong bài này, chúng ta sẽ thảo luận về mã nguồn cho cả hai phương thức này với các kết quả đầu ra mẫu cho mỗi phương thức.
Các mã nguồn của hai chương trình này cho phép nhân ma trận trong lập trình C sẽ được biên dịch trong Code :: Blocks . Chạy chúng trên Turbo C và các nền tảng khác có thể yêu cầu một vài sửa đổi đối với mã.
Dưới đây tôi đã trình bày ba hình ảnh cho thấy cách nhân ma trận diễn ra. Ý tưởng tương tự như thể hiện trong những hình ảnh này đã được theo sau theo thứ tự trong mã nguồn chương trình cho phép nhân ma trận trong C.
Xem xét hai ma trận A và B của đơn hàng 3 × 3 như hình dưới đây. Hãy biểu thị các phần tử của ma trận A bằng aij và các phần tử của ma trận B bằng bij như hình dưới đây. Các aij và bij này được yêu cầu làm đầu vào dưới dạng mảng trong chương trình C cho phép nhân Ma trận.
Phép nhân ma trận trong C - hai ma trận A & B
Hãy để ma trận kết quả khi nhân của A và B là X với các phần tử biểu thị bằng x ij như được hiển thị.
Phép nhân ma trận trong ma trận kết quả C X
Phép nhân ma trận diễn ra như hình dưới đây, và thủ tục tương tự này được sử dụng cho phép nhân các ma trận sử dụng C.
Phép nhân ma trận trong phép nhân C - AxB
Giải quyết thủ tục sẽ yêu cầu chín phép tính riêng biệt để thu được từng phần tử của ma trận cuối cùng X. Chín phép tính riêng biệt này đã được thực hiện bằng cách sử dụng rất ít dòng mã liên quan đến vòng lặp và chức năng trong chương trình C này cho phép nhân ma trận.
Thực hiện chương trình:
//Source Code for Matrix Multiplication in C without using function
#include
int main()
{
int m, n, p, q, c, d, k, sum = 0;
int first[10][10], second[10][10], multiply[10][10];
printf("\nEnter the number of rows and columns of first matrix:\n");
scanf("%d%d", &m, &n);
/*//Entering elements of first matrix
printf("\nEnter the elements of first matrix\n");
for ( c = 0 ; c < m ; c++ )
for ( d = 0 ; d < n ; d++ )
scanf("%d", &first[c][d]);*/
printf("\nEnter the number of rows and columns of second matrix:\n");
scanf("%d%d", &p, &q);
//Checking if Matrix Multiplication is possible
if ( n != p )
{
printf("\nMatrices with entered orders can't be multiplied with each other.\n");
printf("\nThe column of first matrix should be equal to row of second.\n");
}
else
{
//Entering elements of first matrix
printf("\nEnter the elements of first matrix:\n");
for ( c = 0 ; c < m ; c++ )
for ( d = 0 ; d < n ; d++ )
scanf("%d", &first[c][d]);
//Entering elements of second matrix
printf("\nEnter the elements of second matrix:\n");
for ( c = 0 ; c < p ; c++ )
for ( d = 0 ; d < q ; d++ )
scanf("%d", &second[c][d]);
//Carrying out matrix multiplication operation
for ( c = 0 ; c < m ; c++ )
{
for ( d = 0 ; d < q ; d++ )
{
for ( k = 0 ; k < p ; k++ )
{
sum = sum + first[c][k]*second[k][d];
}
multiply[c][d] = sum;
sum = 0;
}
}
//Printing the final product matrix
printf("\nThe product of entered matrices is:\n");
for ( c = 0 ; c < m ; c++ )
{
for ( d = 0 ; d < q ; d++ )
printf("%d\t", multiply[c][d]);
printf("\n");
}
}
return 0;
}
//Source Code for Matrix Multiplication in C without using function
#include
int main()
{
int m, n, p, q, c, d, k, sum = 0;
int first[10][10], second[10][10], multiply[10][10];
printf("\nEnter the number of rows and columns of first matrix:\n");
scanf("%d%d", &m, &n);
/*//Entering elements of first matrix
printf("\nEnter the elements of first matrix\n");
for ( c = 0 ; c < m ; c++ )
for ( d = 0 ; d < n ; d++ )
scanf("%d", &first[c][d]);*/
printf("\nEnter the number of rows and columns of second matrix:\n");
scanf("%d%d", &p, &q);
//Checking if Matrix Multiplication is possible
if ( n != p )
{
printf("\nMatrices with entered orders can't be multiplied with each other.\n");
printf("\nThe column of first matrix should be equal to row of second.\n");
}
else
{
//Entering elements of first matrix
printf("\nEnter the elements of first matrix:\n");
for ( c = 0 ; c < m ; c++ )
for ( d = 0 ; d < n ; d++ )
scanf("%d", &first[c][d]);
//Entering elements of second matrix
printf("\nEnter the elements of second matrix:\n");
for ( c = 0 ; c < p ; c++ )
for ( d = 0 ; d < q ; d++ )
scanf("%d", &second[c][d]);
//Carrying out matrix multiplication operation
for ( c = 0 ; c < m ; c++ )
{
for ( d = 0 ; d < q ; d++ )
{
for ( k = 0 ; k < p ; k++ )
{
sum = sum + first[c][k]*second[k][d];
}
multiply[c][d] = sum;
sum = 0;
}
}
//Printing the final product matrix
printf("\nThe product of entered matrices is:\n");
for ( c = 0 ; c < m ; c++ )
{
for ( d = 0 ; d < q ; d++ )
printf("%d\t", multiply[c][d]);
printf("\n");
}
}
return 0;
}
Chương trình Phép nhân Ma trận trong C đầu tiên sẽ yêu cầu thứ tự của hai ma trận. Nếu trong các lệnh được nhập, cột của ma trận đầu tiên bằng với hàng của ma trận thứ hai, phép nhân có thể được thực hiện, nếu không, các giá trị mới sẽ được nhập vào chương trình.
Chương trình sau đó yêu cầu các phần tử tương ứng của hai ma trận và nhân chúng bằng cách sử dụng các vòng lặp như trong chương trình. Cuối cùng, ma trận kết quả thu được khi nhân được in. Màn hình đầu ra cuối cùng là:
Thực hiện chạy chương trình:
//Source Code for Matrix Multiplication in C by passing arrays to functions
#include
void take_data(int a[][10], int b[][10], int r1,int c1, int r2, int c2);
void multiplication(int a[][10],int b[][10],int mult[][10],int r1,int c1,int r2,int c2);
void display(int mult[][10], int r1, int c2);
int main()
{
int a[10][10], b[10][10], mult[10][10], r1, c1, r2, c2, i, j, k;
printf("Enter rows and column for first matrix: ");
scanf("%d %d", &r1, &c1);
printf("Enter rows and column for second matrix: ");
scanf("%d %d",&r2, &c2);
//Checking if matrix multiplication is possible
while (c1!=r2)
{
printf("\nMatrices with entered orders can't be multiplied with each other.");
printf("\nMake the column of the first matrix equal to the row of the second.\n");
printf("\nEnter rows and column for first matrix: ");
scanf("%d %d", &r1, &c1);
printf("Enter rows and column for second matrix: ");
scanf("%d %d",&r2, &c2);
}
take_data(a,b,r1,c1,r2,c2);
multiplication(a,b,mult,r1,c1,r2,c2);
display(mult,r1,c2);
return 0;
}
//This matrix takes the data of matrices.
void take_data(int a[][10], int b[][10], int r1,int c1, int r2, int c2)
{
int i,j;
printf("\nEnter elements of matrix 1:\n");
for(i=0; i
for(j=0; j
{
printf("Enter elements a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
printf("\nEnter elements of matrix 2:\n");
for(i=0; i
for(j=0; j
{
printf("Enter elements b%d%d: ",i+1,j+1);
scanf("%d",&b[i][j]);
}
}
//This function multiplies the entered matrices.
void multiplication(int a[][10],int b[][10],int mult[][10],int r1,int c1,int r2,int c2)
{
int i,j,k;
/* Initializing elements of matrix mult to 0.*/
for(i=0; i
for(j=0; j
{
mult[i][j]=0;
}
/* Multiplying matrix a and b and storing in array mult. */
for(i=0; i
for(j=0; j
for(k=0; k
{
mult[i][j]+=a[i][k]*b[k][j];
}
}
//This function displays the final matrix after multiplication.
void display(int mult[][10], int r1, int c2)
{
int i, j;
printf("\nThe product of the entered matrices is:\n");
for(i=0; i
for(j=0; j
{
printf("%d ",mult[i][j]);
if(j==c2-1)
printf("\n\n");
}
}
Các hoạt động liên quan đến vòng lặp và tính toán trong chương trình này là tương tự như các hoạt động trước đó. Sự khác biệt duy nhất là chương trình phép nhân ma trận này trong C sử dụng các hàm để truyền các mảng ma trận. Có ba hàm do người dùng định nghĩa riêng biệt trong chương trình này để đọc dữ liệu, thao tác nhân ma trận phôi và hiển thị ma trận kết quả.
Cả hai mã nguồn này đều không có lỗi và đã được thử nghiệm trên Code :: Blocks với các đầu vào như được hiển thị trong màn hình đầu ra. Cá nhân tôi thích sử dụng các hàm để thực hiện phép nhân ma trận.
Một số bài tập về lập trình C khác bạn nên học: