30/09/2018, 18:21

Đườ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!!!

X viết 20:24 ngày 30/09/2018

Đỏ là chính

Minh Vương viết 20:35 ngày 30/09/2018
       #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?

  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;
*grab popcorn* viết 20:22 ngày 30/09/2018

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
Minh Vương viết 20:37 ngày 30/09/2018

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;
X viết 20:26 ngày 30/09/2018

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

*grab popcorn* viết 20:22 ngày 30/09/2018

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

Minh Vương viết 20:37 ngày 30/09/2018

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

Hoàng Thức viết 20:27 ngày 30/09/2018

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

rogp10 viết 20:22 ngày 30/09/2018

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

Bài liên quan
0