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

c

(Matcha Đá) #1

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


(Trương Tấn Phát) #2

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.


(rogp10) #3

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.


(Matcha Đá) #4

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


(Matcha Đá) #5

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


(Harry Stormborn) #6

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

(Harry Stormborn) #7

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


(Matcha Đá) #8

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 ạ?


(Harry Stormborn) #9

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

(Matcha Đá) #10

thế xuống hàm cal() thì pow/ giaiThua(n) hả b @@


(Harry Stormborn) #11

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


(Matcha Đá) #12

: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 ạ ?


(rogp10) #13

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.


(Matcha Đá) #14

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


(rogp10) #15

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.


(Harry Stormborn) #16

:)). Để mình sửa lại thành long long =)).


(Matcha Đá) #17

vậy có cần sửa như b trên nói nữa k ạ? @@


(Matcha Đá) #18

đâ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


(rogp10) #19

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


(Harry Stormborn) #20
#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?