Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Tính tổng các số hoàn thiện trong ma trận

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    54

    Post Tính tổng các số hoàn thiện trong ma trận

    code :
    Code:
    /* viet ham tinh tong cac so hoan thien trong ma tran */
    # include<stdio.h>
    # include<conio.h>
    void nhap(int A[10][10],int d, int c)
     {
    	 for (int i=0;i<d;i++)
    		  for (int j=0;j<c;j++)
    		  {	  printf ("\n Nhap A[%d][%d]:",i,j);
    				  scanf ("%d",&A[i][j]);
    		  }
    
     }
    int tong(int A[][10],int d,int c)
     {     int s=0;
    	for (int i=0;i<d;i++)
    		 for (int j=0;j<c;j++)
    			  if (kt_hoan_thien(A[i][j]))
    			  s+=A[i][j];
    			  return s;
     }
    int kt_hoan_thien(int n)
     {
    	 int s=0;
    	 for (int i=1;i<n;i++)
    			if (n%i==0)
    			s+=i;
    			if (n==s)
    				  return 1;
    			else return 0;
     }
     void main()
     {   int A[10][10],d,c;
    	 printf ("\n nhap so dong :");
    	 scanf ("%d",&d);
    	 printf ("\n nhap so cot :");
    	 scanf ("%d",&c);
    	 if ((d>10)||(c>10))
    			return ;
    	 nhap(A,d,c);
    	 printf ("\n tong cac so hoan thien trong ma tran : %d",tong(A,d,c));
    	 getch();
     }
    sửa giúp mình với nó báo lỗi hình như ở chỗ gọi hàm kt_hoan_thien của mình
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    có 2 cách bạn sửa:

    cách 1: khuyến khích làm

    khai báo prototype: khai báo những cái này dưới các câu include
    C Code:
    1.  
    2. void nhap(int A[10][10],int d, int c);
    3. int tong(int A[][10],int d,int c);
    4. int kt_hoan_thien(int n);

    cách 2: mang hàm KT_hoan_thien đặt trên hàm tong.
    vậy là xong.

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    54

    Tuy program run rồi nhưng anh có thể giải thích em hiểu rõ hơn 2 cách sửa của anh được ko .
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  4. #4
    Ngày gia nhập
    09 2007
    Bài viết
    724

    ok.
    thế này nhé.
    bạn coi thử đoạn chương trình sau nó có run không.
    C Code:
    1. void main(){
    2. int a;
    3. a = b;
    4. }
    5. in b;
    6. void function01()
    7. {
    8.   b = 1;
    9. }

    tất nhiên là nó không chạy phải không bạn. tại vì khi dịch chương trình thì nó sẽ dịch từ trên xuống dưới. nếu bạn dùng cái nào mà chưa khai báo thì nó sẽ "la làng" lên ngay.

    cái này xét về phương diện hàm nó cũng như vậy. tức bạn muốn dùng nó thì bạn phải khai báo nó trước. rồi mới dùng nó.

    với cách thứ 1: người ta gọi là khai báo prototype(kiểu mẩu), cái này y như bạn nói với trình biên dịch biết có những hàm như vậy, sau đó bạn chỉ nó ra là nó làm như thế nào sau.
    với cách thứ 2 thì nó sẽ chạy vì bạn đặt khai báo hàm lên trên bạn dùng nó vậy.

    nói dài dòng như vậy thôi chứ lấy ví dụ ngoài đời như này:

    khi bạn mới mua xe honda mới(mới viết một program) nếu bạn chưa đi đăng ký bảng số(chưa khai báo hàm/biến) thì bạn có dám chạy ra ngoài đường không?(cái này nếu bạn lỳ thì có thể dám[cách thứ 2] nhưng để không phạm luật thì bạn phải tránh công an bằng cách đặt xe bạn lên trên xe công an ""), nếu không khi gặp các "chú áo vàng" thì bạn sẽ bị thổi còi ngay() lý do làm sao thì bạn biết rồi đó. . nên cách tốt nhất thì nên đi khai báo với công an. :::

    lấy ví dụ hơi chuối 1 tý nhưng mình nghĩ bạn sẽ dể hiểu hơn nếu đọc cái này.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 18-08-2008 lúc 12:09 AM.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi thangit Xem bài viết
    code :
    Code:
    /* viet ham tinh tong cac so hoan thien trong ma tran */
    # include<stdio.h>
    # include<conio.h>
    void nhap(int A[10][10],int d, int c)
     {
    	 for (int i=0;i<d;i++)
    		  for (int j=0;j<c;j++)
    		  {	  printf ("\n Nhap A[%d][%d]:",i,j);
    				  scanf ("%d",&A[i][j]);
    		  }
    
     }
    int tong(int A[][10],int d,int c)
     {     int s=0;
    	for (int i=0;i<d;i++)
    		 for (int j=0;j<c;j++)
    			  if (kt_hoan_thien(A[i][j]))
    			  s+=A[i][j];
    			  return s;
     }
    int kt_hoan_thien(int n)
     {
    	 int s=0;
    	 for (int i=1;i<n;i++)
    			if (n%i==0)
    			s+=i;
    			if (n==s)
    				  return 1;
    			else return 0;
     }
     void main()
     {   int A[10][10],d,c;
    	 printf ("\n nhap so dong :");
    	 scanf ("%d",&d);
    	 printf ("\n nhap so cot :");
    	 scanf ("%d",&c);
    	 if ((d>10)||(c>10))
    			return ;
    	 nhap(A,d,c);
    	 printf ("\n tong cac so hoan thien trong ma tran : %d",tong(A,d,c));
    	 getch();
     }
    sửa giúp mình với nó báo lỗi hình như ở chỗ gọi hàm kt_hoan_thien của mình


    Bạn có thể mở sách đọc tầm tác dụng của biến và hàm.

    hàm kiểm tra được khai báo sau hàm tong.... vì thế trong hàm tổng ko thể gọi được hàm kiểm tra.
    Để khắc phục điều này :
    Cách 1 theo zkday2686 nói là bạn nên đăng kí protoype ( nguyên mẫu của hàm ) của hàm kiểm tra trước vị trí gọi nó

    Cách 2 : Xắp xếp lại thứ tự các hàm . đưa hàm kiểm tra lên trên
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    54

    Mặc định Tính tổng các số hoàn thiện trong ma trận

    hàm kiểm tra được khai báo sau hàm tong.... vì thế trong hàm tổng ko thể gọi được hàm kiểm tra.
    Theo em thì chương trình bắt đầu run từ main() vì vậy không liên quan gì đến việc khai báo cái nào trước ,cái nào sau . chương trình dịch từ đầu hàm main đến câu lệnh printf ("\n tong cac so hoan thien trong ma tran : %d",tong(A,d,c));
    Giúp em hiểu rõ cái này với
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    đúng là chương trình được dịch từ hàm main(). và nguyên tắc của C hay bất kỳ một ngôn ngữ nào khác. cũng như các biến số thì các hàm cũng phải được khai báo trước khi sử dụng.
    vì chương trình của bạn được dịch từ hàm main. nhưng nó dịch từ vị trí hàm hiện hành lên trên. còn nếu bên dưới thì "nó ko biết" và chắc chắn là error.

Các đề tài tương tự

  1. Trả lời: 8
    Bài viết cuối: 17-02-2017, 11:06 AM
  2. Thu hồi SIM trả trước quá hạn không kích hoạt, khách hàng thiệt?
    Gửi bởi simdep2013 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 23-11-2011, 10:16 AM
  3. Thu hồi SIM trả trước quá hạn không kích hoạt, khách hàng thiệt?
    Gửi bởi thanhhung2013 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 12-11-2011, 09:26 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn