Tự học code c tại nhà

làm thế nào để có thể tự học c hiệu quả nhất ạ?

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 :smiley:

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.

1 Like

:disappointed_relieved::disappointed_relieved: 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 ạ :disappointed_relieved::disappointed_relieved::disappointed_relieved:. Mình ngu lâu dốt bền quá mà

:disappointed_relieved::disappointed_relieved::disappointed_relieved:tại mình mới học nhiều cái vẫn k phân biệt nổi.:sweat::sweat::sweat::sweat:

1 Like

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;	
}
1 Like

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

1 Like

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 :))

:sleepy::sleepy::sleepy: 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 :smiley: và kết quả trả về long là toạch.

1 Like

vậy phải làm như nào ạ :sweat::sweat::sweat::sweat::sweat:…e kém phần này quá

Thì viết tử riêng, mẫu riêng kiểu truy hồi :slight_smile: 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

1 Like

Nếu bạn cho sum=x từ đầu thì vào trong for sẽ chia cho 0 :slight_smile:

#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 à @@

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?