Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Tính TBC các phần tử của M.Trận B từ các số cho trước trong M.trận A

    mình có 1 bài như thế này .
    Nhập vào ma trận vuông A 3 dòng 3 cột trên file

    1 2 2
    2 3 1
    4 3 2

    Yêu cầu xuất ra Ma trận B:
    2.3 1.8 2.0

    2.6 2.1 2.4

    2.6 2.4 2.3

    nôm na như sau:
    B[1][1] = ( A[1][2] + A[2][1]+ A[2][2] ) / 3
    tương tự với B[1][3] ,B[3][1] ,B[3][3] .

    B[1][2] = ( A[1][1] + A[1][3] + A[2][1] + A[2][2] +A[2][3] )/5 .
    tương tự với B[2][1] ,B[2][3] ,B[3][2] .

    B[2][2] = trung bình công các số xung quanh trong A.


    mình làm thế này .hơi thụ động :d
    Mã:
    int i ,j;
    	float tong;
    	for( i = 1; i<=n ;i++)
    	{
    		for( j =1; j<=n; j++)
    		{
    			if((i==1 &&(j==1 || j==3)) || (i==3 &&(j==1 || j==3)))
    			{  
    			   //dem = 3;
    			   tong = (a[i][j-1]+a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i+1][j-1]
    			   +a[i][j+1]+a[i+1][j] + a[i+1][j+1])/3 ;
    			   
    			}
    			if((j==2 &&(i==1 || i==3)) || (i==2 &&(j==1 || j==3)))
    			{
    				//dem = 5;
    				tong = (a[i][j-1]+a[i-1][j+2]+a[i-1][j]+a[i-1][j+1]+a[i][j+1]
    			   +a[i+1][j]+a[i+1][j+1] + a[i+1][j+2])/5 ;
    			}
                if(i==2 && j==2)
                {
                    //dem = 8 ; 
                    tong = (a[i][j]+a[i][j+1]+a[i][j+2]+a[i+1][j]
    			   +a[i+1][j+2]+a[i+2][j] + a[i+2][j+1]+a[i+2][j+2])/8 ;
                }
                
    		}
    		printf("
    ");
    	}
    	return tong*1.0;
    	 
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Sax. Bài này cho trước cái công thức đó rồi thì vào cứ thế mà làm thôi chứ giải thuật gì nữa ?
    Cứ viết rợ ra cho đủ 9 cái như thế đi nhé

    Đề bảo cho ma trận 3 3 chứ có cho ma trận n n đâu mà giải với thuật

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ngoc_le_iu_iu
    mình có 1 bài như thế này .
    Nhập vào ma trận vuông A 3 dòng 3 cột trên file

    1 2 2
    2 3 1
    4 3 2

    Yêu cầu xuất ra Ma trận B:
    2.3 1.8 2.0

    2.6 2.1 2.4

    2.6 2.4 2.3

    nôm na như sau:
    B[1][1] = ( A[1][2] + A[2][1]+ A[2][2] ) / 3
    tương tự với B[1][3] ,B[3][1] ,B[3][3] .

    B[1][2] = ( A[1][1] + A[1][3] + A[2][1] + A[2][2] +A[2][3] )/5 .
    tương tự với B[2][1] ,B[2][3] ,B[3][2] .

    B[2][2] = trung bình công các số xung quanh trong A.
    Đây là hàm tính trung bình do mình viết bạn góp ý nhé

    Mã:
    float average(int a[][],int i,int j)
    {
    	float aver=0;
    	int n=0;
    	if(i+1<maxi){
    		aver+=a[i+1][j];
    		n++;	
    	}
    	
    	if(j+1<maxj){
    		aver+=a[i][j+1];
    		n++;	
    	}
    	
    	if(j+1<maxj && i+1<maxi){
    		aver+=a[i+1][j+1];
    		n++;
    	}
    	
    	if(i-1>-1){
    		aver+=a[i-1][j];
    		n++;	
    	}
    	
    	if(j-1>-1){
    		aver+=a[i][j-1];
    		n++;	
    	}
    	
    	if(j-1<-1 && i-1<-1){
    		aver+=a[i-1][j-1];
    		n++;
    	}
    	
    	aver/=n;
    	return aver;	
    }

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi clchicken
    Sax. Bài này cho trước cái công thức đó rồi thì vào cứ thế mà làm thôi chứ giải thuật gì nữa ?
    Cứ viết rợ ra cho đủ 9 cái như thế đi nhé

    Đề bảo cho ma trận 3 3 chứ có cho ma trận n n đâu mà giải với thuật
    Cái phần tô đỏ đó;
    [IMG]images/smilies/thinking.gif[/IMG] tui không phải người giỏi giải thuật nhưng củng khuyên bác đừng tỏ vẻ ta đây .Bác k giúp tui củng có người khác giúp.tui chỉ muốn tìm lời giải tối ưu cho bài này thôi.chứ nói như bác thì ai làm chả được.nhập ma trận 4*4 bác thử số 9 của bác đi nhé/

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nlhuykhang
    Đây là hàm tính trung bình do mình viết bạn góp ý nhé

    Mã:
    float average(int a[][],int i,int j)
    {
    	float aver=0;
    	int n=0;
    	if(i+1<maxi){
    		aver+=a[i+1][j];
    		n++;	
    	}
    	
    	if(j+1<maxj){
    		aver+=a[i][j+1];
    		n++;	
    	}
    	
    	if(j+1<maxj && i+1<maxi){
    		aver+=a[i+1][j+1];
    		n++;
    	}
    	
    	if(i-1>-1){
    		aver+=a[i-1][j];
    		n++;	
    	}
    	
    	if(j-1>-1){
    		aver+=a[i][j-1];
    		n++;	
    	}
    	
    	if(j-1<-1 && i-1<-1){
    		aver+=a[i-1][j-1];
    		n++;
    	}
    	
    	aver/=n;
    	return aver;	
    }
    thanks bạn. cuối cùng mình củng mò ra[IMG]images/smilies/biggrin.png[/IMG]
    Mã:
     
    	float Kq = 0;
    	int dem = 0;
    	for(int x = 1  ;x<=n ; x++)
    		for(int y = 1; y<=n ; y++)
    			if(abs(x-i)<= 1 && abs(y-j)<= 1)
    			{
    				Kq+= a[x][y];
    				dem++;
    			}
    	
    	return (Kq-a[i][j])/(dem-1);
    theo mình hiểu thì cho x y chạy hết mảng.
    như i = 0, j = 0 ;
    ta được 4 phần tử a[0][0] a[1][0] a[0][1] a[1][1]
    return - đi cho 1 là a[0][0]
    cách này thử được với a[4][4] luôn [IMG]images/smilies/biggrin.png[/IMG] thanks tất cả đã góp ý [IMG]images/smilies/clap_grin.gif[/IMG]

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    [IMG]images/smilies/thinking.gif[/IMG] Viết 9 cái cũng đc đấy;
    khổ thân clchicken[IMG]images/smilies/laughing.gif[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •