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

Đề tài: Tính tổng Sin

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Tính tổng Sin

    Bài toán:
    Tính tổng: S=sinx+(sinx+sin2x)+....+(sinx+..+sinnx)
    Đây là code mình làm.Không biết nó sai chỗ nào nhưng không ra kết quả.
    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <math.h>
    4.  
    5. int main()
    6. {
    7.   int n,i,x;
    8.   double S=0;
    9.     printf("Nhap n:");
    10.     scanf("%d",&n);
    11.  
    12.      printf("\nNhap x:");
    13.      scanf("%d",&x);
    14.  
    15.       for(i=1;i<=n;i++)
    16.        {
    17.          S=S+sin(i*x);
    18.           while(i>1)
    19.            {
    20.                i=i-1;
    21.                 S=S+sin(i*x);
    22.            }
    23.        }
    24.      printf("\nTong S:%ld",S);
    25.  
    26. }

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình cũng chưa hiểu rõ ý bạn nữa, bạn thử code này xem đúng ý bạn ko :

    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <math.h>
    4.  
    5. int main()
    6. {
    7.     int n,i,x;
    8.     double S = 0.0;
    9.     double s2 = 0.0;
    10.    
    11.     printf("Nhap n:");
    12.     scanf("%d",&n);
    13.  
    14.     printf("\nNhap x:");
    15.     scanf("%d",&x);
    16.  
    17.     for(i=1;i<=n;i++)
    18.     {
    19.         s2 = 0.0;
    20.         for (int j=1;j<=i;j++)
    21.         {
    22.             s2 += sin((double)j * x);
    23.         }
    24.        
    25.         S = S + s2;
    26.     }
    27.    
    28.     printf("\nTong S:%ld",S);
    29. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    C Code:
    1.       for(i=1;i<=n;i++)
    2.        {
    3.          S=S+sin(i*x);
    4.           while(i>1)
    5.            {
    6.                i=i-1;
    7.                 S=S+sin(i*x);
    8.            }
    9.        }
    Chưa chạy thử nhưng cứ tăng i rồi giảm i như này không hay lắm. Chỉ cần bạn dùng thêm một S1 phụ, độ phức tạp sẽ giảm đáng kể. Sửa bài mèo con phát.
    Code:
        for(i=1;i<=n;i++)
        {
                s2 += sin((double)i * x);
                S = S + s2;
        }
    *Không biết đúng ý bạn chưa.

    @Kegiaumat055: Lâu lắm mới thấy em lên diễn đàn.

  4. #4
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Tại sao sin này là vậy.Sin (90) =1 mà tại sao sin (90) trong bài này lại không như vậy

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

    Một cái là tính theo độ gì đó ko nhớ cái của thư viện math là tính theo radian (ko biết type đúng ko (:p)). (mở sách toán 12 ra là có: )
    180 độ = PI.

  6. #6
    Ngày gia nhập
    02 2008
    Bài viết
    15

    Mặc định Tính tổng Sin

    // Theo mình có thể phân tích bài toán đơn giản như sau
    dùng đệ quy viết 1 hàm Sn

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    double S(int n,float x)
    {
      while(n>0)
      { S = S(n-1,x) + sin(x) + sin (n*x);}
      return (S);
    }
    double  main ()
    {
        int n;
       float x;
       printf("nhập vào số n và x");
       scanf("%d%f",n,x);
       S(n,x);
       printf("%lf",S);
       getch();
    }
    Đã được chỉnh sửa lần cuối bởi ledinhtung61 : 15-11-2008 lúc 01:08 AM.

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

    Biến i bạn dùng làm biến chạy trong vòng for rồi lại còn dùng trong vòng lặp while nữa mà sau vòng lặp này i trở lại bằng 1:
    C Code:
    1.      while(i>1)
    2.      {
    3.             i=i-1;
    4.             S=S+sin(i*x);
    5.      }
    Hệ quả là vòng for bị lặp vô hạn . Chỉ cần sửa thêm một biến mới vào là được .
    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <math.h>
    4. int main() {
    5.     int n,i,x,j;/* Thêm j vào */
    6.     double S=0.0;
    7.     printf("Nhap n:");
    8.     scanf("%d",&n);
    9.  
    10.     printf("\nNhap x:");
    11.     scanf("%d",&x);
    12.  
    13.     for(i=1;i<=n;i++) {
    14.          for (j=1;j<=i;++j)
    15.               S=S+sin(j*x*M_PI/180);
    16.     }
    17.     printf("\nTong S:%lf",S);/* Thay %ld bằng %lf tại vì S kiểu double */
    18. }
    Các hàm lượng giác thao tác trên radian chứ không phải độ nên muốn nhập vào kiểu độ cậu phải chuyển về radian như mình làm ở trên : với x độ tương đương với x*M_PI/180 radian .
    I'm superman

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