Java - Viết chương trình xóa dòng có tổng lớn nhất của một ma trận số thực.

Viết chương trình nhập vào một ma trận số thực. Sau đó xóa dòng có tổng lớn nhất của ma trận đó.

Loading...

Bài giải

Bài giải
public static void main(String[] args) {
	int m, n;
	double tong = 0, max;
	int rowPosition = 0;	// vị trí dòng
	Scanner scanner = new Scanner(System.in);
		
	System.out.println("Nhập vào số dòng của ma trận: ");
	m = scanner.nextInt();
	System.out.println("Nhập vào số cột của ma trận: ");
	n = scanner.nextInt();
		
	double A[][] = new double[m][n];
        
        System.out.println("Nhập các phần tử cho ma trận: ");	
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			System.out.print("A[" + i + "]["+ j + "] = ");
			A[i][j] = scanner.nextDouble();
		}
	}
		
	System.out.println("Ma trận A vừa nhập:");
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			System.out.print(A[i][j] + "\t");
		}
		System.out.println("\n");
	}
		
	// tìm tổng trên dòng đầu tiên (i = 0) của ma trận
	for (int j = 0; j < n; j++) {
		tong += A[0][j];
	}
		
	max = tong;
		
	for (int i = 1; i < m; i++) {
		tong = 0;
		for (int j = 0; j < n; j++) {
			tong += A[i][j];
		}
			
		// nếu giá trị của tổng các số ở các dòng sau
		// lớn hơn tổng các số ở dòng đầu tiên
		// thì gán max = tong
		if (tong > max) {
			max = tong;
			// lưu lại vị trí dòng có tổng lớn nhất
			rowPosition = i;
		}
	}
		
	for (int i = rowPosition; i < m; i++) {
		for (int j = 0; j < n; j++) {
			// đẩy phần tử ở dòng i + 1 lên
			// vị trí ở dòng i
			A[i][j] = A[i+1][j];
		}
		m--;	// giảm số dòng của ma trận đi 1
	}
		
	System.out.println("Ma trận A sau khi xóa dòng có tổng lớn nhất:");
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			System.out.print(A[i][j] + "\t");
		}
		System.out.println("\n");
	}
}

Giải thích hoạt động của chương trình trên: Giả sử tôi nhập vào ma trận số thực có 3 dòng và 2 cột như sau:

3.0    1.0     

1.0     8.0     

2.0     0.0

Bước 1: Tính tổng các phần tử ở dòng đầu tiên của ma trận (i = 0) và gán vào biến tong, lúc này tong sẽ bằng 4.0.

Bước 2: Gán giá trị biến max = tong = 4.0.

Bước 3: Thiết lập giá trị biến tong = 0 và tính tổng của các phần tử ở dòng i = 1 trong ma trận, lúc này tong = 9.0.

Bước 4: So sánh biến max với biến tong, vì max = 4.0 < tong = 9.0 nên sẽ thực hiện các lệnh bên trong if: gán giá trị max = tong = 9.0 và lưu lại vị trí của dòng này rowPosition = 1. Mục đích đoạn lệnh bên trong if là để tìm ra vị trí của dòng có tổng các phần tử là lớn nhất trong ma trận.

Bước 5: Tăng i lên 1, lúc này i = 2, thiết lập giá trị biến tong = 0 và thực hiện tính tổng của các phần tử ở dòng i = 2 trong ma trận. Đến đây chúng ta sẽ tính được giá trị tong = 3.0.

Bước 6: So sánh biến max với biến tong, vì max = 9.0 > tong = 3.0 nên bỏ qua không thực hiện các lệnh bên trong if.

Bước 7: Tăng i lên 1, lúc này i = 3 không nhỏ hơn n nên sẽ bỏ qua không thực hiện các lệnh trong thân vòng lặp for.

Bước 8: Thực hiện vòng lặp for với giá trị khởi tạo i = rowPosition = 1j = 0 (là dòng có tổng các phần tử lớn nhất). Sau đó, chúng ta sẽ tiến hành thay thế phần tử ở dòng i bằng phần tử ở dòng i + 1 (tức là dòng kế tiếp). Kết quả sau khi thực hiện vòng lặp for này là các phần tử ở dòng lớn nhất sẽ bị xóa và được thay thế bằng các phần tử ở dòng tiếp theo.

Bước 9: Hiển thị ma trận sau khi xóa dòng có tổng lớn nhất ra màn hình.

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

 

Nguồn: freetuts.net

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Facebook để được hỗ trợ nhanh nhất.
BẢN TIN/THÔNG BÁO
BẢN TIN/THÔNG BÁO X