Chuyển đến nội dung chính

Nhân 2 Ma Trận C++, Viết Chương Trình Như Thế Nào ?

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ị.

nhân 2 ma trận c++
nhân 2 ma trận c++

1. Nhân ma trận trong C++ là gì?

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ã.

Nhân 2 ma trận là một trong những nội dung căn bản trong khóa học lập trình C/C++ mà học viên cần nắm kiến thức thật vững.

2. Giới thiệu về nhân 2 ma trận c++

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.

Giới thiệu về phép nhân ma trận (1)
Giới thiệu về phép nhân ma trận (1)

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ị.

Giới thiệu về phép nhân ma trận (2)
Giới thiệu về phép nhân ma trận (2)

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.

Giới thiệu về phép nhân ma trận (3)
Giới thiệu về phép nhân ma trận (3)

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.

3. Lập trình nhân 2 ma trận trong C++

Đề nhân 2 ma trận trong C++ có thể thực hiện bằng 2 cách: không sử dụng và truyền các mảng tới hàm. Dưới đây là 2 cách lập trình nhân 2 ma trận trong C++

Cách 1: Nhân 2 ma trận C++ mà không sử dụng hàm

#include<stdio.h>
 
int main()
{
    int a[10][10],b[10][10],result[10][10],m,n,p,q,i,j,k;
    
    //get the nuumber of rows/columns of first matrix
    printf("Enter rows and columns of first matrix:");
    scanf("%d%d",&m,&n);
    
    //get the nuumber of rows/columns of second matrix
    printf("Enter rows and columns of second matrix:");
    scanf("%d%d",&p,&q);
    
    //check if rows of A qual to columns of B
    if(n==p)
    {
        printf("\nEnter first matrix:\n");
        
        //fetch the first matrix data from user and save in array a[10][10] declared above
        for(i=0;i<m;++i)
        {
            for(j=0;j<n;++j)
            {
                scanf("%d",&a[i][j]);
            }
        }
        
        printf("\nEnter second matrix:\n");
        
        //fetch the second matrix data from user and save in array b[10][10] 
        for(i=0;i<p;++i)
        {
            for(j=0;j<q;++j)
            {
                scanf("%d",&b[i][j]);
                
            }
        }
        
        printf("\nThe multiplied matrix result is:\n");
        
        //multiply the matrix and save it in result[][] array & print it
        for(i=0;i<m;++i)
        {
            for(j=0;j<q;++j)
            {
                 result[i][j]=0;
                for(k=0;k<n;++k)
                    result[i][j]=result[i][j]+(a[i][k]*b[k][j]);
                        printf("%d ",result[i][j]);
                       
            }
            
            printf("\n");
        }
    }
    else
    {
        printf("\n Matrix multiplication can't be done for these rows/columns");
    }
 
    return 0;
}

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Enter rows and columns of first matrix:3                                                                                      
3                                                                                                                             
Enter rows and columns of second matrix:3                                                                                     
3                                                                                                                             
                                                                                                                              
Enter first matrix:                                                                                                           
11                                                                                                                            
22  
33                                                                                                                            
44                                                                                                                            
55                                                                                                                            
66                                                                                                                            
77                                                                                                                            
88                                                                                                                            
99                                                                                                                            
                                                                                                                              
Enter second matrix:                                                                                                          
11                                                                                                                            
22                                                                                                                            
33                                                                                                                            
44                                                                                                                            
55                                                                                                                            
66                                                                                                                            
77                                                                                                                            
88                                                                                                                            
99                                                                                                                            
                                                                                                                              
The multiplied matrix result is:                                                                                              
3630 4356 5082                                                                                                                
7986 9801 11616                                                                                                               
12342 15246 18150

 

Cách 2: Nhân 2 ma trận C++ bằng cách dùng con trỏ và hàm

#include<stdio.h>

#define ROW 3
#define COL 3

int main()
{
    int First[3][3],Second[3][3],Result[3][3];
    
    int m1,n1,m2,n2,i,j;
   

    printf("Enter no of row and column for 1st matrix\n");
    scanf("%d%d",&m1,&n1);

    printf("Enter no of row and column for 2nd matrix\n");
    scanf("%d%d",&m2,&n2);
     
     //check if multiplication is possible, 1st matrix rows must be equal to 
     //Second matrix columns
    if(n1==m2)
    {
        printf("Enter First matrix\n");
        matrixInput(First);
       
        printf("\nEnter Second matrix\n");
        matrixInput(Second);

         
        matrixMultiply(First,Second,Result);

        printf("Product of entered matrices :-\n");

        //print the resultant matrices
        for(i=0;i<m1;i++)
        {
            for(j=0;j<n2;j++)
                printf("%d\t",*(*(Result + i) + j));
            printf("\n");
        }


    }
    else
    {
       printf("Sorry ! Multiplication is not possible");
    }
    return 0;
}

//Get matrix data 
void matrixInput(int mat[][COL])
{
    int row, col;

    for (row = 0; row < ROW; row++)
    {
        for (col = 0; col < COL; col++)
        {
            scanf("%d", (*(mat + row) + col));
        }
    }
}


