làm thế nào để có thể tự học c hiệu quả nhất ạ?
Tự học code c tại nhà
Không biết tính toán có đúng không. Nhưng nhìn sơ qua là thấy mỗi đầu vòng lặp gán kq=0;
là sai chắc luôn.
Đề yêu cầu viết hàm fen()
, nhưng bạn lại viết trực tiếp trong main()
không đúng yêu cầu đề rồi.
Bạn đặt hệ thức truy hồi sai rồi
Với lại chỉ reset một lần duy nhất trước khi vào vòng lặp thôi. Và chỉ nên dùng double
.
mình mới học cái này, tìm đc cái đề nhưng k có đáp án. nên có chút k biết phải làm sao. bạn có thể code chỉ ra phần sai đc k ạ . Mình ngu lâu dốt bền quá mà
tại mình mới học nhiều cái vẫn k phân biệt nổi.
Mình hộ bạn hàm tính sum nhé :))
double cal(double x, double y, int n)
{
double u;
double kq = x;
int count = 1;
for(int i=1;count<=n+1;i+=2)
{
if(count%2!=0)
u= ( pow(x,i+1)*pow(y,i) ) / giaiThua(i);
else
u =-( pow(x,i+1)*pow(y,i) )/ giaiThua(i);
count++;
kq+=u;
}
return kq;
}
Hàm của b gán kq = 0 trong vòng for là sai r, vì mỗi lần lặp thì k lại về giá trị 0 ==>> gán k bên ngoài. Còn phần tình tử số của b cũng sai vì phương trình đổi xấu xen kẽ nhau. Bạn xem thêm phần code mình mới gửi nhá :3
có thể tính gt bằng cách … trong hàm
int gt = 1;
trong vòng for trên if …ghi như này đc k ạ?
gt= gt*i*(i-1);
nó có chạy giai thừa như hình k ạ?
Phải viết hàm tính giai thừa riêng ra thì nó dễ nhìn hơn. Còn vòng for như trên thì do là i+=2 cho nên không tính giai thừa đc. Bạn có thể dùng 1 vòng for riêng để tính giai thừa, còn dễ hơn nữa thì bạn tạo riêng 1 hàm để tính giai thừa rồi chỉ cần truyền tham số vào là xong.
long long giaiThua(int n){
if (n == 1) return 1;
return n*giaiThua(n-1);
}
hoặc
long long giaiThua(int n){
long long gt =1;
for(int i=1;i<=n;i++)
gt*=i;
return gt;
}
thế xuống hàm cal() thì pow/ giaiThua(n) hả b @@
là pow/giaithua (i); vì mình muốn tính i giai thừa trong vòng for. Còn biến int n trong giaiThua chỉ như là cái vỏ đựng giá trị của biến i thôi b :))
trong hàm main… sau khi khởi tạo x,y,n và nhập giá trị… thì in như nào mới có thể truyền giá trị từ hàm ở trên ra màn hình vậy ạ ?
Viết thế thì nó cứ tính đi tính lại suốt và kết quả trả về long
là toạch.
vậy phải làm như nào ạ …e kém phần này quá
Thì viết tử riêng, mẫu riêng kiểu truy hồi rồi mới chia s += tu/mau;
Sửa lại công thức tử… phải sửa khởi tạo nữa, nếu không sẽ nhân với zero là tiu. x + x^2y là không theo quy tắc, tính riêng.
:)). Để mình sửa lại thành long long =)).
vậy có cần sửa như b trên nói nữa k ạ? @@
đâu. mình thấy ở trên đếm từ 1 á…1 thì là x^2*y rồi chứ nhỉ… với cho kq= x lúc đầu r mà… ọc ọc…mình k hiểu lắm vụ này
Nếu bạn cho sum=x từ đầu thì vào trong for sẽ chia cho 0
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long long giaiThua(int n);
double cal(double x, double y, int n);
long long giaiThua(int n){
if (n == 1) return 1;
return n*giaiThua(n-1);
}
double cal(double x, double y, int n)
{
double u;
double kq = x;
int count = 1;
for(int i=1;count<=n+1;i+=2)
{
if(count%2!=0)
u= ( pow(x,i+1)*pow(y,i) ) / giaiThua(i);
else
u =-( pow(x,i+1)*pow(y,i) )/ giaiThua(i);
count++;
kq+=u;
}
return kq;
}
int main()
{
int n;
double x, y;
printf("Nhap n :");
scanf("%d", &n);
printf("Nhap x :");
scanf("%lf", &x);
printf("Nhap y :");
scanf("%lf", &y);
printf("fen(%.lf,%.lf,%d) = %.2f", x, y, n, cal(x,y,n));
}
Bạn biết debug k?, Bạn thử copy code này về r debug 1 lượt là hiểu à @@