30/09/2018, 16:15
Hàm có tham số nhận vào là một hàm khác
Mình là newbie. Cho mình hỏi, bài này là dùng hàm có tham số là hàm để tính nhiều phương trình cùng lúc. Trong trường hợp này là dành cho các phương trình có điểm chung là có nghiệm duy nhất trên đoạn (a; b).
Tuy nhiên, ở dòng gọi hàm phía dưới, tại sao khi gọi hàm Func1
thì lại không có tham số?
Dòng có làm dấu phía dưới.
x = Solve(Func1, -1, 0); //Dòng này cần xem, Func không có tham số
Toàn bộ code
double Func1(double x)
{
return pow(x,5) + 7*x + 1; //Hàm x^5 + 7x +1
}
double Func2(double x)
{
....
//Ttự nhưng với ptr khác
}
double Solve(double F(double x), double a, double b)
{
double left = a, right = b;
while(right-left > Epsilon)
{
double mid = (left+right)/2;
if(F(left)*F(mid) < 0) //gọi hàm F trong hàm Solve
right = mid;
else
left = mid;
}
return (left+right)/2;
}
void main()
{
double x;
x = Solve(Func1, -1, 0); //Dòng này cần xem, Func không có tham số
cout << x;
x = Solve(Func2, 2, 0); //Ttự
....
}
Bài liên quan
vì trong hàm solve đã có x rồi :)))
Có đâu bạn, hình như hàm F chỉ nhận giá trị từ hai tham số a và b, chứ không đưa vào giá trị nào liên quan cho hàm Solve nên ko cần tham số? Mình cứ nghĩ gọi hàm mà ko có tham số sẽ bị lỗi?
trong solve có “double F(double x)”
Em hiểu cái dòng khai báo sau chỉ là khai báo thôi nhé
Nó có nghĩa là hàm
Solve
sẽ nhận vào một hàm là hàmF
. Thêm nữa, hàmF
có cấu trúc như sauChấm dứt.
Khi em gọi hàm
Solve
ở dưới, thì em đã truyền địa chỉ của hàmFunc1
hoặcFunc2
vào. Cả hai hàm này thỏa mãn được cái khai báo ở trên. Tức là có cấu trúc tương tự như hàmF
là tham số của hàmSolve
Bên trong hàm
Solve
ta sẽ gọi lại hàmF
. Ở đây, ta thực sự gọi cái địa chỉ của hàmF
. Nếu em truyềnFunc1
vào thìF
làFunc1
. Tương tự vớiFunc2
.Ở đây, em mới bắt đầu truyền tham số vào hàm
F
, tức là hàmFunc1
hoặcFunc2
Đến thời điểm này thì em mới thực sự truyền
x
vào cho hàmFunc1
hoặcFunc2
.Trước đó, em chỉ có được địa chỉ của hàm F mà thôi. Em không cần, chính xác hơn, chưa cần phải truyền X vào. Tại thời điểm đó hàm Solve chỉ cần biết được đâu là địa chỉ của hàm F. Còn tham số gì sẽ truyền vào sau.