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

Đề tài: Vấn đề với ciệc tính số e

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    1

    Mặc định Vấn đề với ciệc tính số e

    Mình mới viết ct tính số e . Đúng như thuật toán nhưng ma sao toàn ra e=2 . Các bạn xem giúp mình đoạn code

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    unsigned int gt(int n)
     {
      int i;
      unsigned int a=1;
      for (i=1;i<=n;i++)
      a*=i;
      return (a);
     }
    main ()
     {
      float epsilon,e;
      int i;
      e=1;
      i=1;
      printf("\n Nhap vao so epsilon de kiem tra : ");
      scanf("%f",&epsilon);
      do
    	{
    	  e+=1/gt(i);
    	  i++;
    	}
      while((1/gt(i))>epsilon);
      printf("\n e = %f",e);
      getch();
      }

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Thuật toán của bạn là đúng rồi chỉ có điều sai ở một chỗ mà thôi . Ở chỗ bạn gán e+=1/gt(i) bạn nghĩ sao đầu tiên chương trình dịch tính vế phải câu lệnh đó hì hì chỗ sai ở đấy đấy . 1/gt(i) =0 bởi vì đây là chia lấy phần nguyên muốn có giá trị chính xác phép toán này bạn phải ép kiểu hay đơn giản đổi 1(kiểu nguyên) thành 1.0(kiểu số dấu phẩy động là được) . OK chương trình chạy ngon lành . Bạn nên để hàm gt có kiểu long khi đó sẽ tính được e với độ chính xác cao hơn .
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    unsigned int gt(int n) //nên đổi thành unsigned long
     {
      int i;
      unsigned int a=1;
      for (i=1;i<=n;i++)
      a*=i;
      return (a);
     }
    main ()
     {
      float epsilon,e;
      int i;
      e=1;
      i=1;
      printf("\n Nhap vao so epsilon de kiem tra : ");
      scanf("%f",&epsilon);
      do
    	{
    	  e+=1.0/gt(i);//đổi 1 thành 1.0 là kiểu dấu phẩy động
    	  i++;
    	}
      while((1/gt(i))>epsilon);
      printf("\n e = %f",e);
      getch();
    }
    Bạn có thể xem kĩ lại về cách chuyển kiểu trong các biểu thức C để hiểu rõ hơn .
    Đã được chỉnh sửa lần cuối bởi trung_dk070384 : 08-11-2008 lúc 10:14 PM.
    I'm superman

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    1

    Ủa , vẫn ra kết quả e=2 mà :-??
    Bạn trung_dk070384 có Ym ko trao đổi tí

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Ym mình như trên đấy trung_dk070384 còn bạn bảo vẫn ra e=2 có lẽ là do bạn nhập epsilon lớn quá . epsilon nhập bé thôi khoảng 10 mũ trừ mấy là được chứ to quá dĩ nhiên ra e luôn bằng 2 .
    I'm superman

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

    Không chịu hiểu về các biến mà đi lập trình rùi, phải học tuần tự chứ bạn

    kiểu unsigned int là một kiểu số nguyên không dấu, bạn làm như vậy nó trả về kiểu số nguyên không dấu thì ra 2 là đúng rùi.
    Chuyển sang float hay double gì đó là kết quả ra đúng mà bạn thử xem sao.
    C Code:
    1. float gt(int n)


    ps:trung_dk070384 bỏ code vào tag code nhé bạn

  6. #6
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Mặc định Vấn đề với ciệc tính số e

    OK sorry nãy quên không bỏ vào tag Code .
    I'm superman

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

    Trích dẫn Nguyên bản được gửi bởi zkday2686 Xem bài viết
    Không chịu hiểu về các biến mà đi lập trình rùi, phải học tuần tự chứ bạn

    kiểu unsigned int là một kiểu số nguyên không dấu, bạn làm như vậy nó trả về kiểu số nguyên không dấu thì ra 2 là đúng rùi.
    Chuyển sang float hay double gì đó là kết quả ra đúng mà bạn thử xem sao.


    Ngại quá , toàn bị nhầm cái này :">

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