-
14-05-2014, 10:43 AM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Chương trình tính sin x của mình này sai ở đâu các bạn nhỉ ?
Như tít ạ, đây là 2 code của mình viết để tính sin x, nhưng kết quả đều ra sai. Mình trình non chưa hiểu tại sao, bạn nào biết chỉ ra hộ mình lỗi sai để sửa với ạ, cảm ơn nhiều [IMG]images/smilies/kiss.gif[/IMG]
Đây là bài sử dụng hàm ạ
Mã:#include <stdio.h>#include <conio.h>#include <math.h>float giaithua(float k);float somu(float x, float y); main(){ clrscr(); float x,s=0,i,t,n=0; printf("Nhap so x:"); scanf("%f",&x); t=0; while (t<=0.0001) { i=2*n+1; s=s+pow(-1,n)*(somu(x,i)/giaithua(i)); t=(x*n)/giaithua(n); n=n+1; } printf("sin (%.0f) = %.2f ",x,s); getch();} float giaithua(float k){ float i,s=1; for (i=1; i<=k; i++) s=s*i; return s;} float somu(float x, float y){ float i,s=1; for (i=1; i<=y; i++) s=s*x; return s;}
Mã:#include <stdio.h>#include <conio.h>#include <math.h>main(){ int n=1,x,i; unsigned long giaithua,somu; float t=0,sinx; clrscr(); printf("Nhap x:"); scanf("%d",&x); do { giaithua=1; somu=x; for (i=1; i<=(2*n+1); i++) { giaithua=giaithua*i; somu=somu*x; } sinx=sinx+pow(-1,n)*(somu/giaithua); n=n+1; giaithua=1; for (i=1;i<=n;i++) giaithua=giaithua*i; t=(x*n)/giaithua; } while (t>0.0001); printf("sin (%d) = %f",x,sinx); getch();}
View more random threads:
- Nhập Xuât Ma Trận, Sửa lỗi giúp mình?
- cách ghi text file trong C
- Ghép 2 xâu không cần strcat()
- thêm dùm em cách tính tổng số nguyên tố
- Các vấn đề Liên quan đến Thuật Toán QHD
- Bài tập về mảng
- ý tưởng bài này là gì nhỉ? ai chi dược không
- Chữa code dùm e. Đề bài là nhập vào số tiền vốn, khoảng tiền lãi sau mỗi tháng và số tháng, tính và in ra số tiền này!
- Quản lý menu, viết chương trình tổng hợp
- [Solved] Đệ quy, quay lui
-
14-05-2014, 11:20 AM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bài trên nhầm dấu chỗ while rồi.
-
14-05-2014, 02:32 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi prog10
Cảm ơn bạn !
-
14-05-2014, 04:36 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bạn có thế tham khảo code này để tự tìm ra lỗi của mình nhé.
Mã:#include <stdio.h>#include <stdlib.h>int main(){ double sinx, temp, x; // x tinh theo radian int i = 0; scanf("%lf", &x); sinx = temp = x; while (temp > 0.000001 || temp < -0.000001) // lam tron den 5 so thap phan { i++; temp = temp*x/(2*i+1)*x/(2*i); // x^(2i+1)/(2i+1)! if (i%2==0) sinx = sinx + temp; else sinx = sinx - temp; } printf("%.5f",sinx); return 0;}
-
14-05-2014, 06:26 PM #5
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi HieuApp
temp = temp*x/(2*i+1)*x/(2*i); // x^(2i+1)/(2i+1)!
là làm sao nó tính được ra x^(2i+1)/(2i+1)! thế bạn nhỉ ?
bạn có thể nói là mình sai ở phần nào ko, vì mình vẫn chưa nhìn ra thấy sai ở đâu cả(
-
15-05-2014, 11:28 AM #6
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
sai ở cái điều kiện vòng while, phải là while (t >= 0.0001)
tại sao trong code kia t phải <= 0.0001?
đừng đặt tên biến 1 chữ, ko hiểu t là cái gì ở đây?
Ta hiểu t là giá trị chênh lệch giữa biến cũ và biến mới, khi bé hơn 0.0001 thì dừng vòng lặp. Vậy điều kiện để chạy vòng lặp là (trị tuyệt đối của t) > 0.0001. Nhưng tại sao t=(x*n)/giaithua(n); ??
nếu thích hiểu theo kiểu delta < 0.0001 thì dừng thì xài while(1), và t phải tính là somu(x,i)/giaithua(i)
Mã:int n = 0; //sửa lại type của n là intint i = 1; //sửa lại type của n là intfloat delta;float s = 0; while (1){ delta = pow(x, i) / giaithua(i); //khỏi cần hàm somu nếu đã xài pow() s += pow(-1, n) * delta; // s += ... có nghĩa là s = s + ... if (delta <= 0.0001) break; ++n; //xài toán tử ++ để tránh phải tính n+1 i += 2; //tránh phải xài phép nhân}
cách tối ưu hơn là ko cần tính giaithua(), ko cần pow(x,i)
Mã:float xx = x*x;float delta = x;float s = x;int i = 1;int sign = 1; while (1){ i += 2; sign *= -1; delta *= xx / (i * (i-1)); s += sign * delta; if (delta <= 0.0001) break; }
NGUỒN SỈ ÁO KHOÁC DENIM NỮ TPHCM CHẤT LƯỢNG CAO Bạn muốn nhập sỉ áo khoác denim nữ để bắt đầu việc buôn bán Online phong cách nhưng lại chưa có kinh nghiệm, muốn sắm xưởng sỉ xống áo vừa có thể giải...
Xưởng sỉ áo khoác jeans denim giá...