01/10/2018, 00:46

Bài toán về Ma Trận trong C

Viết các hàm sau :

  • Nhập 1 ma trận kích thước m*n với 2<=n,m<=100

  • Hiện ma trận kích thước n*m ra màn hình

  • Tính TBC đường chéo chính

  • Tìm ra hàng có tổng giá trị lớn nhất trong ma trận

  • Tính tổng các phần tử trên một hàng nào đó

  • In các phần tử trên cột nào đó.
    tình hình là sửa đi sửa lại ko được nên thành ra n dở dang thế này các bác ạ, mong các bác giúp e

    #include<stdio.h>
    #include<conio.h>
    #define MAX 100
    void NhapMang(int a[MAX][MAX], int dong, int cot)
    {
    int i,j;
    for (i=1; i<=dong; i++)

              for(j=1; j<=cot; j++)
              {
                  printf("
    a[%d][%d]", i,j);
                  scanf("
    %d ", &a[i][j]);
              }
    

    }
    void XuatMang (int a[MAX][MAX], int dong, int cot)
    {
    int i,j;
    for(i=1; i<=dong; i++)
    for(j=1; j<=cot; j++)
    {
    printf(" a[%d][%d]= %f ",i,j,a[i][j]);
    }
    printf(" ");
    }
    void TBC_cheo(int a[][], int m,int n)
    {
    int i,j;
    float tong =0, TBC=0;
    for (i=2; i<=m; i++)
    {
    for(j=2; j<=m; j++)
    {
    if (i==j)
    tong= tong + a[i][j];
    TBC = tong/i;
    }
    printf(" TBC duong cheo chinh cua ma tran la:%f", TBC);
    }
    }
    int HangMax(int a[][], int m, int n)
    {
    int GTLN;
    for (int i = 0; i < m; ++i)
    {
    int sum = 0;
    for (int j = 0; j < n; ++j)
    {
    sum += A[i][j];
    }
    if (sum > GTLN)
    GTLN = i;
    }
    void Tong1Hang(int a[][MAX], int m, int n)
    {
    int i,j;
    int tong= 0;
    for(i=2; i<=m; ++i)
    {
    for(j =2; j<=n; ++j)
    {
    tong = tong + A[i][j];
    }
    }
    }*/
    int main()
    {
    int a[MAX][MAX];
    int m,n;
    printf(" Nhap m,n : “);
    scanf(”%d %d", &m,&n);
    NhapMang(a,m,n);
    printf(" Mang vua nhap: ");
    XuatMang(a,m,n);
    TBC_cheo(a,m,n);
    }

Người bí ẩn viết 03:03 ngày 01/10/2018

for (i=1; i<=dong; i++)

Lai Pascal qua à =)) Trong C/C++ thì chỉ số mảng luôn bắt đầu từ 1 nhé, sửa lại for (int i = 0; i < dong; ++i), các câu khác tương tự cũng sửa y chang.

scanf("\n%d ", &a[i][j]);

scanf chỉ có nhiệm vụ nhập, mọi thao tác in hoặc xử lý (line-break) đều do printf đảm nhiệm nên không được để bất cứ ký tự nào khác ngoài các đặc tả trong hàm scanf, sửa lại là: scanf("%d", &a[i][j]);

printf("\na[%d][%d]= %f\t",i,j,a[i][j]);

Sao ma trận a thuộc kiểu int mà lúc xuất lại để đặc tả %f ? sửa lại đặc tả %d nhé.

Nói chung là hình như bạn chưa nắm được mấy khái niệm căn bản thì huống hồ gì tới mấy cái khái niệm mảng, ma trận này. Nên học kỹ lại phần cơ bản trước, có thể tham khảo playlist C của anh Đạt trên Youtube.
Còn mấy thuật toán bạn tự suy nghĩ lại đi nhé

Hoàng Thạch viết 03:01 ngày 01/10/2018

Mình đang có thắc mắc là nếu mảng mn thì làm sao để có đường chéo chính? Đường chéo chính chỉ có khi mảng nn thôi chứ

Người bí ẩn viết 02:58 ngày 01/10/2018

Bạn cứ hiểu đường chéo chính trong ma trận m*n là đường chéo từ trái qua phải và trên xuống dưới bắt đầu từ ô đầu tiên thôi.

Mấy ô màu đỏ là những ô có đường chéo chính đi qua

Killua viết 03:00 ngày 01/10/2018

Đường chéo chính chỉ có trong ma trận vuông thôi bạn , vì thế khi code nếu nó là ma trận vuông mới xét tiếp tính tổng của đường chéo chính đc còn ko thì đưa ra thông báo , cái ma trận bạn đưa ra nó là ma trận con của ma trận chính người ta nhập vào , ko thể coi nó là đường chéo chính của cả ma trận to đc

Người bí ẩn viết 02:47 ngày 01/10/2018

Mình nói thế để phòng những bài nào không phải ma trận vuông mà vẫn phải bắt tính … trên đường chéo chính ấy bạn

Bài liên quan
0