TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Java - Thực hiện phép nhân hai ma trận và tìm ma trận chuyển vị của ma trận tích vừa tính được.

Viết chương trình thực hiện các công việc sau:

  • Tạo 2 ma trận hai chiều A và B có kích thước lần lượt là m1 * n1 và m2 * n2 (với m1, n1, m2, n2 > 0), giá trị của các phần tử được nhập từ bàn phím. Xuất 2 ma trận vừa nhập ra màn hình.
  • Tính và in ra màn hình ma trận C = A * B. Lưu ý: Điều kiện để ma trận A nhân được với ma trận B là số cột của ma trận A bằng số dòng của ma trận B.
  • Nếu tồn tại ma trận tích C, hãy tìm ma trận D là ma trận chuyển vị của ma trận C. Biết rằng: Ma trận D = CT là ma trận chuyển vị của ma trận C nếu các hàng của ma trận C trở thành các cột của ma trận D và ngược lại. Tức Dij = Cji. Ví dụ:

matranchuyenvi PNG

test php

Bài giải

-------------------- ######## --------------------

Hướng dẫn về phép nhân hai ma trận: Cho hai ma trận Am1 * n1, Bm2 * n2 .Khi đó ma trận cn1 * m2 = A * B gọi là tích của hai ma trận A, B. Trong đó:

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

nhanhaimatran PNG

Như vậy cij = phần tử ở hàng thứ i của ma trận A nhân tương ứng với phần tử ở cột thứ j của ma trận B rồi cộng lại.

Ví dụ:

Bài viết này được đăng tại [free tuts .net]

Bài giải
public static void main(String[] args) {
	int m1, n1;	// số dòng và số cột của ma trận A
	int m2, n2;	// số dòng và số cột của ma trận B
	char choose;
	Scanner scanner = new Scanner(System.in);
		
	System.out.println("Nhập vào số dòng của ma trận A: ");
	m1 = scanner.nextInt();
	System.out.println("Nhập vào số cột của ma trận A: ");
	n1 = scanner.nextInt();
		
	System.out.println("Nhập vào số dòng của ma trận B: ");
	m2 = scanner.nextInt();
	System.out.println("Nhập vào số cột của ma trận B: ");
	n2 = scanner.nextInt();
		
	int[][] A = new int[m1][n1];
	int[][] B = new int[m2][n2];
		
	// ma trận tích C = A * B
	// sẽ có số dòng là số dòng của ma trận A
	// và số cột là số cột của ma trận B
	int C[][] = new int[m1][n2];
		
	while (m1 > 0 && n1 > 0 && m2 > 0 && n2 > 0) {
		if (n1 != m2) {
			System.out.println("Để nhân hai ma trận thì "
					+ "số cột của ma trận A phải bằng số dòng của ma trận B");
			System.out.println("Nhập lại số cột của ma trận A: ");
			n1 = scanner.nextInt();
			System.out.println("Nhập vào số dòng của ma trận B: ");
			m2 = scanner.nextInt();
		} else {
			// nhập giá trị của các phần tử cho 2 ma trận A
			System.out.println("Nhập vào các phần tử của ma trận A: ");
			for (int i = 0; i < m1; i++) {
				for (int j = 0; j < n1; j++) {
					System.out.print("A[" + i + "]["+ j + "] = ");
					A[i][j] = scanner.nextInt();
				}
			}
				
			// nhập giá trị của các phần tử cho 2 ma trận B
			System.out.println("Nhập vào các phần tử của ma trận A: ");
			for (int i = 0; i < m2; i++) {
				for (int j = 0; j < n2; j++) {
					System.out.print("B[" + i + "]["+ j + "] = ");
					B[i][j] = scanner.nextInt();
				}
			}
				
			// hiển thị 2 ma trận vừa nhập
			System.out.println("Ma trận A: ");
			for (int i = 0; i < m1; i++) {
				for (int j = 0; j < n1; j++) {
					System.out.print(A[i][j] + "\t");
				}
				System.out.println("\n");
			}
			
			System.out.println("Ma trận B: ");
			for (int i = 0; i < m2; i++) {
				for (int j = 0; j < n2; j++) {
					System.out.print(B[i][j] + "\t");
				}
				System.out.println("\n");
			}
			
			// tính và in ra ma trận C = A * B
			for (int i = 0; i < m1; i++) {
				for (int j = 0; j < n2; j++) {
					C[i][j] = 0;
					for (int k = 0; k < n1; k++) {
						C[i][j] = C[i][j] + A[i][k] * B[k][j];
					}
				}
			}
			
			// hiển thị ma trận tích C
			System.out.println("Ma trận tích C: ");
			for (int i = 0; i < m1; i++) {
				for (int j = 0; j < n2; j++) {
					System.out.print(C[i][j] + "\t");
				}
				System.out.println("\n");
			}
				

			// tìm ma trận D là ma trận chuyển vị của ma trận C
			// ma trận D là ma trận chuyển vị của ma trận C
			// thì các dòng của ma trận C sẽ trở thành
			// các cột của ma trận D và ngược lại
			// ví dụ: ma trận C có số dòng m1 = 3 và số cột n2 = 4 thì
			// ma trận D sẽ có số dòng n2 = 4 và số cột m1 = 3
			int D[][] = new int[n2][m1];
			for (int i = 0; i < m1; i++) {
				for (int j = 0; j < n2; j++) {
					D[j][i] = C[i][j];
				}
			}
				
			// hiển thị ma trận D
			System.out.println("Ma trận chuyển vị của ma trận C là: ");
			for (int i = 0; i < n2; i++) {
				for (int j = 0; j < m1; j++) {
					System.out.print(D[i][j] + "\t");
				}
				System.out.println("\n");
			}
				
			System.out.println("Bạn có muốn tiếp tục không? Bấm y để tiếp tục, n để thoát!");
			choose = scanner.next().charAt(0);
			if (choose == 'y') {
				continue;
			} else {
				System.out.println("Goodbye!");
				break;
			}
		}

	}
}
	

Kết quả sau khi biên dịch chương trình:

Nếu nhập vào số cột của ma trận A không bằng số dòng của ma trận B thì chương trình sẽ yêu cầu các bạn nhập lại:

ketqua baitap4mang2chieu 1 PNG

Nếu nhập vào số cột của ma trận A bằng số dòng của ma trận B:

ketqua baitap4mang2chieu 2 PNG

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách test RESTful API trong Spring Boot

Cách test RESTful API trong Spring Boot

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Top