Đường chéo chính và đường chéo phụ trong mảng hai chiều?

Như tiêu đề, mình đang bắt đầu học c++ và không hiểu đường chéo chính và đường chéo phụ trong mảng của C++ là gì.
Mong ai đã học qua và hiểu phần này giải thích cho mình!!! :smile:

Đỏ là chính

4 Likes
       #include <iostream>
     using namespace std;
     main()
     {
float a[11][11];
int n, i, j, d;
float s, min;
do
{
	cout << "Nhap so hang va so cot: ";
	cin >> n;
}while(n <= 0 || n > 10);
for( i = 1; i <= n; i++)
	for(j = 1; j <= n; j++)
	{
		cout << "Nhap a["<<i<<","<<j<<"] = ";
		cin >> a[i][j];
	}
for(i = 1; i <= n; i++)
{
	for(j = 1; j <= n; j++)
		cout << a[i][j] << "   ";
		cout << endl;
}
//Cho biet co bao nhieu phan tu co phan nguyen la chan
d = 0;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
if(int(a[i][j]) % 2 == 0)
	d++;
cout << "Co "<< d << " p.tu co phan nguyen la chan" << endl;
//Cac phan tu nam tren duong cheo chinh
cout << "=====================================" << endl;
cout << "cac phan tu nam tren duong cheo chinh : ";
for(i= 1; i <= n; i++)
	cout << float(a[i][i])<< "  ";
	cout << endl;
s = 0;
for(i = 1; i <= n; i++) // 2
	for(j = 1; j <= n; j++) 
		if(i+j == n + 1)
			s = s + a[i][j];
cout << "Tong cac phan tu tren duong cheo phu la: " << s << endl;
  }

-Giải thích hộ mình đoạn code này được không? :grinning:

  s = 0;
for(i = 1; i <= n; i++) // 2
	for(j = 1; j <= n; j++) 
		if(i+j == n + 1)
			s = s + a[i][j];
cout << "Tong cac phan tu tren duong cheo phu la: " << s << endl;
1 Like

Mảng 2 chiều = Ma trận cấp NxM
Ma trận vuông có các phần tử trên đường chéo chính = Ai,i 0<= i < n
Đường chéo phụ là Ai,n-i với 0<= i < n

Đọc thêm (có code hướng dẫn):

https://docs.google.com/document/d/1CW4xhoV4slt_fUlA0oz15caOvsiymurX-0AmAR2PcyY/edit?hl=vi
6 Likes

Giải thích hộ em đoạn code này được không anh?

  s = 0;
for(i = 1; i <= n; i++) // 2
	for(j = 1; j <= n; j++) 
		if(i+j == n + 1)
			s = s + a[i][j];
cout << "Tong cac phan tu tren duong cheo phu la: " << s << endl;
1 Like

Vẽ ma trận ra giấy, ghi chỉ số dòng cột i,j
Nhìn chéo phụ từ góc trên-phải xuống góc dưới-trái sẽ thấy i tăng và j giảm
Có thể dùng 1 vòng lặp

4 Likes

Do các phân tử của đường chéo phụ có các tọa độ là (i, n-i)
-> giả sử n-i = j
-> i+j = i + n - i = n
mà ở trên do i,j chạy từ 1 -> n nên phải = n+1
Làm vậy để chạy 2 vòng for thôi :blush:

6 Likes

Cám ớn mọi người!!! :grinning:

i+j=n-1 nha bạn, chăc ad viet nhầm thui

1 Like

Thực ra đường chéo chính (i = j) của ma trận mới có ý nghĩa quan trọng cần nhớ :slight_smile: còn đường phụ thì chả biết đặt ra làm gì.
Cho dễ nhớ thì đường chéo phụ bắt đầu từ (0, n-1) trở xuống.

2 Likes

có thể dùng cách này nè
s=0
cho vòng lặp for chạy từ 0 đến dòng ( cột ) -1
s = s+ a[i][dong - i -1]
rồi in kết quả ra màn hình

sao bạn bỏ qua phần tử [0,0] uổng vậy

Bạn đọc kỹ lại comment đi bạn, i, j for từ 1 chứ không phải là 0 (1-index).

c!m nghĩa là cảm ơn bạn nhé

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?