tính tổng ma trận đê!!!

Thảo luận trong 'Thuật toán' bắt đầu bởi LieuKyThien, 10 Tháng năm 2009.

  1. Offline

    LieuKyThien

    • Thành Viên Mới

    Số bài viết:
    79
    Đã được thích:
    49
    Điểm thành tích:
    0
    Yêu cầu bài toán như sau: nhập 2 ma trận a và b. Tính tổng 2 ma trận và lưu vào ma trận mới là c, sau đó tìm max của ma trận c.
    Mã:
    #include<stdio.h>
    #include<conio.h>
    #define max1 50
    int ln(int z[][max1],int n)
    {
    	int i,j,max;
       	max=z[0][0];
    	for(i=0;i<n;i++)
       	   for(j=0;j<n;j++)
          	     max=(max>z[i][j])?max:z[i][j];
       return max;
    }
    void main()
    {
    	clrscr();
       int b[max1][max1],a[max1][max1],c[max1][max1],n,x,y,g,h,i,j;
       scanf("%d",&n);
       printf("Nhap ma tran a: \n");
       for(i=0;i<n;i++)
       	for(j=0;j<n;j++)
       		scanf("%d",&a[i][j]);
       printf("\n");
       printf("Nhap ma tran b: \n");
       for(g=0;g<n;g++)
       	for(h=0;h<n;h++)
       		scanf("%d",&b[g][h]);
       for(x=0;x<n;x++)
       	for(y=0;y<n;y++)
          	c[x][y]=a[x][y]+b[x][y];
       printf("Ma tran A: \n");
       for(i=0;i<n;i++)
         {
       	for(j=0;j<n;j++)
       		printf("%3d",a[i][j]);
          printf("\n");
         }
       printf("\nMa tran B: \n");
       for(g=0;g<n;g++)
         {
       	for(h=0;h<n;h++)
       		printf("%d",b[g][h]);
          printf("\n");
         }
       printf("\nMa tran moi: \n");
       for(x=0;x<n;x++)
         {
          for(y=0;y<n;y++)
       		printf("%3d",c[x][y]);
          printf("\n");
         }
       printf("Max cua ma tran moi la %d",ln(c,n));
       getch();
    }
    bài vừa rồi mình làm theo cách bình thường nên hơi dài. Bạn nào muốn rút ngắn lại có thể dùng các hàm để chương trình sáng sủa hơn:
    Mã:
    #include<stdio.h>
    #include<conio.h>
    #define max 50
    int n;
    int nhap(int t[][max])
    {
       for(int i=0;i<n;i++)
       	for(int j=0;j<n;j++)
          	scanf("%d",&t[i][j]);
    }
    void xuat(int t[][max])
    {
    	for(int i=0;i<n;i++)
         {
         	for(int j=0;j<n;j++)
          	printf("%3d",t[i][j]);
          printf("\n");
         }
       printf("\n");
    }
    void tong(int a[][max],int b[][max],int c[][max])
    {
    	for(int i=0;i<n;i++)
       	for(int j=0;j<n;j++)
          	c[i][j]=a[i][j]+b[i][j];
    }
    int ln(int h[][max],int n)
    {
        int lonnhat;
        for(int i=0;i<n;i++)
              lonnhat=(lonnhat>h[i][j])?lonnhat:h[i][j];
        return lonnhat;
    }
    main()
    {
    	clrscr();
       int a[max][max],b[max][max],c[max][max];
       scanf("%d",&n);
       printf("Nhap ma tran A: ");
       nhap(a);
       printf("Nhap ma tran B: ");
       nhap(b);
       printf("\n");
       xuat(a);
       xuat(b);
       tong(a,b,c);
       xuat(c);
       printf("\n");
       lonnhat(c,n);
       getch();
    }
    sunboy thích bài này.
  2. Offline

    sunboy

    • Thành viên sáng lập

    • No thing
    Số bài viết:
    1.616
    Đã được thích:
    1.340
    Điểm thành tích:
    1.000
    Bài thì giả hay nhưng nhìn sơ qua có một số lỗi.
    hàng thứ 10 có đoạn max=(max>a[j])?max:a[j]; hình như là z[j] chứ không phải a[j] ,xem lại bạn nhé !!
    thank nhìu
  3. Offline

    LieuKyThien

    • Thành Viên Mới

    Số bài viết:
    79
    Đã được thích:
    49
    Điểm thành tích:
    0
    hê hê!!! cảm ơn nhiều nhá. Nếu bạn mà không phát hiện ra thì chắc mình "tiu" quá
  4. Offline

    sunboy

    • Thành viên sáng lập

    • No thing
    Số bài viết:
    1.616
    Đã được thích:
    1.340
    Điểm thành tích:
    1.000
    Chú này thật ,nói phải đi đôi với làm chứ ,nói cảm ơn thì phải click... chứ :D
  5. Offline

    kinhdangmanh

    • Thành Viên Mới

    Số bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    0


    Bảo bạn còn sai! đéo đỡ nổi max=(max>a[j])?max:a[j]; lấy đâu ra cái này đây trong bài thằng kia ko có đâu!! Bản gốc nó ghi là
    PHP:

    int ln
    (int h[][max],int n)
    {
        
    int lonnhat;
        for(
    int i=0;i<n;i++)
              
    lonnhat=(lonnhat>h[i][j])?lonnhat:h[i][j];
        return 
    lonnhat;
    }

    Thêm vong lặp for : for(int j=0;j<n;j++) là được, @sunboy: trước khi comment lên coi kỹ nhá!!

    PHP:


    int ln
    (int h[][max],int n)
    {
        
    int lonnhat=h[0][0];
        for(
    int i=0;i<n;i++)
        {
            for(
    int j=0;j<n;j++)
          {

          
    //C1: lonnhat=(lonnhat>h[i][j])?lonnhat:h[i][j];

             //C2:
             
    if(lonnhat<h[i][j])
             {
                 
    lonnhat=h[i][j];
             }
          }
        }
        
    printf("Max cua ma tran Moi la: %d",lonnhat);
        return 
    0;
    }
    Dám chắc ko phải anh bạn làm bài này, thấy nó nói thế mà ko biết xem lại để bảo, đến tận hôm " getdate() " tao phải comment lại!!

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí