Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Tính tổng T=1!/1!+(1!+2!)/2!+(1!+2!+3!)/3!+....+(1!+2!+3!+...+n!)/n!

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

    Unhappy Tính tổng T=1!/1!+(1!+2!)/2!+(1!+2!+3!)/3!+....+(1!+2!+3!+...+n!)/n!

    Code:
    #include<stdio.h>
    #include<conio.h>
    int gt(int n)
    {
    int i,gt=1;
    for(i=1;i<=n;i++)
    gt*=i;
    return gt;
    }
    main()
    {
    int i,tu=0,n,mau;
    float tong;
    clrscr();
    printf("nhap n:\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
    tu+=gt(i);
    mau=gt(i);
    tong+=float( tu/mau);
    }
    printf("\nTong la %f",tong);
    getch();
    }
    Chương trình chạy nhưng mà ra kết quả không đúng.Bạn nào chỉ mình chỗ sai với:((

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    78

    - bạn sai ở chỗ:
    Code:
     tong+=float( tu/mau);
    - mình hiểu ý bạn có nghĩa là bạn muốn kết quả trả ra phải là số thực (ko phải chia nguyên) chứ jì phải hok bạn.
    - Mình phân tích cái sai dùm bạn nhé:theo độ ưu tiên thì nó sẽ chia tử cho mẫu trước...tức là chia hai số nguyên cho nhau => kết quả là số nguyên..Sau đó nó mới ép kiểu qua số thực..Như thế chẳng khác nào vẫn là chia nguyên.
    Ví dụ:
    Code:
    tu = 2;
     mau = 1;
     tu/mau = 2 //chia nguyen;
     float (tu/mau) = 2.0000000;
    - Thế thì mình sửa lại như sau nhé...mình ép kiểu tử trước sau đó mới chia cho mẫu
    + có 2 cách:
    Code:
     tong+=float( tu)/mau;
    Or :
    Code:
     tong+=1.0*tu/mau;
    - Còn sau đây xin bàn về thuật toán của bạn tí xíu nha...
    + bài của bạn...bạn đã biết lợi dụng kết quả trước mà tính kết quả sau cho nhanh là tốt...Nhưng còn có thể cài tiến hơn nữa là ko cần dùng hàm tính giai thừa luôn...Xem ví dụ bạn nhé...

    C Code:
    1. #include<stdio.h>
    2. void main()
    3. {
    4.  int i,tu=0,n,mau=1;
    5.  int gt=1; //bien nay thay cho ham tinh giai thua
    6.  float tong=0;
    7.  printf("nhap n:\n");
    8.  scanf("%d",&n);
    9.  for(i=1;i<=n;i++)
    10.  {
    11.     gt=gt*i;
    12.     tu+=gt;
    13.     mau=mau*i;
    14.     tong += float(tu)/mau;
    15.  }
    16.  printf("\nTong la %f",tong);
    17. }

    - Lưu ý:khi bạn code...nên phân cấp các câu lệnh, thụt vô thụt ra sao cho đẹp mắt tí xíu nhé.Như vậy sẽ dễ quan sát + test dễ hơn...
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 22-03-2008 lúc 09:34 PM.
    No way, No success..

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

    Bạn có thể giải thích cho mình quy tắc đặt dấu ngoặc đơn"()",sao không đặt
    Code:
    tong+=float(tu/mau)
    ma lại đặt là
    Code:
    tong+=float(tu)/mau

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    57

    Câu lệnh :
    C++ Code:
    1. tong += float(tu/mau)
    có nghĩa là bạn này lấy " tu/mau " trước rồi mới ép kiểu nó thành số thực và gán kết quả đó cho biến " tong ".
    Khi đó ta thấy "tu" và "mau" đều là số nguyên nên khi chia cho nhau nó sẽ lấy kết quả là phần nguyên trong phép chia rồi mới ép thành số thực dẫn đến kết quả sai.
    Ví dụ:
    float(5/2) = 2.00000
    vì 5/2 = 2.5 . lấy phần nguyên là 2 . ép thành số thực là 2.0000

    còn câu lệnh:
    C++ Code:
    1. tong += float(tu)/mau
    trước khi chia " tu "cho " mau " thì nó sẽ ép kiểu " tu " thành số thực rồi mới chia cho " mau ". do đó ta sẽ có kết quả là một số thực.
    Ví dụ:
    float(5)/2 = 2.5
    trước khi chia . số 5 được ép kiểu thành số thực có giá trị là 5.00000. rồi chia cho 2 thì khi đó một số thực chia 1 số nguyên sẽ cho kết quả là 1 số thực
    Do đó : 5.00000/2 = 2.5

    Đã được chỉnh sửa lần cuối bởi thanhluan07 : 23-03-2008 lúc 12:00 PM.

  5. #5
    Ngày gia nhập
    01 2008
    Bài viết
    22

    Bạn thanhluan giải thích dễ hiểu lắm
    Không dùng hàm,tính tổng:
    T=1!+(1+2)!+....+(1+2+...+n)!
    Bạn nào giúp mình với
    Đã được chỉnh sửa lần cuối bởi atiso : 23-03-2008 lúc 12:16 PM.

  6. #6
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Mặc định Tính tổng T=1!/1!+(1!+2!)/2!+(1!+2!+3!)/3!+....+(1!+2!+3!+...+n!)/n!

    Trích dẫn Nguyên bản được gửi bởi atiso Xem bài viết
    Không dùng hàm,tính tổng:
    T=1!+(1+2)!+....+(1+2+...+n)!
    Bạn nào giúp mình với
    C++ Code:
    1. int _temp=0;
    2. unsign _total=0;
    3. for(int index=1 ; index <= n ; index++ )
    4. {
    5.       _temp+=index;
    6.       _total+=Giai_Thua(_temp);
    7. }
    ^0^
    Nhầm, chưa đọc kỹ yêu cầu.
    Không dùng hàm có nghĩa sao đây?
    Nói cụ thể hơn coi.
    (viết luôn tính giai thừa trong đoạn for có coi là dùng hàm không?)
    Đã được chỉnh sửa lần cuối bởi NT_OnlyLove : 23-03-2008 lúc 12:21 PM. Lý do: chưa đọc kỹ yêu cầu
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    Nghĩa là mình chỉ dủng:
    Code:
    main()
    {
    ...
    }

  8. #8
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Coi cái này được chưa bạn.
    C++ Code:
    1. int _temp=0;
    2. unsigned _temp1=1;
    3. unsigned _total=0;
    4. for(int _index=1 ; _index <= n ; _index++ )
    5. {
    6.       for(int i=_temp;i<= _index + _temp;i++)
    7.             _temp1*= i ;
    8.       _temp+=index;
    9.       _total+=_temp1;
    10. }
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    57

    Đoạn code đ ề nghị
    C Code:
    1. void main()
    2. {
    3.     int n;
    4.     printf("Nhap n: ");
    5.     scanf("%d",&n);
    6.     int S , T , Kq;
    7.     S = 0;
    8.     Kq = 0;
    9.  
    10.     for(int i=1; i<= n ;i++)
    11.     {
    12.         S += i;
    13.         T = 1;
    14.         for(int j =1; j<= S ; j++)
    15.             T *= j;
    16.         Kq += T;
    17.     }
    18.     printf("Ket qua la: %ld",Kq);
    19. }

    Hic hic mình làm nhầm đề bài rùi
    Đã được chỉnh sửa lần cuối bởi thanhluan07 : 23-03-2008 lúc 04:20 PM.

  10. #10
    Ngày gia nhập
    01 2008
    Bài viết
    22

    Bạn cho mình hỏi kết quả cuối cùng mình khai báo kiểu gì?Vì nếu khai báo là kiểu "double" thì khi n>=4,kết quả sẽ bị tràn!

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