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!!!
Đường chéo chính và đường chéo phụ trong mảng hai chiều?
Đỏ là chính
#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;
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
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;
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
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
Cám ớn mọi người!!!
i+j=n-1 nha bạn, chăc ad viet nhầm thui
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.
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é