Tính tổng các phần tử tam giác trên( không tính trên đường chéo chính ) trong ma trận vuông

16
16865

Bài toán: Tính tổng các phần tử tam giác trên( không tính trên đường chéo chính ) trong ma trận vuông

Input: ma trận a có n dòng, n cột

Xử lý: gán tổng bằng không

Ví dụ:

a[4][4]={(12,23,15,43)

(4,8,32,22)

(21,34,6,5)

(11,7,20,12)}

Tổng tam giác trên

Tổng =a[0][1]+a[0][2]+a[0][3]+a[1][2]+a[1][3]+a[2][3]

=23+15+43+32+12+5=140

Tổng tam giác dưới

Tổng=a[1][0]+a[2][0]+a[2][1]+a[3][0]+a[3][1]+a[3][2]

=4+21+34+11+7+20=97

Output: Tổng tam giác trên/dưới

Hàm tính tổng tam giác trên

double Tongtamgiactren(int a[][MAX], int n)
{
	double sum=0;
	for(int i=0;i<n-1;i++)
		for(int j=0;j<n-1;j++)
			if(i<j)
				sum=sum+a[i][j];
	return sum;
}

Hàm tính tổng tam giac dưới

double Tongtamgiacduoi(int a[][MAX], int n)
{
	double sum=0;
	for(int i=0;i<n-1;i++)
		for(int j=0;j<n-1;j++)
			if(i>j)
				sum=sum+a[i][j];
	return sum;
}

Chương trình

#include<conio.h>
#include<stdio.h>
#include<math.h>
#define MAX 100
void nhapmatran(int a[][MAX], int &n);
void xuatmatran(int a[][MAX], int n);
double Tongtamgiactren(int a[][MAX], int n);
void main()
{
	int a[MAX][MAX],n;
	nhapmatran(a,n);
	printf("\nNoi dung cua ma tran\n");
	xuatmatran(a,n);
	double kq=Tongtamgiactren(a,n);
	printf("\nTong cac phan tam giac tren la  %8.2f",kq);
	getch();
}
void nhapmatran(int a[][MAX], int &n)
{
	do
	{
		printf("\nNhap n: ");
		scanf("%d",&n);
	}while(n<=0 || n>100);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			printf("\nSo phan tu a[%d][%d] la: ",i,j);
			scanf("%d",&a[i][j]);
		}
}
void xuatmatran(int a[][MAX], int n)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%5d",a[i][j]);
		}
		printf("\n");
	}
}
double Tongtamgiactren(int a[][MAX], int n)
{
	double sum=0;
	for(int i=0;i<n-1;i++)
		for(int j=0;j<n-1;j++)
			if(i<j)
				sum=sum+a[i][j];
	return sum;
}

Mình chia sẻ code này để các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.

Chúc các bạn thành công!

16 COMMENTS

    • cảm ơn đã góp ý cho mình
      vòng for của bạn chạy không sai mình không bàn luận đến
      bạn phát hiện ra cái vòng for() của mình nghĩa là bạn đã xem hết code, chắc là trên trường thầy(cô) dạy như thế
      nhưng ở đây mình muốn tối ưu code
      mình sẽ giải thích cho bạn vòng for của mình
      tổng tam giác trên, có phải là tổng các phần tử phía trên đường chéo chính như vậy là dòng cuối cùng ta không cần đề cập đến nó. Vậy tại sao ta không loại bỏ luôn dòng cuối cùng ra khỏi vòng lặp ?

  1. bạn chỉ cần thêm 2 hàm này
    double TongDuongCheoPhu(int a[][MAX], int n)
    {
    double sum=0;
    for(int i=0;i<n;i++)
    sum=sum+a[i][n-1-i];
    return sum;
    }
    double TongDuongCheoChinh(int a[][MAX], int n)
    {
    double sum=0;
    for(int i=0;i<n;i++)
    sum=sum+a[i][i];
    return sum;
    }
    rồi viết thêm 1 hàm nữa
    double TongTamGiacTrenCa2DuongCheo(int a[][MAX], int n)
    {
    double sum=0;
    sum= TongDuongCheoChinh(a,n)+TongDuongCheoPhu(a,n)+ TongTamGiacTren(a,n);
    return sum;
    }
    cái tam giác dưới thì giống vậy nha

  2. int kiemtramatrantamgiacduoi(int a[size][size],int n)
    {
    int sum=0;
    for(int i=0;i<n;i++)
    for(int j=0;jj)
    {
    sum=sum+a[i][j];
    }
    }
    return sum;
    }
    mình như tính tổng ma trận tam giác dưới là như thế này chứ bạn , minh làm theo kiểu của bạn nó ko ra chính xác

  3. double Tongtamgiactren(int a[50][50], int n)
    {
    int sum=0;
    for(int i=0;i<n-1;i++){
    for(int j=i+1;j<n;j++)
    {
    sum=sum+a[i][j];
    }
    }
    return sum;
    }
    double Tongtamgiacduoi(int a[50][50], int n)
    {
    int sum=0;
    for(int i=0;i<n-1;i++){
    for(int j=i+1;j<n;j++)
    {
    sum=sum+a[j][i];
    }
    }
    return sum;
    }
    v mới đúng nhé

  4. double Tongtamgiactren(int a[50][50], int n)
    {
    int sum=0;
    for(int i=0;i<n-1;i++){
    for(int j=i+1;j<n;j++)
    {
    sum=sum+a[i][j];
    }
    }
    return sum;
    }
    double Tongtamgiacduoi(int a[50][50], int n)
    {
    int sum=0;
    for(int i=0;i<n-1;i++){
    for(int j=i+1;j<n;j++)
    {
    sum=sum+a[j][i];
    }
    }
    return sum;
    }
    v mới đúng nhé

This site uses Akismet to reduce spam. Learn how your comment data is processed.