//Function to multiply Matrices mat1 * mat2 = res
void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL])
{
    int row, col, i;
    int sum;


    for (row = 0; row < ROW; row++)
    {
        for (col = 0; col < COL; col++)
        {
            sum = 0;
            // find the sum of product of each elements of row for first matirx 
            // and columsn of second
            for (i = 0; i < COL; i++)
            {
                sum += (*(*(mat1 + row) + i)) * (*(*(mat2 + i) + col));
            }


           //save sum in resultant matrix 
            *(*(res + row) + col) = sum;
        }
    }
}

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Enter no of row and column for 1st matrix  
3 3                                                
Enter no of row and column for 2nd matrix                    
3 3                                                 
Enter First matrix                                                                                                
10 20 30                                                                     
40 50 60                                                      
70 80 90                                                                    
                                                                                        
Enter Second matrix                                                  
10 20 30                                                                                   
40 50 60                                                                    
70 80 90                                                                                         
Product of entered matrices :                                                                              
3000    3600    4200                                
6600    8100    9600                                           
10200   12600   15000

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ách nhân 2 ma trận không sử dụng hàm. 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ác bạn nên lập trình nhân 2 ma trận sử dụng các hàm và con trỏ.

The post Nhân 2 Ma Trận C++, Viết Chương Trình Như Thế Nào ? first appeared on Techacademy.



Nhận xét

Bài đăng phổ biến từ blog này

Hướng Dẫn Cài Đặt Python Trên Máy Tính?

Python là một ngôn ngữ lập trình phổ biến và được sử dụng rộng rãi trong lĩnh vực phát triển phần mềm và khoa học dữ liệu. Để bắt đầu sử dụng Python trên máy tính của bạn, bạn cần cài đặt nó. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách cài đặt Python trên máy tính một cách dễ dàng. I. Cài Đặt Python Trên Vscode Python là một ngôn ngữ lập trình phổ biến và VS Code là một trình soạn thảo mã nguồn được ưa chuộng. Kết hợp cả hai, bạn có thể tận dụng lợi ích của cả hai công cụ để phát triển ứng dụng Python một cách hiệu quả. Trong bài viết này, chúng tôi sẽ hướng dẫn cách cài đặt Python trên VS Code. Bước 1: Cài đặt VS Code Trước khi bắt đầu, bạn cần cài đặt VS Code trên máy tính của mình. Truy cập trang web vscode.com, tải xuống phiên bản phù hợp với hệ điều hành của bạn và làm theo hướng dẫn trên màn hình để hoàn tất quá trình cài đặt. Bước 2: Cài đặt Extension Python cho VS Code Sau khi cài đặt VS Code, bạn cần cài đặt extension Python để hỗ trợ phát triển ứng dụng Python t...

Phím Tắt Eclipse Thông Dụng Và Tiện Lợi Nhất ! Đọc Ngay Nếu Bạn Vẫn Đang Dùng Chuột

Việc sử dụng các thao tác click chuột nhiều lần trong Eclipse khiến các coder nhàm chán và tốn thời gian, hãy cải tạo nó bằng các phím tắt trong Eclipse. Dưới đây là danh sách một số những phím tắt thông dụng bạn nên biết. phím tắt eclipse (1) Đầu tiên hãy sử dụng phím tắt Ctrl + Shift + L để hiển thị danh sách các phím tắt trong Eclipse. phím tắt eclipse (2) Danh sách tất cả những phím tắt trong Eclipse bạn có thể áp dụng, được chia thành 12 mục khác nhau tùy thuộc vào tác dụng của phím tắt: 1. Quản lý tập tin và dự án Ctrl + N Tạo dự án mới bằng Wizard Ctrl + Alt + N Tạo dự án , tập tin, lớp, vv Alt + F Mở dự án, tệp, v.v. Ctrl + Shift + R Mở Resource (tệp, thư mục hoặc dự án) Alt + Enter Hiển thị và truy cập các thuộc tính tệp Ctrl + S Save tập tin hiện tại Ctrl + Shift + S Save tất cả các tập tin Ctrl + W Đóng tệp hiện tại Ctrl + Shift + W Đóng tất cả các tệp F5 Làm mới nội dung của phần tử đã chọn bằng hệ thống tệp cục bộ 2. Cửa sổ trình chỉnh sửa F1...

Kiểu Date Trong Java

Date trong Java là 1 trong các class mô tả ngày tháng đầu tiên trong Java. Thật đáng tiếc là hầu hết các cách thức của nó đã lỗi thời, và thay vào đó là dùng các cách thức của java.util.Calendar. Nhưng bạn vẫn có thể dùng java.util.Date để mô tả ngày tháng. 1. Các Lớp Date, Time, Calendar Trong Java Java cung cấp 1 số class liên quan tới thời gian và lịch (Calendar), sau đây là danh sách các class này: Class Mô tả java.util.Date 1 lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các cách thức của nó đã bị lỗi thời, khuyến cáo là không nên dùng các cách thức đó, tuy nhiên lớp Date vẫn được dùng rỗng rãi. java.util.concurrent.TimeUnit TimeUnit là 1 Enum mô tả các đơn vị ngày tháng năm và thời gian. java.sql.Date 1 lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường dùng trong JDBC. java.sql.Time 1 lớp mô tả thời gian (Giờ phút giây, milli giây), và không chứa thông tin ngày tháng năm. Lớp này thường dùng trong...